Emacs大小写锁定小模式?

5
在Emacs中有一个命令可以打开类似于“小写锁定模式”的功能吗?我想做的是像M-x toggle-caps-mode一样,然后在我键入缓冲区中的每个字母时都是大写字母,直到我再次执行M-x toggle-caps-mode为止。
注意:我不是在寻找如何交换大小写和控件的方向。实际上,这是因为我已经这样做了。我通常非常喜欢它,但偶尔在编辑代码时会出现许多常量全部都是大写字母,长时间按住Shift键会很累。我知道各种upcase转换函数;我宁愿不必输入单词、选择它,然后运行upcase-region
如果有影响,我正在使用带有Emacs 23.3.1的Aquamacs 2.2。

如果你已经将大小写锁定键和控制键交换了,那么你的控制键上就有了大小写锁定功能,为什么不使用呢? - Tom
我猜我在使用“swapped”一词时有些随意。实际上我是指将大写字母键映射为控制键,而控制键仍然是控制键,但我也可以真正地交换它们。如果有一个简单的答案就更好了。 - dantswain
2个回答

5
你不需要输入单词然后再选择它。如果你想让最后一个单词大写,可以按下M-b M-uESC b u。如果这是一个word_with_underscores,你需要按下b多次。
如果你真的想要一个大写锁定小模式,请尝试John Paul Wallington的lockcaps.el

我正在处理一堆下划线单词!不过,lockcaps.el 看起来很有希望。 - dantswain
@dantswain 无论如何,您只需要输入一次。然后,您只需键入前几个字母并使用完成(语义与 M-TAB 或动态与 M-/)。 - Gilles 'SO- stop being evil'
1
自动完成从来不是我的风格,但 lockcaps.el 正好符合我的需求。 - dantswain

2
你可以尝试像这样做:

你可以尝试像这样做:

(define-minor-mode caps-lock-mode
  "caps-lock mode"
  ;;   The initial value.   
  nil   
  ;; The indicator for the mode line.   
  " CAPS-LOCK"   
  ;; The minor mode bindings.   
  '(("a" . (lambda () (interactive) (insert-char ?A 1)))
    ("b" . (lambda () (interactive) (insert-char ?B 1)))
    ;;etc 
    ("A" . (lambda () (interactive) (insert-char ?a 1)))    
    ("B" . (lambda () (interactive) (insert-char ?b 1)))    
    ;;etc
    ))

1
我找到了这个链接:http://lists.gnu.org/archive/html/gnu-emacs-sources/2004-08/msg00013.html,以及其中的各种回复,最终得到了一个稍微更加简洁的版本。虽然我希望能够有内置的解决方案,但如果这就是答案,那么这就是答案。我会再等一段时间,看看是否还有其他不同的建议。 - dantswain
谢谢,这是一个有趣的帖子。特别是关于如何用单个函数替换长键映射表的部分。 - Oleg Pavliv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接