使用emacs lisp安装emacs插件
Grey
使用emacs lisp安装emacs插件
代码设计
实现这个功能的一段代码示例如下,代码用来安装use-package插件。
(setq inhibit-startup-message t)
(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives
'("melpa" . "http://mirrors.163.com/elpa/melpa/"))
(package-initialize)
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
代码分析
这段代码是从一个视频教程里面搬过来的,基本上是没改动,估计唯一的差异是在于我把melpa的网站切换成了网易的镜像,这样的话在国内做测试会容易一些。
- 第一行代码是禁用了启动界面,这样启动后会是一个空的buffer。
- 接下来,设置了package插件。
这是一个内置的插件,主要是为了能够支持插件的下载安装。
- 为什么要使用package这个基础插件呢?因为后面的插件的检查以及安装都是调用这个插件的接口来实现的。
- package-initialize的使用是为了加在elisp的插件,从帮助描述看这个函数可以简化一些变量设置的工作。
- 最后三行,其实是动作执行的核心所在。这是一个条件判断的分支结构,首先检查一下use-package是否已经安装,如果没安装则刷新插件内容,之后安装这个插件。
功能验证
这一段代码的验证其实还是很容易的,我现在的电脑上的emacs其实是没有什么插件安装的。接下来,我先注释掉最后3行执行动作,之后重启emacs,看看效果。
#+ATTR_LATEX: :width 0.5]
启动之后,查看.emacs.d目录下,没有插件安装的文件。如果是查看 describe-package 对于use-package的说明,也会找不到这个插件。
之后,取消后面三行的注释。
从消息buffer中能够看到这个插件安装的过程。
从.emacs.d的目录中也看得到多出了一些新的插件的文件,不过这里似乎是一次安装了2个插件,可能一起安装了它的依赖插件?
此时,再使用 describe-package 来查看这个插件的信息,已经可以查看到。