我工作的一個Emacs輕微的模式,我想它僅適用時的主要模式是有一定的模式(即js-mode
)。換句話說,當我激活我的超級模式時,我希望它定義的鍵映射在所有JS緩衝區中可用(如它是全局的),但不會影響非js緩衝區。幾乎全球Emacs的輔助模式
我知道這可能通過鉤子,但我想避免這種解決方案。理想情況下,我的次要模式只有通過M-x需要時纔會激活(並且在激活時它應該在所有JS緩衝區中生效)。可能?浮現在腦海
我工作的一個Emacs輕微的模式,我想它僅適用時的主要模式是有一定的模式(即js-mode
)。換句話說,當我激活我的超級模式時,我希望它定義的鍵映射在所有JS緩衝區中可用(如它是全局的),但不會影響非js緩衝區。幾乎全球Emacs的輔助模式
我知道這可能通過鉤子,但我想避免這種解決方案。理想情況下,我的次要模式只有通過M-x需要時纔會激活(並且在激活時它應該在所有JS緩衝區中生效)。可能?浮現在腦海
一種解決方案是定義一個實現實際功能的緩衝區局部輕微的模式,但不是直接由用戶,它的名字由內部前綴前綴調用,以防止意外觸發:
(define-minor-mode my--mode
"Mode implementing blah, invoke it with M-x my-super-mode."
nil " Super" nil
;; mode definition goes here, including keymaps, etc.
)
用戶調用的公共模式是全局的。當打開或關閉,它會自動切換所有現有和未來的JS緩衝區內模式:
(defun my--mode-set-maybe()
(my--mode (if my-super-mode 1 0)))
(define-minor-mode my-super-mode
"Super mode, only in effect in JS buffers."
nil "" nil
:global t
(dolist (buf (buffer-list))
(with-current-buffer buf
(my--mode-set-maybe))))
(add-hook 'js-mode-hook 'my--mode-set-maybe)
因爲我不得不查看它,所以'nil「超級」nil「相當於':init-value nil:lighter」Super「:keymap nil' – mtalexan 2015-07-09 22:10:42
聽起來像是你應該定義你自己的'js'模式,而不是。查看'define-derived-mode'。 – tripleee 2013-02-16 10:52:00
通過全局模式做這件事有什麼問題?你定義了全球化的小模式,然後檢查每個特定的緩衝區是否在'開啓'功能中的'js-mode'。 – Dmitry 2013-02-17 02:23:40