このところEmacsの環境を大きく変えたので、チラシの裏的に書き留めておく。
GUI Emacsへ
いままでtmux上でEmacsを立ち上げていたがターミナル上のEmacsにはいくつか制約があった。
- 使用できないキーバインドがある
- レイアウトが頻繁に崩れる
- かわEmacsができない
特にレイアウト崩れは深刻でmagitのコミットツリーが一定の条件でぐちゃぐちゃになってしまう等大変ストレスフルだったところにかわEmacsがトドメを指した格好となった。
パッケージ管理をel-getからstraight.el+use-packageへ
el-getについては以前記事も書き気に入って使用していたが、パッケージのインストールと設定が別など細かい点では不満があった。
straight.elとuse-pacakgeを合わせて使うことでパッケージのインストールから設定まで1つのS式で完結するという環境が手に入った。
もちろんel-getを採用したとき条件であった、
- パッケージのリストを列挙しておくと
- パッケージが無い場合は自動的にダウンロードしてインストールしてくれる
- すでにインストールしてある場合は何もしない
はそのままである。
更にel-getの頃から懸案だったパッケージへのパッチ当てに対する不満もel-patchを導入することできれいに解決できた。
[Emacs] el-patchでパッケージにパッチを当てる
init-loaderでよみこむ.elを再編成
init-loaderの構成も改善した。
従来はパッケージをいくつかのグループに分けて設定の.elを*.emacs.d/initに置き、そこから必要に応じて.emacs.d/init-loader*へシンボリックリンクを張り、そのシンボリックリンクをinit-loaderで読み込むということをしていた。
しかしグループ分けが面倒になってother.elが肥大化していくわ、シンボリックリンクなんにも意味ないわ、でどうしようかと思っているところで、
この記事を読んで一時はinit-loader廃止しようかとも思ったけど、最終的に読み込む.elの数を大幅に減らすことで落ち着いた。(シンボリックリンクはもちろん廃止)
元々10以上あったファイルは主に以下の4つとなった。
- Emacs標準機能の設定
- use-package群
- 自作関数
- OS毎の設定
この構成ならどのファイルに何が書いてあるか迷うことはないし、逆にある設定をどこに書くべきか迷うこともほぼ無い。パッケージ一覧をみるのも簡単だ。
番外編: Conkyで時刻表示
Conky自体はEmacsと何も関係ないもので、デスクトップ上に時刻やシステム情報を表示するアプリである。
なぜここで紹介するかというと、
- Emacsを全画面(F11)で使いたい
- 全画面だとGnomeのパネルが見えなくなって時刻がわからない
- モードラインの時刻はしっくりこない
というわけでEmacsのウインドウを透過させてConkyの時刻を表示させることにした。
テーマはConky-Vision。こんな感じ
透過処理は以下の通り
;; transparency
(defun toggle-transparency ()
(interactive)
(let ((alpha (frame-parameter nil 'alpha)))
(set-frame-parameter
nil 'alpha
(if (eql (cond ((numberp alpha) alpha)
((numberp (cdr alpha)) (cdr alpha))
;; Also handle undocumented (<active> <inactive>) form.
((numberp (cadr alpha)) (cadr alpha)))
100)
'(100 . 100) '(90 . 90)))))
(global-set-key (kbd "C-c C-t") 'toggle-transparency)
(toggle-transparency)