elisp keymap相关

Jan 3, 2014
2 min read

elisp按键序列概念

elisp按键在elisp中有两种表达方式:

1> 字符串 “\C-x1”

2> 列表vector [?\C-x ?1]

函数(kbd keseq-string)返回字符串对应的按键序列(字符串或列表形式)

功能键用 <>表示, 等

keymap基本概念

keymap是一个中lisp内的数据结构,用于绑定多个按键序列到对应的command上

按键序列可以分为两种

1> prefix key 前缀键,如 C-x

2> complete key 完整的按键,如 x, C-k, C-x C-q

定义一个complete key前,需要定义所有需要的prefix key.

一般都会有多个keymap处于激活状态,分类如下

1> global keymap (shared by all buffers)

2> local keymap (通常由major mode设置)

3> zero or many minor keymap(通常有minor mode提供)

local keymap会覆盖global keymap, minor keymap会覆盖local keymap和global-keymap

create keymap and keymap format

keymap format


**TODO**

函数(keymapp symbal)用于判断指定symbal是否为keymap

create keymap
function desc others
(make-sparse-keymap &optional prompt create and return a new keymap with no entries the usually keymap you need
(make-keymap &optional prompt) create and return a new keymap with char-tables use this if you want bind a lots of keys
(copy-keymap keymap) return a copy of keymap, recursive copy sub keymap recursive copy fails on function keymap

新建keymap的两个函数都可选的有一个prompt参数,用于设置menu使用,一般不设置

一般使用sparse来新建keymap做按键绑定,按键较多时可以考虑keymap

keymap结构里可以递归的包含其他keymaps

keymap继承

keymap可以继承其他keymap(单继承,多继承有其他实现方式),继承的逻辑和一般的类继承类似

function desc others
(keymap-parent keymap) return the keymap’s parent keymap, nil if no
(set-keymap-parent keymap parent) set the keymap parent to parent, if nil, do nothing, recursive set the parent parent

一般用sparse keymap指定parent,non-sparse也可以制定不过因为所有键都会被重写,一般没有意义.

多继承用make-composed-keymap,

function desc others
(make-composed-keymap maps &optional parent) return a new keymap, whose key is first find in (first maps then parent)

例如::

(set-keymap-parent map (make-composed-keymap button-buffer-map special-mode-map))

定义prefix key

TODO

定义按键前缀

TODO

(define-prefix-comamnd symbal &optional mapvar prompt)

active keymaps

TODO

function desc
current-global-map
current-local-map
current-monor-mode-maps
use-global-map
use-local-map

key lookup

TODO

change/remapping/translation/bind keymaps

remap command


keymaps for translating sequences

command for binding keys


| function         | desc |
|------------------|------|
| global-set-key   |      |
| global-unset-key |      |
| local-set-key    |      |
| local-unset-key  |      |
| define-key       |      |

scanning keymaps
----------------

menu keymaps
------------