Emacs 键映射(keymap)
一个键序列是由一些键值单元组成的。键值包括字符,功能键和鼠标按钮以及所有你能发送到电脑的输入。 在elisp中键序列要么是字符串,要么就是向量。 控制字符以 "\C-" 串打头,Meta字符以"\M-"打头。 另外<tab>,<ret>,<esc>,<del>这些事件与"\t", "\r", "\e"和"\d"相对应。 键序列和函数绑定记录在keymap的结构体当中。
全局的keymap是最重要的键映射,因为它总是生效的。全局的键映射在基础模式定义键。大部分的定义在大部分主模式中是通用的。 在每个主或者从模式可以拥有自己的键映射来覆盖全局键映射的一些绑定键,称之为本地keymap.
键盘映射可以继承另一个键盘映射, 使用 set-keymap-parent 函数.
elisp中包含一些标准的前缀键keymap:
esc-map --- <ESC>前缀
help-map --- C-h 前缀
mode-specific-map --- C-c前缀
ctl-x-map --- C-x前缀
mule-keymap --- C-x <RET> 前缀
ctl-x-4-map --- C-x 4 前缀
ctl-x-5-map --- C-x 5 前缀
2C-mode-map --- C-x 6 前缀
vc-prefix-map --- C-x v 前缀的keymap
goto-map --- M-g 前缀的keymap
search-map --- M-s 前缀
facemenu-keymap --- M-o 前缀
其他C-x @, C-x a i, C-x <ESC> 和 <ESC> <ESC> 前缀的keymap没有指定名字。
keymap绑定前缀键用来查找跟随前缀键后的事件。
改变一个键的函数也可以通过如下方式:
(define my-mode-map [remap kill-line] 'my-kill-line)
kbd 转换字符串到键序列
keymapp 查看变量是否是keymap类型
make-keymap 生成向量类型的keymap
make-sparse-keymap 生成稀疏keymap
set-keymap-parent 设置keymap继承另一个keymap.
copy-keymap 拷贝一个keymap
define-key 绑定keymap的键和函数
key-binding 当前活动的keymap中查找相应key对应的函数
local-key-binding 返回当前本地keymap中的绑定函数
local-set-key 设置当前本地keymap的键绑定
local-unset-key 取消当前本地keymap中的键绑定
global-key-binding 返回当前全局键绑定的函数
global-set-key 设置全局keymap键绑定
global-unset-key 取消全局keymap键绑定
lookup-key 查找keymap中的键绑定
define-prefix-command 定一个前缀命令
use-global-map 指定keymap作为全局keymap
use-local-map 指定keymap作为本地keymap
accessible-keymap 返回一个可达的keymap列表
map-keymap 遍历键绑定,调用函数
key-description
single-key-description
text-char-description
where-is-internal 返回与函数绑定的键序列列表
where-is 打印与函数绑定的键序列
describe-bindings 在*help*中显示当前的键绑定
current-global-map 返回当前全局的keymap
current-local-map 返回当前本地的keymap
current-active-maps 返回当前活动的keymap
current-minor-mode-map 返回minor模式的keymap
变量:
global-map 默认的全局keymap
emulation-mode-map-alist 仿真模式时的keymap列表
minor-mode-map-alist 描述keymap是否生效的列表
minor-mode-overriding-map-alist 允许major模式的键绑定覆盖部分minor模式
overriding-local-map 非nil,用来替代buffer本地的keymap
overriding-terminal-local-map 非nil,用来替代overriding-local-map
special-event-map 保存特殊事件的keymap