工作很无聊,生活亦复如是;学编程枯燥,学 elisp 燥上加燥,然而“想象力”是一切的解药。当你身疲意懒之时,深呼吸,按键 M-x 召唤我们的神龙。
我们在编辑器中写一条一条的函数,就如“张僧繇”于壁上画龙,函数内的 interactive 就是催动神龙从“静态”入“动态“的点睛一笔。画龙点上“interative”之须臾,一条条“函数”,霎时雷电破壁,腾云穿天而去。
交互函数的“点睛之笔”在于其内部的 interactive, 模板结构为:
(defun interactive-function (args)
"documentation..."
(interactive ...)
body...)
再往下读 interactive 后面的字符串,确是一头雾水,比如:
(interactive "BAppend to buffer:
r")
读手册 “21.2.2 Code Characters for interactive”,获悉 B 代表 buffer-name, 而尾部的 r 代表 region, 中间的 是分隔符,换言之,这串描述字符的本质属性是 list:
> "BAppend to buffer:
r".split('
')
[ 'BAppend to buffer: ', 'r' ]
然而,文档中轻描淡写一句 B 代表 buffer-name;
虽然得知其内涵,但无论是字幕 B 还是命名 buffer-name 都是静态的名词,怎么会有读取buffer,read-buffer 的含义呢?
再一探,才恍然大悟,原来 B 就是 动态的函数 read-buffer,上面的一串字符 "BAppend to buffer: r" 表达的具象含义是动态的函数组,扩展为:
(interactive
(list (read-buffer
"Append to buffer: "
....
(region-beginning)
(region-end)))
于是茅塞顿开,静态的字符 B 就是动态的函数 read-buffer, 而 r 则对应 (region-beginning) (region-end)。
回头看文档中对 code-character B的描述:
- 'B'
A buffer name. The buffer need not exist. By default, uses the name of a recently used buffer other than the current buffer. Completion, Default, Prompt.
以静态的文字阐述静态的字符,却绝口不提加上一句 B 对应的是 read-buffer 函数,着实让人遗憾。
填补文档的缺憾,以 Emacs 的操作对象分类,将 code 与 function 一一对应。
一、文本对象
文本对象包括:point, mark, region, varable, character, string,number,以及文本编辑的补全 completion:
二、Buffer 与 File
包括 buffer mini-buffer file directory 等:
三、命令
没有对应操作 windows & Frame 的 code, 此处归类 Commands:
四、最高频的 prefix-numeric-value:
同时也将 read-coding-system 归类到此处:
我们在编辑器中写的一条条函数就是挥毫作于画壁上的一条条神龙。
interactive 是画龙点睛的一笔,而 character-code 则是我们指挥若定,输入其“眼耳口”中的咒符。
页面更新:2024-03-10
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号