Emacs のあらゆるモードで有効なキーバインドの設定方法 my-keyjack-mode
■ Emacs のあらゆるモードで有効なキーバインドの設定方法 my-keyjack-mode
Emacs では global-set-key で自由にキーボードショートカットを設定することが出来ます。
有名なものだと C-h を backspace として動かすものですね。
(global-set-key "\C-h" 'backward-delete-char)
よく使う機能にスグに押せるキーを設定しておくと Emacs を使うのが便利になります。
■ こうして登録していくと問題が
僕は M-q に lookup-pattern をアサインしているのですが、 この M-q の動作が c-mode では fill-paragraph に上書きされてしまいます。
このように、global-set-key による設定はモードによって上書きされてしまって、 あまり使い勝手が良くありません。
■ そこで
専用のマイナーモードを作り、そのキーバインドの優先度を最大に設定することで あらゆるモードで有効なキーボードショートカットを設定できるようにします。
具体的には以下のような内容を .emacs.el に加えます。 \C-\M-b 〜 meta backspace までの部分は各自好きなように書き替えましょう。
(setq my-keyjack-mode-map (make-sparse-keymap))
(mapcar (lambda (x)
(define-key my-keyjack-mode-map (car x) (cdr x))
(global-set-key (car x) (cdr x)))
'(("\C-\M-b" . iswitchb-buffer)
("\C-\M-f" . find-file)
("\C-\M-g" . grep-find)
("\C-\M-h" . backward-kill-word)
("\C-\M-k" . kill-buffer)
("\C-\M-m" . man)
("\C-\M-w" . my-window-map)
("\M-q" . lookup-pattern) ; in c-mode, M-q works special key
("\M-s" . delete-horizontal-space)
("\C-z" . scroll-down) ; in HTML-mode, C-z works special key
("\C-b" . backward-char) ; for liece
("\C-u" . (lambda ()
(interactive)
(let ((pos (point)))
(beginning-of-line)
(kill-region (point) pos))))
([(super o)] . other-window)
([?\C-=] . browse-url-generic)
([(home)] . beginning-of-buffer)
([(end)] . end-of-buffer)
([(meta backspace)] . (lambda (arg)
(interactive "p")
(delete-region (point) (progn (forward-word (- arg)) (point)))))
))
(easy-mmode-define-minor-mode my-keyjack-mode "Grab keys"
t " Keyjack" my-keyjack-mode-map)
Comments for This Page. Date: 2007-07-22 19:30 (JST)
