2011-10-27 113 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

謝謝,這是一個有趣的線索。特別是關於如何用一個函數替換長鍵盤映射。 –