はじめに
キュレェです。Emacs 歴がもう 4 年くらいになってきました。
4 年目なのにもかかわらず、Emacs のキラーアプリケーションであるところの Magit を今まで使ってきていなかったことをフォロワーに指摘されたので始めてみました。
Magit を使っていると、毎度何かをするたびにエコーエリアに "Symbol's function definition is void: seq-keep" がちらつくので解決法を書いておきます。
magit 完全に理解した,便利だな (なんか seq-keep がないって言われるけど動く)
— キュレェ (@kyureq) 2023年12月16日
普段使っている Emacs を含めた環境は以下です (もしかして古いな?):
- Ubuntu 20.04.6 LTS on WSL 2
- GNU Emacs 28.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.20, cairo version 1.16.0) of 2022-05-31
原因
;; For older Emacs releases we depend on an updated `seq' release from
;; GNU ELPA, for `seq-keep'. Unfortunately something else may already
;; have required
seq', before
package' had a chance to put the more;; recent version earlier on the `load-path'.
magit/lisp/magit-base.el at f4ff817cb2a48f0f7887050c3be469c03a059567 · magit/magit · GitHub より
magit-base.el には、magit が seq.el に依存している旨が書いてあります。seq-keep は seq.el に Emacs 29 にて追加されたっぽい ので、当然俺が使っている Emacs 28.1 においては未定義なわけです。
解決法(楽)
に書いてある seq-keep を init.el に書いてあげればよいです。
解決法(面倒)
seq.el だけを新しいものに更新すればよいです(が、だるいので俺もやっていない)
参考
おわりに
まあそもそも Emacs 29 に上げてないのが悪いよ……