从emacser.com上学习到的elisp
hooks
hook 是一个elisp 表,这个表中存放着要被调用的函数的符号(或代码)
emacs 中存在大量的hook ,有emacs-lisp-mode-hook ,c-mode-hook 等,基本上一个mode就提供了一个hook 。
基本操作和操作列表相同
(setq myhook (cdr myhook)) ;; =>丢弃myhook中的第一个函数
(setq myhook (reverse myhook)) ;; =>将myhook反转,改变函数执行的顺序
(setq myhook nil) ;; =>将myhook清空
需要注意的是 : add-hook插入的表执行顺序与插入顺序相反
(defvar myhook nil) ;;定义myhook为空表
(add-hook 'myhook '(lambda ()
(insert "fun1 was called "))) ;;将这个匿名函数1加入到myhook表中去
(add-hook 'myhook '(lambda ()
(insert "fun2 was called "))) ;;将匿名函数2加入myhook表中去
(run-hooks 'myhook) ;; =>执行这条语句会在光标后插入fun2 was called fun1 was called
add-hook 会将函数插入到myhook列表的头部,并且run-hooks 是从myhook头执行到尾的,因此匿名函数2会先执行。