(翻译)Emacs Hooks
Table of Contents
51.2.2 Hooks
Hooks(钩子或挂钩,为了保持文章的纯正性,这种专有名词不做翻译,后续以hooks为主),是定制化Emacs非常重要的一种机制。
一个Hook就是一个Lisp变量,其中包含了一系列在某个特定场景下调用的函数,列表中每个函数叫做hook function。比如kill-emacs-hook
会在Emacs推出前运行。
大部分hook都是Normal HOOK,这意味着每当EMACS运行这个Hook,Hook里面的函数会不带参数依次运行。我们努力维持使大多数HOOK都是normal
hook,以便在使用时保持统一的格式。每一个以‘-hook’结尾的Elisp变量都是normal hook.
少部分hooks是abnormal hooks,他们的名字以‘-functions’结尾,使这些hooks成为abnormal hooks的是其中包含的函数的调用方式。
他们或许需要参数或者他们的返回值会被使用。例如,find-file-not-found-functions 就是一个abnoral hooks,因为只要其中一个函数返回
non-nil,剩余的函数就不会继续被调用了。每一个abnormal hook 变量的文档揭示了其中每个函数的用法。
你可以像设置其他lisp 变量一样使用setq来设置hook变量,但推荐的方式是使用add-hook函数来增加函数到hook里,如下例所示。
大部分Major mode,会在initialization的最后一步调用一个或多个mode hooks,mode hooks是一种便捷的方式去定制每一个modes的行为,
mode hooks都是normal的,例如,这里这里设置一个hook在text mode及其他基于text mode 的模式里开始自动填充模式(minor mode).
(add-hook 'text-mode-hook 'auto-fill-mode)
这是通过调用auto-fill-mode函数并且不加参数,来开启minor mode
接下来,如果你不想在Latex mode中开启auto-fill-mode(Latex mode是基于text mode的),你可以如下设置。
(add-hook 'latex-mode-hook (lambda () (auto-fill-mode -1)))
这里我们使用了特殊宏lambda构造了一个anonymous函数,调用auto-fill-mode ,并赋予参数-1,关闭minor-mode,因为LaTex会在text-mode-hook后
运行latex-mode-hook.
这里给出一个更加复杂的例子,如何使用一个hook去定制C代码的缩进
(setq my-c-style
'((c-comment-only-line-offset . 4)
(c-cleanup-list . (scope-operator
empty-defun-braces
defun-close-semi))))
(add-hook 'c-mode-common-hook
(lambda () (c-add-style "my-style" my-c-style t)))
Major mode hooks(主模式hooks)也会在其他继承于该主模式的其他主模式生效,比如HTML模式继承于text mode,当HTML mode开启的时候,
会先运行text-mode-hook,再运行html-mode-hook,这是一种通过一个hook影响多个相关模式的方式。特别的是,如果你想通过一个hook影响所有
编程语言模式(programing language mode),将函数加入到prog-mode-hook;
在设计hook的时候最好让其中的函数执行顺序不影响结果,任何依赖于函数执行顺序都可能带来麻烦。但函数执行顺序是可预测的,他们会以在hook
中呈现的顺序来执行。
你可以使用remove-hook来清除函数,也可以使用 setq hook-variable nil来清除整个hook
如果hook变量是一个buffer-local,那么buffer-local变量会被使用而不是全局变量,如果buffer-local变量包含元素t,那么全局hook
也会运行。
(翻译)Emacs Hooks的更多相关文章
- Emacs 相关资料翻译
Table of Contents 1. 37 Document Viewing 2. EmacsrelatedTranslation 2.1. Spacemacs 配置层(Configuration ...
- Emacs 快速指南(中文翻译)
Emacs 快速指南 目录 1. 小结(SUMMARY) 2. 基本的光标控制(BASIC CURSOR CONTROL) 3. 如果 EMACS 失去响应(IF EMACS STOPS RESP ...
- 【翻译】Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么?
0.前言 虽然很早就知道R被微软收购,也很早知道R在统计分析处理方面很强大,开始一直没有行动过...直到 直到12月初在微软技术大会,看到我软的工程师演示R的使用,我就震惊了,然后最近在网上到处了解和 ...
- emacs最简单入门,只要10分钟
macs最简单入门,只要10分钟 windwiny @2013 无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...
- Hooks——钩子概览
(资料源于MSDN,本文仅对其进行翻译.批注.其链接为:http://msdn.microsoft.com/en-us/library/windows/desktop/ms644959%28v=vs. ...
- 学习Emacs系列教程
emacs最简单入门,只要10分钟 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3 ...
- 【程序猿助手】Emacs,最强的编辑器,之间的不
wx_fmt=png" alt="" style="max-width:100%; height:auto!important"> 内容简单 ...
- 【程序员小助手】Emacs,最强编辑器,没有之一
内容简介 1.Emacs简介 2.Emacs三个平台的安装与配置 3.自动补全插件 4.小编的Emacs配置文件 5.常用快捷方式 6.和版本控制系统的配合(以SVN为例) [程序员小助手]系列 在这 ...
- 我的Emacs折腾经验谈(一) 一些给新人的建议
这几天都没有动力写mongodb的东西,我果然还是太懒了么~ 主要是没有一个系统的东西整理出来,加上我令人拙计的语言表达能力,这个坑只能慢慢再补了. 最近在折腾emacs这个东西,首先说我曾经算是个极 ...
随机推荐
- windows php线程安全和不安全,两个版本我也看不懂,记下来再说。
Windows下的PHP版本分两种:线程安全版本与非线程安全版本. 要论两者的区别,详细论说起来比较麻烦,从使用者的角度,记住什么时候用哪种版本的区别就可以了吧: 1.windows + IIS + ...
- kali更新源
原文链接:http://www.cnblogs.com/dunitian/p/4712852.html kali2.0官方下载地址: https://www.kali.org/downloads/ 可 ...
- nodejs的第五天学习笔记
一.调试nodejs代码 1)使用console.log() 使用麻烦,用了以后还要删除 2)nodejs的自带调试器 -node debug a.js 没有任何作用,一个玩具,将来有一天可以会变得强 ...
- java: Thread 和 runnable线程类
java: Thread 和 runnable线程类 Java有2种实现线程的方法:Thread类,Runnable接口.(其实Thread本身就是Runnable的子类) Thread类,默认有ru ...
- 多线程学习中的Tips
ParameterizedThreadStart委托与ThreadStart委托,非常相似,但ParameterizedThreadStart委托是面向带参数方法的.注意ParameterizedTh ...
- Linq常用语法详细
1.简单的linq语法 //1 var ss = from r in db.Am_recProScheme select r; //2 var ss1 = db.Am_recProScheme; // ...
- [mysql] 记osx 10.10系统修改mysql root 密码
http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html亲测方法3,已成功重置密码.(感谢@非常,告诉我官网就有重置方法,网上 ...
- ==与equals的区别
==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致.两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方 . ==比较的是引用而equals方法比较的是内容.pu ...
- CSS3图片倒影技术实现及原理
CSS3图片倒影技术实现及原理 目前为止我们已经探讨了很多CSS3中的新功能和新特征.除了上面这些,实际上还有很多CSS新属性并未包含进CSS3官方标准中,像谷歌浏览器或火狐浏览器等都会利用CSS的浏 ...
- 基于事件的异步模式(EAP)
什么是EAP异步编程模式 EAP基于事件的异步模式是.net 2.0提出来的,实现了基于事件的异步模式的类将具有一个或者多个以Async为后缀的方法和对应的Completed事件,并且这些类都支持异步 ...