Autotyping
==========
Author: lujun9972
Date: 2014-01-29 19:56:51 中国标准时间
Table of Contents
=================
1 使用Skeleton
2 skeleton语言
2.1 skeleton的结构
2.1.1 INTERACTOR可能为:
2.1.2 ELEMENT可能为:
2.2 使用
3 自动插入匹配的字符
4 自动插入预定义文本到空文件中
4.1 auto-insert命令
4.2 auto-insert-alist变量说明
4.3 define-auto-insert命令
4.4 auto-insert变量
4.5 auto-insert-query变量
5 插入/更新版权信息
5.1 copyright命令
5.2 copyright-update命令
5.3 copyright-limit变量
5.4 copyright-current-year变量
5.5 copyright-query变量
6 自动更新文件时间戳
6.1 time-stamp命令
6.2 time-stamp-active变量
6.3 time-stamp-toggle-active命令
6.4 time-stamp-format变量
6.5 time-stamp-line-limit变量
6.6 time-stamp-start / time-stamp-end变量
6.7 time-stamp-count变量
7 根据光标处文本快速插入URL
7.1 quickurl命令
7.2 quickurl-url-file变量
7.3 quickurl-add-url命令
7.4 quickurl-list命令
8 Tempo
8.1 tempo-backward-mark命令
8.2 tempo-forward-mark命令
8.3 tempo-define-template命令
9 Hippie扩展
9.1 hippie-expand命令
9.2 hippie-expand-try-functions-list变量
1 使用Skeleton
===============
* 专门定义的命令--一般以C-c开头
* 使用Abbrev实现Skeleton
* skeleton语言
2 skeleton语言
===============
skeleton是专为Lisp语言定义的扩展,skeletons由函数`skeleton-insert`进行解析
2.1 skeleton的结构
-------------------
skeleton的结构为(INTERACTOR ELEMENT...),
2.1.1 INTERACTOR可能为:
~~~~~~~~~~~~~~~~~~~~~~~~
* prompt-string
* nil
* Lisp expression
可以在lisp中可以进行复杂的读取操作并返回计算的结果
2.1.2 ELEMENT可能为:
~~~~~~~~~~~~~~~~~~~~~
* 字符串`"string"` / 字符 `?C` `?\C`
该字符串/字符会被传递�o`skeleton-transformation-function`表示的函数,并插入返回值,默认该函数为identity
* 回车符`?\n`
回车并重排
* _
标识interregion的插入点
* -
标识插入点,但不会插入interregion
* >
重排该行
* >_
重排_所代表的interregion
* &
逻辑与,表示如果前一个ELEMENT操作时移动了光标,则进行下一个ELEMENT操作
* |
逻辑或,表示如果后一个ELEMENT操作时没有移动光标,则进行下一个ELEMENT操作
* -NUMBER
表示删除前NUMBER个字符
* ()或nil
无意义,直接略过.
* @
增加一个position到变量`skeleton-positions`中
* resume:(注意后面的冒号)
如果前面的ELEMENT操作抛出quit操作,则在这里继续往下操作
* quit
这是一个常量,当由于用户退出操作而进入resume:部分时,该值为非nil
* 另一个SKELETON
ELEMENT也可以是一个SKELETON,被称为subskeleton.
* LISP表达式
执行该LISP表达式,并以其返回值作为要操作的ELEMENT说明,在该LISP表达式中可以使用一下这些变量
* str
这是一个特殊的变量,第一次执行时,会要求用户输入一串字符串,并根据INTERACTOR进行解析,并返回解析结果. 之后再遇到该变量则直接使用该解析结果.
对于每个subskeleton来说,都有自己的str变量
* input
设置读取str变量时的初始值.
* v1 v2
提供给用户自定义的本地变量
* 'LISP表达式'(被引用起来的LISP表达式)
执行LISP表达式,但忽略它的返回值
* 其他
有些mode可以自定义其他的skeleton元素. 这些自定义的元素定义在变量`skeleton-further-elements`中
2.2 使用
---------
* 使用宏`define-skeleton`来为定义的skeleton分配命令
(define-skeleton COMMAND DOCUMENTATION &rest SKELETON)
;; Define a user-configurable COMMAND that enters a statement skeleton.
;; DOCUMENTATION is that of the command.
3 自动插入匹配的字符
=====================
* 可以通过绑定第一个匹配字符到命令`skeleton-pair-insert-maybe`(默认是绑定到self-insert-command)来实现.
* 命令中maybe的意思是,默认情况下,自动插入匹配功能是关闭的,要启用该功能需要设置`skeleton-pair`为非nil,这时若想临时取消自动插入匹配功能,则在输入前先C-u
* 通过定义变量`skeleton-pair-alist`,可以自定义匹配关系
4 自动插入预定义文本到空文件中
===============================
4.1 auto-insert命令
--------------------
M-x auto-insert会自动插入一段预定义的文本到buffer头部. 该命令根据变量`auto-insert-alist`寻找预定义的文本.
4.2 auto-insert-alist变量说明
------------------------------
该变量是一个列表,元素格式为 (CONDITION . ACTION)或((CONDITION . DESCRIPTION) . ACTION)
* CONDITION
CONDITION可以是个正则表达式的字符串,用来匹配新文件的名称.
也可以是一个表示mode的符号,用来匹配处于该mode下的buffer.
* DESCRIPTION
描述字符
* ACTION
ACTION可能是一个文件的绝对路径,则该文件的内容被插入buffer中.
也可以是一段skeleton语言,则被扩展后插入buffer中.
也可能是一段Lisp代码,则执行该段代码.
甚至可以是一个vector,包含了多个上述的内容.
4.3 define-auto-insert命令
---------------------------
使用define-auto-insert可以增加或者修改变量`auto-insert-alist`的值.
4.4 auto-insert变量
--------------------
该变量决定了当采用非交互方式调用`auto-insert`命令时,会发生什么操作
* nil
什么都不做
* t
作插入动作
* 其他
作插入动作,但是标记为没有buffer未被修改
4.5 auto-insert-query变量
--------------------------
该变量决定了在作auto-insert时,是否发出询问�o用户确定
* nil
不询问
* 'function
只有当非交互式地调用auto-insert时才询问
* 其他
一直都询问
5 插入/更新版权信息
====================
5.1 copyright命令
------------------
M-x copyright插入版权信息,其中by的部分取至环境变量`ORGANIZATION`. 若没有设置该变量则提示输入该信息.
5.2 copyright-update命令
-------------------------
M-x copyright-update搜索buffer中的版权信息(仅搜索前`copyright-limit`个字符),并更新版本信息.
5.3 copyright-limit变量
------------------------
copyright-update命令在搜索buffer中版权信息时,仅搜索前`copyright-limit`个字符
5.4 copyright-current-year变量
-------------------------------
该变量决定了版权信息中的时间.
5.5 copyright-query变量
------------------------
该变量控制了是否在更新版本信息时询问用户是否确定. 该变量值的意义类似`auto-insert-query`
6 自动更新文件时间戳
=====================
6.1 time-stamp命令
-------------------
M-x time-stamp自动更新文件中的时间戳信息. 该时间戳信息必须符合一定的模板.
默认情况下,该模板必须在文件的前8行出现,且格式为:
Time-stamp: <>
Time-stamp: " "
6.2 time-stamp-active变量
--------------------------
该变量决定了time-stamp命令是否有效
6.3 time-stamp-toggle-active命令
---------------------------------
该命令切换`time-stamp-active`变量的值.
6.4 time-stamp-format变量
--------------------------
该变量决定了时间戳的格式
6.5 time-stamp-line-limit变量
------------------------------
该变量决定了从文件前多少行内查找时间戳模板
6.6 time-stamp-start / time-stamp-end变量
------------------------------------------
这两个变量决定了时间戳模板的格式
6.7 time-stamp-count变量
-------------------------
决定了一个buffer中有多少个时间戳信息.
7 根据光标处文本快速插入URL
============================
7.1 quickurl命令
-----------------
该命令根据光标所在文本插入URL. 插入的URL存储在外部文件(由变量`quickurl-url-file`决定)中,文件内容为一个list,其元素格式为(KEY . URL)或者(KEY URL COMMENT). 例如:
(("FSF" "http://www.fsf.org/" "The Free Software Foundation")
("emacs" . "http://www.emacs.org/")
("hagbard" "http://www.hagbard.demon.co.uk" "Hagbard's World"))
7.2 quickurl-url-file变量
--------------------------
该变量决定了外部URL存储在那个文件中
7.3 quickurl-add-url命令
-------------------------
用来增加新的KEY/URL对
7.4 quickurl-list命令
----------------------
交互编辑URL列表
8 Tempo
========
Tempo包提供了一种简单的方法来定义强大的模板和宏. 详见tempo.el中的commentary部分
8.1 tempo-backward-mark命令
----------------------------
8.2 tempo-forward-mark命令
---------------------------
8.3 tempo-define-template命令
------------------------------
9 Hippie扩展
=============
详细请见hippie-exp.el中的commentary部分
9.1 hippie-expand命令
----------------------
该命令使用多种方法来补全/扩展光标前的文本. 重复调用该函数,则会列出所有可能的补全.
该命令依次调用变量`hippie-expand-try-functions-list`中的补全函数去补全.
若在命令前加了正数的参数,则直接调用`hippie-expand-try-functions-list`中第N个函数进行补全.
若命令前加了负数的参数或C-u,则表示取消补全.
9.2 hippie-expand-try-functions-list变量
-----------------------------------------
该变量定义了`hippie-expand`命令的补全函数和次序.