Emacsのall-the-icons.elがアレ
EmacsをモダンなGUIのエディタ(例: VS Code)に追いつけるよう改造したい!という欲望はよく湧くものです。
しかし、自作なんてできずパッケージをインストールするだけで、しかも英語できない弱者の私は災難に遭ってしまいました。とほほ
環境 : Emacs 25.3.1
追記
この記事は書いた当時のall-the-icons.elがアレだった話です。現在この記事に書いた不具合は修正されています。 tsuu32.hatenablog.com
以下の内容は書いた当時現在ということで読んでください。
Dired Sidebar利用における不具合
dired-sidebarはファイルツリーを横に表示するサイドバー機能を提供するパッケージです。neotreeと似たものですが、こっちのほうが速いらしいです(README曰く)。
dired-sidebar-theme
を指定することで、いつくかの表示スタイルが選べます。 (setq dired-sidebar-theme 'icons)
とすることでall-the-icons-dired-mode
を用いてiconを表示してくれます。
しかし、使ってみるとなんかおかしい。色がついてないし、フォルダのアイコンが変。
原因を調査しました。
all-the-icons-dired
all-the-icons-diredはall-the-iconsを用いてDiredでiconを表示してくれるようにするパッケージです。
これ自体に問題はなさそうでした。
all-the-icons
all-the-iconsに問題がありました。
最近のコミット(2018年8月現在)で、Package-Requires(依存パッケージ)からfont-lock+.elを消しています。しかし、中のコードではfont-lock-ignore
をバリバリ使っています。
Emacsではfont-lock-mode
が有効だと、テキストプロパティのface
より、font-lockで設定されているfaceが優先されます。font-lock+は、プロパティにfont-lock-ignore
をt
と設定するとその名の通りfont-lockでのfaceを無視するという機能を提供しています。つまりall-the-iconsでのiconを正常に表示するにはfont-lock+が不可欠です。
しかし、Package-Requiresにないfont-lock+.elは自動でインストールされず、font-lock-ignore
は使えず、表示が意図されていないものになっていたということでした。 これはIssuesにも書かれています。
これのfixとして、font-lock+.elがなくても動作するようにするPull Requestが出されています。
まとめ
結局私はfont-lock+.elをemacswikiから自分でダウンロードしました。
そしたら、いい感じのアイコンになりました。
よく確認せずmergeしちゃったの!?って気持ちになりました。さらに、IssueやPRがあるのに作者(メンテナ?)から一切反応がないのも悲しいですね(2018-08-29現在)。でもOSSでこういうことってよくあることだと思います。ソースコードが公開されているおかげで、作者が消えても、「どこがバグの原因で」、「どうすれば直るか確認できる」のがOSSのいいところです(そして、それをIssueやPRとして共有できるのがGitHubのいいところですね)。
私自身、問題が何なのか見つけるのにすごい手間取りましたが、Issueを読んでればもっと早く解決できたという教訓を得ました...
[特別公開] 秘伝のタレ
;;; all-the-icons-dired (use-package all-the-icons-dired :quelpa t :defer t ; M-x all-the-icons-install-fonts :config ;;; font-lock+ (use-package font-lock+ :quelpa (font-lock+ :fetcher wiki)) ;; :hook (dired-mode . all-the-icons-dired-mode) ) ;;;dired-sidebar (use-package dired-sidebar :quelpa t :bind ("<f8>" . dired-sidebar-toggle-sidebar) :config (setq dired-sidebar-subtree-line-prefix " .") (cond ((eq system-type 'darwin) ;; (setq dired-sidebar-theme 'icons) (setq dired-sidebar-theme 'nerd) (setq dired-sidebar-face '(:family "Helvetica" :height 140))) (:default (setq dired-sidebar-theme 'nerd) (setq dired-sidebar-face '(:family "Arial" :height 120)))) (setq dired-sidebar-use-term-integration t) (setq dired-sidebar-use-custom-font t))
これ、all-the-icons使ってなくね...?