(define-key [キーマップ] #\[キー] ' [関数名]) (global-set-key #\[キー] ' [関数名])
*global-keymap*
に設定する場合は、特別にglobal-set-key
という関数が用意されています。それ以外はどちらも同じ書式です。
*global-keymap*
*html-mode-map*
*html+-mode-map*
(html+-modeの導入が必要)*c-mode-map*
*c++-mode-map*
*lisp-mode-map*
*lisp-interaction-mode-map*
ctl-x-map
esc-map
spec-map
filer-keymap
記述例:
「#\*」、「#\C-*」、「#\M-*」、「#\C-M-*」
ただし、"'(),;`\|の9文字には
「#\;」、「#\C-\;」、「#\M-\;」、「#\C-M-\;」
というように「\」をつける必要がある。
SPC | スペースキー |
記述例:
「#\SPC」、「#\C-SPC」、「#\M-SPC」
TAB | Tabキー | #\C-i と同じ |
LFD | (LineFieldキー) | #\C-j と同じ |
RET | Enterキー | #\C-m と同じ |
ESC | Escキー | #\C-[ と同じ |
DEL | Deleteキー | #\C-? と同じ |
NUL | #\C-@ と同じ |
記述例:
「#\TAB」、「#\M-TAB」
PageUp | Page Upキー |
PageDown | Page Downキー |
End | Endキー |
Home | Homeキー |
Left | ←キー |
Up | ↑キー |
Right | →キー |
Down | ↓キー |
Insert | Insertキー |
Delete | Deleteキー |
F1〜F24 | F1〜F24キー |
LBtnDown | マウス左ボタン押し |
LBtnUp | マウス左ボタン離し |
LBtnMove | マウス左ボタンドラッグ |
RBtnDown | マウス右ボタン押し |
RBtnUp | マウス右ボタン離し |
RBtnMove | マウス右ボタンドラッグ |
MBtnDown | マウス中ボタン押し |
MBtnUp | マウス中ボタン離し |
MBtnMove | マウス中ボタンドラッグ |
Select | |
Execute | |
Snapshot | |
Help |
記述例:
「#\PageUp」、「#\C-PageUp」、「#\S-PageUp」、「#\C-S-PageUp」、「#\M-Pageup」、「#\M-C-PageUp」、「#\M-S-PageUp」、「#\M-C-S-PageUp」
(setf (svref *kbd-translate-table* (char-code #\[キー1])) #\[キー2]) (global-set-key #\[キー2] '[関数名])
一部のキーは、以下のように「同じもの」とみなされています。
Enter | #\C-m |
Tab | #\C-i |
Backspace | #\C-h |
Delete | #\C-? |
Esc | #\C-[ |
LFD(Enter+Tab) | #\C-j |
このキーに別の機能を割り当てるには、まず*kbd-translate-table*
を使って空いているキー(キー2)に目的のキー(キー1)を割り当てます。この関数は、キー1が押された場合はキー2が押されたふりをする、というものです。
その上で、キー2に目的の関数を割り当てます。
例えば、C-jにhtml+-insert-path
を、C-M-jにhtml+-insert-path-dialog
を割り当てるには、このようにします。
(setf (svref *kbd-translate-table* (char-code #\C-j)) #\C-F23) (define-key *html+-mode-map* #\C-F23 'html+-insert-path) (define-key *html+-mode-map* #\C-M-F23 'html+-insert-path-dialog)
キー2はどのキーでも構いませんが、ファンクションキーでF13〜F24が空いているので、これを使うといいでしょう。
同時押しもすべて使えますが(C-F20をC-M-jにするなど)、複数の同時押しが絡むとややこしいので、キー1とキー2の同時押しは同じものにしておいた方がいいと思います。
(provide "winkey2") (in-package "editor") ;;; winkey.lからコピー (defvar *default-selection-keymap* (let ((keymap (make-sparse-keymap))) (define-key keymap #\C-c 'copy-selection-to-clipboard) (define-key keymap #\C-x 'kill-selection-to-clipboard) keymap)) (setq-default selection-keymap *default-selection-keymap*) (global-set-key #\C-z 'undo) (global-set-key #\C-v 'paste-from-clipboard) (define-key esc-map #\C-x #'ctl-x-prefix) (define-key esc-map #\C-c #'specific-command-prefix) ;;; Windowsっぽい設定 (global-set-key #\C-A 'selection-whole-buffer) (global-set-key #\C-F 'search-dialog) (global-set-key #\C-N 'new-file) (global-set-key #\C-O 'open-filer) (global-set-key #\C-P 'print-selected-buffer-dialog) (global-set-key #\C-R 'replace-dialog) (global-set-key #\C-S 'save-buffer-dialog) (global-set-key #\Home 'beginning-of-virtual-line) (global-set-key #\End 'end-of-virtual-line) (global-set-key #\C-Home 'beginning-of-buffer) (global-set-key #\C-End 'end-of-buffer) (global-set-key #\S-Home 'selection-beginning-of-virtual-line) (global-set-key #\S-End 'selection-end-of-virtual-line) (global-set-key #\S-C-Home 'selection-beginning-of-buffer) (global-set-key #\S-C-End 'selection-end-of-buffer) (global-set-key #\F3 'search-forward-again) (global-set-key #\S-F3 'search-backward-again) (global-set-key #\M-F4 'kill-xyzzy) (global-set-key #\C-F4 'close-selected-buffer) (global-set-key #\C-Left 'backward-word) (global-set-key #\C-Right 'forward-word) (global-set-key #\S-C-Left 'selection-backward-word) (global-set-key #\S-C-Right 'selection-forward-word)
(load-library "winkey2")
標準のwinkey.lだけでは足りないし、かといってgates.lではC-xやC-cからの機能が軒並み死んでしまいます。そこで、足りないwinkey.lに追加する形で設定しましょう。
ただし、winkey.lを書き替えると、バージョンアップの時にまた元のファイルが上書きされる危険もあるので、別ファイルを作ってxyzzy/site-lisp/に入れ、それをsiteinit.lから呼び出します。
(defun startend-kbd-macro() (interactive) (if (kbd-macro-saving-p) (progn (message "定義終了") (end-kbd-macro)) (progn (message "定義開始") (start-kbd-macro)))) (global-set-key #\S-F1 'startend-kbd-macro)