キーマップ
type: Variable
package: editor
file: keymap.l
make-keymap で作られるキーマップの長さです。
seealso: make-keymap
type: Variable
package: editor
グローバルなキーマップです。モード毎のキーマップに何も割り当てられてい
ない場合に使われます。
global-set-key はこのキーマップにバインディングをセットします。
seealso: global-set-key
type: Variable
package: editor
file: keyboard.l
多分、入力された物理的なキーを論理的なキーに変換するためのものです。
この論理的なキーは、F13~F24などのように存在しないキーに振り向けることが
出来ます。例えば、キートップのラベルに別の文字のラベルを貼り付けるような
ものだと思います。
・物理的なキーから論理的なキーへの変換
・ローカルキーマップに論理的なキーの設定があればコマンド実行
・グローバルキーマップに論理的なキーの設定があればコマンド実行
使用例:
;;; C-[ と ESC を別物にする
(setf (svref *kbd-translate-table* (char-code #\C-[)) #\F15)
(global-set-key #\F15 'xxxx)
;;; BSとCtrl-hを別物にする
(setf (svref *kbd-translate-table* (char-code #\C-h)) #\F13)
(global-set-key #\F13 'replace-dialog)
seealso: キー表現使用可能文字
type: Tips
| (global-set-key #\C-h 'replace-dialog) という設定を行うと、
| BS Key を押下した場合も、ダイアログが出てきます。
伝統的な仕様ですが、
(setf (svref *kbd-translate-table* (char-code #\C-h)) #\F13)
(global-set-key #\F13 'replace-dialog)
このようにすれば逃げられなくもないです。
seealso: global-set-key
type: Function
arguments: command-keys COMMAND GLOBAL-KEYMAP LOCAL-KEYMAP &optional MINOR-MODE-KEYMAPS
package: editor
file: builtin.l
指定した関数にバインドされたキーのリストを返します。
MINOR-MODE-KEYMAPS LOCAL-KEYMAP GLOBAL-KEYMAPの順に優先されます。
使用例:
(command-keys 'undo *global-keymap* (local-keymap) (minor-mode-map))
=> (#\C-\\ #\End)
seealso: lookup-keymap
type: Function
arguments: copy-keymap MAP
package: editor
file: keymap.l
キーマップのコピーを返します。
使用例:
;;; gresreg.lより
;;; query-replaceのキーマップをコピーして
;;; query-gresregのキーマップを作って、ちょっと修正する。
(unless *query-gresreg-map*
(setq *query-gresreg-map* (copy-keymap *query-replace-map*))
(define-key *query-gresreg-map* #\C-g '(throw . quit)))
type: Variable
package: editor
file: keymap.l
C-x 4 に続くキーシーケンスのバインディングを格納するキーマップです。
seealso: ctl-x-4-prefix
type: Function
arguments: ctl-x-4-prefix
package: editor
file: keymap.l
C-x 4 プレフィックスです。 [C-x 4]
デフォルトでは
C-x 4 b switch-to-buffer-other-window
C-x 4 f find-file-other-window
の二つが設定されています。
ctl-x-4-prefix の関数セルは普通のコマンドではなく ctl-x-4-map というキ
ーマップを保持しています。
seealso: ctl-x-4-map
type: Variable
package: editor
file: pframe.l
C-x 6 に続くキーシーケンスのバインディングを格納するキーマップです。
seealso: ctl-x-6-prefix
type: Function
arguments: ctl-x-6-prefix
package: editor
file: pframe.l
C-x 6 プレフィックスです。 [C-x 6]
デフォルトではフレーム関係のコマンドが登録されています。
ctl-x-6-prefix の関数セルは普通のコマンドではなく ctl-x-6-map というキ
ーマップを保持しています。
seealso: ctl-x-6-map
type: Variable
package: editor
file: keymap.l
C-x に続くキーシーケンスのバインディングを格納するキーマップです。
seealso: ctl-x-prefix
type: Function
arguments: ctl-x-prefix
package: editor
file: keymap.l
C-x プレフィックスです。 [C-x]
ctl-x-prefix の関数セルは普通のコマンドではなく ctl-x-map というキーマ
ップを保持しています。
参考:
;;; keymap.l
(defvar ctl-x-map (make-keymap))
(setf (symbol-function 'ctl-x-prefix) ctl-x-map)
seealso: ctl-x-map
type: Function
arguments: define-key KEYMAP KEY COMMAND
package: editor
file: builtin.l
キーマップのキーにコマンドを割り当てます。
KEYMAP : キーマップ
KEY : 登録するキー
COMMAND : 実行するコマンド
使用例:
;;; Ctrl-X fのキー割り当てを変える
(define-key ctl-x-map #\f 'my-find-file)
=> t
;;; Esc-f のキー割り当てを変える
(define-key esc-map #\f 'my-find-file)
=> t
;;; Ctrl-C aのキー割り当てを変える
(define-key spec-map #\a 'my-find-file)
=> t
seealso: undefine-key
seealso: global-set-key
seealso: local-set-key
seealso: substitute-key-definition
seealso: make-keymap
seealso: キー表現使用可能文字
seealso: 各種言語キーマップ
type: Function
arguments: describe-bindings
package: editor
file: keymap.l
カレントバッファのキー割り当て一覧を表示します。
type: Function
arguments: describe-key KEY
package: editor
file: help.l
指定したキーにバインドされた関数と docstring を表示します。
seealso: describe-key-briefly
type: Function
arguments: describe-key-briefly KEY &optional ARG
package: editor
file: help.l
指定したキーにバインドされた関数を表示します。[C-x ?]
KEY : 検索するキー
ARG : 出力(表示)先をどこにするか
nil : ステータスバーに表示
non-nil : バッファに「キー (関数名)」のフォーマットで文字列を出力
seealso: describe-key
type: Variable
package: editor
file: keymap.l
ESC に続くキーシーケンスのバインディングを格納するキーマップです。
seealso: meta-prefix
type: Function
arguments: get-ime-mode
package: editor
file: builtin.l
IMEのON/OFF状態を返します。
戻り値は以下の通りです
t 変換モード
nil 直接入力モード
seealso: toggle-ime
type: Function
arguments: global-set-key KEY COMMAND
package: editor
file: keymap.l
グローバルなキーマップにキーを登録します。
使用例:
(global-set-key #\C-r 'previous-page)
(global-set-key #\S-Left 'selection-backward-char)
(global-set-key #\S-C-Left 'selection-backward-word)
seealso: global-unset-key
seealso: define-key
seealso: local-set-key
seealso: undefined
seealso: *global-keymap*
seealso: キー表現使用可能文字
type: Function
arguments: global-unset-key KEY
package: editor
file: keymap.l
グローバルなキーマップのキーの割り当てを解除します。
使用例:
;;; global-set-keyで割り当てたキーを解除してみる。
(global-set-key #\C-r 'previous-page)
=> t
(global-unset-key #\C-r)
=> t
seealso: global-set-key
type: Function
arguments: key-to-string KEY &optional ESC-TO-META
package: editor
file: help.l
キーを読みやすいように文字列に変換します。
ESC-TO-META : non-nilならESCをM-に変換します
使用例:
(key-to-string '(#\ESC #\C-a)) => "ESC C-a"
(key-to-string '(#\ESC #\C-a) t) => "M-C-a"
type: Function
arguments: local-keymap &optional BUFFER
package: editor
file: builtin.l
バッファ BUFFER のローカルキーマップ (use-keymap で設定されたキーマッ
プ) を返します。
BUFFER が省略された場合はカレントバッファが対象になります。
seealso: use-kaymap
seealso: local-set-key
type: Function
arguments: local-set-key KEY COMMAND
package: editor
file: keymap.l
カレントバッファのローカルキーマップにキーを登録します。
引数の意味は global-set-key と同じです。
seealso: local-unset-key
seealso: local-keymap
seealso: global-set-key
seealso: define-key
type: Function
arguments: local-unset-key KEY
package: editor
file: keymap.l
ローカルキーマップのキー割り当てを解除します。
使用例:
;;; lisp-modeのTABのローカルキーマップを外す。
(lookup-key-command #\TAB)
=> lisp-indent-line
(local-unset-key #\TAB)
=> t
(lookup-key-command #\TAB)
=> self-insert-command
seealso: local-set-key
type: Function
arguments: lookup-key-command KEY
package: editor
file: help.l
指定したキーに設定された関数を返します。
lookup-keymapを使って実装されています。
seealso: lookup-keymap
type: Function
arguments: lookup-keymap KEYMAP KEY &optional IGNORE-CASE SYMBOL-ONLY
package: editor
file: builtin.l
指定したキーマップの中で指定したキーにバインドされた関数を返します。
seealso: command-keys
seealso: lookup-key-command
type: Function
arguments: make-keymap
package: editor
file: builtin.l
空のキーマップを作成します。
seealso: make-sparse-keymap
seealso: keymapp
seealso: use-keymap
seealso: define-key
seealso: lookup-keymap
type: Function
arguments: make-sparse-keymap
package: editor
file: builtin.l
空のキーマップを作成します。
キー定義の数が少ない時に使うとメモリを節約できます。
使用例:
;;; lispmode.lより
(unless *lisp-mode-map*
(setq *lisp-mode-map* (make-sparse-keymap))
(define-key *lisp-mode-map* #\C-M-x 'eval-defun)
...
(define-key *lisp-mode-map* #\) 'lisp-electric-close))
seealso: make-keymap
type: Function
arguments: meta-prefix
package: editor
file: keymap.l
ESC プレフィックスです。 [ESC]
meta-prefix の関数セルは普通のコマンドではなく esc-map というキーマッ
プを保持しています。
seealso: esc-map
type: Function
arguments: set-extended-key-translate-table KEY C
package: editor
file: keyboard.l
通常は同時押しができないキーを別のキーに振り向けるテーブルです。
| c-modeでシフトを押しながらTABを押した時に
| インデントしてもらおうと思ったんですが、
| #\TABを#\S-TABにしたらSHIFTは使えませんとのことで。
残念ながらまともな手段では Shift+Tab は使えません。が、まともでない手
段が用意されています。
(set-extended-key-translate-table exkey-S-tab #\F20)
このようにしておくと、Shift+Tab が押されたときに F20 が押されたふりをするので
(global-set-key #\F20 'foo)
とすればお望み通り(^^
exkey-... に指定できるのは以下の通り。
exkey-space
exkey-S-space
exkey-C-space
exkey-S-C-space
exkey-M-space
exkey-S-M-space
exkey-C-M-space
exkey-S-C-M-space
exkey-backspace
exkey-S-backspace
exkey-C-backspace
exkey-S-C-backspace
exkey-M-backspace
exkey-S-M-backspace
exkey-C-M-backspace
exkey-S-C-M-backspace
exkey-tab
exkey-S-tab
exkey-C-tab
exkey-S-C-tab
exkey-return
exkey-S-return
exkey-C-return
exkey-S-C-return
exkey-M-return
exkey-S-M-return
exkey-C-M-return
exkey-S-C-M-return
exkey-escape
exkey-S-escape
exkey-zenkaku
exkey-S-zenkaku
exkey-C-zenkaku
exkey-S-C-zenkaku
exkey-S-M-zenkaku
type: Function
arguments: set-function-bar-label CHAR LABEL
package: editor
file: builtin.l
ファンクションバーのラベルを変更します。
CHAR : 各ファンクファンクションバーに対応したキャラクタ
LABEL : 表示するラベル
使用例
(global-set-key #\F3 'search-forward-again)
=> t
(set-function-bar-label #\F3 "次検索")
=> t
seealso: set-number-of-function-bar-labels
type: Variable
package: editor
file: keymap.l
C-c に続くキーシーケンスのバインディングを格納するキーマップです。
seealso: specific-command-prefix
type: Function
arguments: specific-command-prefix
package: editor
file: keymap.l
C-c プレフィックスです。 [C-c]
specific-command-prefix の関数セルは普通のコマンドではなく spec-map と
いうキーマップを保持しています。
seealso: spec-map
type: Function
arguments: substitute-key-definition OLDDEF NEWDEF &optional (KEYMAP *global-keymap*) (OKEYMAP KEYMAP)
package: editor
file: keymap.l
OKEYMAP において OLDDEF が割り当てられているすべてのキーに対して、
KEYMAP において NEWDEF を割り当てます。
例:
;;; text-mode での行の移動を物理行単位にする
(substitute-key-definition 'next-virtual-line 'next-line
*text-mode-map* *global-keymap*)
(substitute-key-definition 'previous-virtual-line 'previous-line
*text-mode-map* *global-keymap*)
seealso: define-key
type: Function
arguments: toggle-ime &optional ON-OR-OFF
package: editor
file: builtin.l
IMEのON/OFFを制御します。
non-nil IMEをONにする
nil IMEをOFFにする
省略時 IMEをトグルする
seealso: *ime-mode-hook*
seealso: get-ime-mode
type: Function
arguments: undefine-key KEYMAP KEY
package: editor
file: keymap.l
キーマップのキーの割り当てを解除します。
KEYMAP : キーマップ
KEY : 削除するキー
使用例:
;;; C-lをfiler-reloadに割り当てて、解除してみる
(define-key filer-keymap #\C-l 'filer-reload)
=> t
(undefine-key filer-keymap #\C-l)
=> t
seealso: define-key
type: Function
arguments: use-keymap KEYMAP &optional BUFFER
package: editor
file: builtin.l
バッファが使用するキーマップを設定します。
KEYMAP : 使用するキーマップを指定します。
BUFFER : バッファを指定します。省略時はカレントバッファに適用されます。
使用例:
;;; lispmode.lより
(defun lisp-mode ()
(interactive)
(kill-all-local-variables)
(setq buffer-mode 'lisp-mode)
(setq mode-name "Lisp")
(use-keymap *lisp-mode-map*)
...
(run-hooks '*lisp-mode-hook*))
seealso: make-keymap
seealso: define-key
type: Tips
#\aや#\C-bのように文字として表現します。ただし、\"'(),;`| の9文字は、
lispの構文上の特別な意味があるので、それを抑制するために'\'を前置します。
#\a ; a
#\; ; ;
#\C-b ; Ctrl+b
#\C-\; ; Ctrl+;
#\M-\; ; Alt+;
#\C-M-\; ; Ctrl+Alt+;
Ctrl、Alt、Shiftの同時押しも表現できます。C-、M-、S-の順番は何でも良いです。
#\C- ; Ctrl同時押し
#\S- ; Shift同時押し
#\C-S- ; Ctrl+Shift同時押し
#\M- ; Alt同時押し
#\M-C- ; Alt+Ctrl同時押し
#\M-S- ; Alt+Shift同時押し
#\M-C-S- ; Alt+Ctrl+Shift同時押し
キーによっては同時押しできるキーに制限があります。
例えばS-TABは普通のやり方ではできません。どうしてもやりたければ、
set-extended-key-translate-table を参照して下さい。
┌─────────────┬─────────────┐
│キー │同時押しできるキー │
│ ├─┬─┬─┬─┬─┬─┬─┤
│ │M │C │M │S │C │M │M │
│ │ │ │C │ │S │S │C │
│ │ │ │ │ │ │ │S │
├─────────────┼─┼─┼─┼─┼─┼─┼─┤
│ !"#$%&'()*+,-./ │○│○│○│X│X│X│X│
│0123456789:;<=>? │ │ │ │ │ │ │ │
│@ABCDEFGHIJKLMNO │ │ │ │ │ │ │ │
│PQRSTUVWXYZ[\]^_ │ │ │ │ │ │ │ │
│`abcdefghijklmno │ │ │ │ │ │ │ │
│pqrstuvwxyz{|}~ │ │ │ │ │ │ │ │
├─────────────┼─┼─┼─┼─┼─┼─┼─┤
│SPC スペースキー │○│○│X│X│X│X│X│
├─────────────┼─┼─┼─┼─┼─┼─┼─┤
│TAB Tabキー │○│X│X│X│X│X│X│
│LFD │ │ │ │ │ │ │ │
│RET Enterキー │ │ │ │ │ │ │ │
│ESC Escキー │ │ │ │ │ │ │ │
│DEL │ │ │ │ │ │ │ │
│NUL │ │ │ │ │ │ │ │
├─────────────┼─┼─┼─┼─┼─┼─┼─┤
│PageUp Page Upキー │○│○│○│○│○│○│○│
│PageDown Page Downキー │ │ │ │ │ │ │ │
│End Endキー │ │ │ │ │ │ │ │
│Home Homeキー │ │ │ │ │ │ │ │
│Left ←キー │ │ │ │ │ │ │ │
│Up ↑キー │ │ │ │ │ │ │ │
│Right →キー │ │ │ │ │ │ │ │
│Down ↓キー │ │ │ │ │ │ │ │
│Pause Pauseキー │ │ │ │ │ │ │ │
│Scroll ScrollLockキー │ │ │ │ │ │ │ │
│Apps Applicationキー │ │ │ │ │ │ │ │
│Insert Insertキー │ │ │ │ │ │ │ │
│Delete Deleteキー │ │ │ │ │ │ │ │
│Help どのキー? │ │ │ │ │ │ │ │
│F1~F24 F1~F24キー │ │ │ │ │ │ │ │
│LBtnDown 左ボタン押し │ │ │ │ │ │ │ │
│LBtnUp 左ボタン離し │ │ │ │ │ │ │ │
│LBtnMove 左ボタンドラッグ│ │ │ │ │ │ │ │
│RBtnDown 右ボタン押し │ │ │ │ │ │ │ │
│RBtnUp 右ボタン離し │ │ │ │ │ │ │ │
│RBtnMove 右ボタンドラッグ│ │ │ │ │ │ │ │
│MBtnDown 中ボタン押し │ │ │ │ │ │ │ │
│MBtnUp 中ボタン離し │ │ │ │ │ │ │ │
│MBtnMove 中ボタンドラッグ│ │ │ │ │ │ │ │
│XBtn1Down │ │ │ │ │ │ │ │
│XBtn1Up │ │ │ │ │ │ │ │
│XBtn1Move │ │ │ │ │ │ │ │
│XBtn2Down │ │ │ │ │ │ │ │
│XBtn2Up │ │ │ │ │ │ │ │
│XBtn2Move │ │ │ │ │ │ │ │
│MouseMove │ │ │ │ │ │ │ │
└─────────────┴─┴─┴─┴─┴─┴─┴─┘
例えば、#\RETと#\C-mは内部的には同じ文字と見なされます。このような文字は以下
のとおりです。
(eq #\TAB #\C-i) => t
(eq #\LFD #\C-j) => t
(eq #\RET #\C-m) => t
(eq #\ESC #\C-[) => t
(eq #\DEL #\C-?) => t
(eq #\NUL #\C-@) => t
xyzzy 0.2.2.236 からCommon Lispと同様の文字も利用可能です。
このような文字は以下のとおりです。
(eq #\Backspace #\C-h) => t
(eq #\Tab #\TAB) => t
(eq #\Newline #\LFD) => t
(eq #\Linefeed #\LFD) => t
(eq #\Page #\C-l) => t
(eq #\Return #\RET) => t
(eq #\Space #\SPC) => t
(eq #\Rubout #\DEL) => t
seealso: global-set-key
seealso: define-key
seealso: *kbd-translate-table*
Link: http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/sec_13-1-7.html
type: Tips
プログラム言語毎(というか、モード毎)にキーマップを変更することができます。
;;; 言語用キーマップ一覧
*basic-mode-map* ; BASIC用
*csharp-mode-map* ; C#用
*c-mode-map* ; C言語用
*c++-mode-map* ; C++用
*css-mode-map* ; CSS用
*html-mode-map* ; HTML用
*idl-mode-map* ; IDL用
*java-mode-map* ; java用
*LaTeX-mode-map* ; LaTeX用
*lisp-mode-map* ; lisp用
*pascal-mode-map* ; PASCAL用
*perl-mode-map* ; Perl用
*sql-mode-map* ; SQL用
;;; その他キーマップ一覧
*box-drawings-mode-map* ; 罫線描画モード用
*buffer-menu-mode-map* ; buffer-menu用
*calc-mode-map* ; calc用
*calendar-mode-map* ; calendar用
*den8-view-mode-map* ; 電信八号のメール表示用
*den8-summary-mode-map* ; 電信八号のメール一覧表示用
*den8-draft-mode-map* ; 電信八号の下書き用
*diff-mode-map* ; diff用
*async-grep-mode-map* ; 非同期grep用
*lisp-interaction-mode-map* ; *scratch*というかlisp-interaction-mode用
*fundamental-mode-map* ; モードが無いとき用
*log-summary-mode-map* ; niftyのログ一覧用
*log-article-mode-map* ; niftyのログ用
*command-output-mode-map* ; 外部コマンド実行時用
*shell-mode-map* ; shellモード用
*tail-f-mode-map* ; tail-f用
*text-mode-map* ; テキスト用
*view-mode-map* ; テキスト表示用
使用例:
;;; c++-modeでのキー割り当てを変える
(define-key ed::*c++-mode-map* #\C-s 'foo)
;;; lisp-modeでのキー割り当てを変える
(define-key ed::*lisp-mode-map* #\TAB 'lisp-complete-symbol)
;;; Lispインタラクションモードでのキー割り当てを変える
(define-key ed::*lisp-interaction-mode-map* #\TAB 'lisp-complete-symbol)
seealso: define-key