emacs的cask包管理

cask是什么

cask是emacs的一个包管理器
将emacs的包下载安装和管理从emacs分离出来,
统一通过.cask描述文件进行管理.
然后使用外部的cask命令进行:下载,安装,版本维护,等等

为什么使用cask

原生的emacs

  • 只能手动下载包,安装,升级(给定一份包的列表,用户需要一个一个查找和安装)
  • 不去管理版本和兼容性(只能从 ~/.emacs.d/elpa 文件夹下看到安装的包)

子龙山人的配置

本身就是一个简易的包管理系统

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
31
32
33
;; 为使用common lisp的语法中的loop函数
(require 'cl)

;; 配置使用melpa源
(when (>= emacs-major-version 24)
(require 'package)
(package-initialize)
(add-to-list 'package-archives
'("melpa-stable" . "https://melpa.org/packages/") t)
)

;; 定义需要的包
(defvar choug/packages '(
company
) "Default Packages")

;; 定义不需要卸载的包列表为自定义的变量
;; 在使用package-autoremove时不会自动删除
(setq package-selected-packages choug/packages)

;; 检测是否所有包均被安装
(defun choug/packages-installed-p ()
(loop for pkg in choug/packages
when (not (package-installed-p pkg)) do (return nil)
finally (return t)))

;; 如果有包没有安装,则安装之
(unless (choug/packages-installed-p)
(message "%s" "Refreshing package database...")
(package-refresh-contents)
(dolist (pkg choug/packages)
(when (not (package-installed-p pkg))
(package-install pkg))))
  • 已经能够根据包的名称列表去安装所有包,不再需要一个个手动查找,安装.
    之所以简易是因为
    • 只能管理包名称,不能管理具体版本
    • 需要时刻更改el文件,
      emacs针对lisp的语法配置显得用其他编辑器编辑该el文件就是灾难

cask

相比子龙山人的配置,cask可以

  • 定义具体版本,具体到git的某个commit
    • 手动安装某个固定版本的包:克隆到elpa后全换到特定commit
  • 如果有多个emacs版本,可以为每个emacs定制合适的能正常运行的包
  • 语法相对简单,emacs出问题了可以在外部修复

使用场景

推荐人群

  • 用的包异常多还异常容易出错还异常想升级到最新
  • 在emacs报错后失去用emacs -Q修理配置文件的信念,不然子龙山人的配置已经足够了

不需要使用人群

  • 需要的功能太简单以至于一万年不用升级包

如何使用cask

参考

  1. 为什么使用cask
  2. 使用cask