2011-10-27 68 views
5

在Emacs中是否有一个命令打开可能被描述为“大写锁定次要模式”的命令?我正在寻找类似于M-x toggle-caps-mode的东西,然后我在缓冲区中输入的每个字母都是大写字母,直到我再次执行M-x toggle-caps-modeEmacs大写锁定小模式?

注意:我不在寻找关于如何交换上限和控制的指示。事实上,这是因为我已经这样做了。我对它一般很满意,但偶尔我会编辑代码,其中有一堆常量都是大写的,并且它会成为压低shift键的压力。我知道各种upcase转换函数;我宁愿不必输入单词,选择它,然后运行upcase-region

如果有问题,我使用Aquamacs 2.2 w/Emacs 23.3.1。

+0

如果你已经交换了大写和控制,那么你有大写锁定控制键,不是吗?你为什么不使用它? – Tom

+0

我猜我玩的是“交换”一词。我的意思是说我已经重新控制了帽子。控制仍然是控制,但我可以实际交换它们。如果对这个问题有一个简单的答案,仍然很好奇。 – dantswain

回答

4

无需键入单词,然后选择它。如果您想要说出最后一个字,请按M-b M-uESC b u。好的,如果它是word_with_underscores,您需要多次按b

如果您确实想要大写锁定次要模式,请尝试John Paul Wallington's lockcaps.el

+0

这是一大堆'word_with_underscores'我正在使用!不过,lockcaps.el看起来很有前景。 – dantswain

+0

@dantswain反正你只需要输入一次。然后你只需输入前几个字母并使用完成(用M-TAB语义化或用M- /'动态化)。 – Gilles

+1

Autocomplete从来就不是我的风格,但'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 
    )) 
+0

我发现这个:http://lists.gnu.org/archive/html/gnu-emacs-sources/2004-08/msg00013.html和各种回复,最终给出一个稍微更紧凑的版本。我希望有一个内置的,但如果这是答案,那么这就是答案。我会给它一些时间来看看是否有其他人提供不同的东西。 – dantswain

+0

谢谢,这是一个有趣的线索。特别是关于如何用一个函数替换长键盘映射。 –