iT邦幫忙

DAY 12
4

EMACS 新思維系列 第 12

[EMACS新思維 第十五天] Elisp 入門(五): add-hook 與 set-key

有時候,我們會爲自己常用的 mode 添加一些特殊的功能,或者將按鍵與函數(defun 定義的功能)捆綁。這次介紹實用的 add-hook 掛鉤及 set-key 按鍵設定。
ADD-HOOK
將函數與某個 mode 掛鉤用。例如,我希望在 python-mode 啓動時,同步啓動 autopair-mode,則可以如下書寫:

(add-hook 'python-mode-hook
          (progn
            (setq py-load-pymacs-p nil)
            (highlight-parentheses-mode t)
            (autopair-mode t)))

需注意:

  1. 各種 mode 的啓動命令實際上也是一個可供調用的函數,因此,也常見別人建立快捷鍵,在 mode 之間切換
  2. add-hook 只能接一個 mode-hook 跟一個函數,所以若要同時執行多個設定,請用(progn ...)

SET-KEY
首先,指定鍵盤按鍵的語法很簡單,原理也一樣,均是對按鍵地圖做調整。

這是全域(整個 emacs 都受影響)
(global-set-key 按鍵組合 函數功能)
(define-key (current-global-map) key binding)
兩者等價。

這是局域(單一 mode 或環境如 gnus 受影響)
(local-set-key 按鍵組合 函數功能)
(define-key (current-local-map) key binding)
會以執行時 (current-local-map) 爲主(看你的 major-mode),所以 local-set-key 一般都會跟 add-hook 合併執行,除非你有某種理由非得指定 local-mop。如下例:

(add-hook 'python-mode-hook
          (progn
            (local-set-key (kbd "C-c q") 'shell)))

接著,來講講按鍵組合的地方。雖然有多種方式可以指定,我個人是最常用 (kbd "") 這個方式
(global-set-key (kbd "M-a") 'bar-function)
(global-set-key (kbd "C-a") 'foo-function)
(global-set-key (kbd "C-M-x) 'bar-function)

特殊按鍵用<>框起,如上下左右:<up>, <down>, <left>, <right>
或F1等 function-key <f11>
(global-set-key (kbd "<f11>") 'foo-function)

大致上是這樣,詳細的可看參考資料。
Mastering Emacs
ErgoEmacs


上一篇
[EMACS新思維 第十四天] Elisp 入門(四): defun,函數的定義
下一篇
[EMACS新思維 第十六天] Elisp 與其他 S-expression 語言編輯的技巧
系列文
EMACS 新思維27

1 則留言

我要留言

立即登入留言