茶番
近年のテキストエディタの発展は著しいです。
など、キャッチアップも難しいほどの変革が訪れています。
ですが元の流れを忘れてはいけません。我々 (?) 一般人がナードなエディタに触れることができるのは、 VSCode が LSP をもたらしたためです。そして VSCode は、今最もメジャで美しいエディタとして君臨しています:
現代のテキストエディタとはかくあるべし……! このアプリに Emacs で対向できるのでしょうか?
これが『OS』と呼ばれたエディタの姿なんですか……?
エディタの見た目は設定次第で良くなります。ある程度設定しました。
設定後、まだ羨ましい点
VSCode の サイドバーとか下部ペインが綺麗でいいな と思っていました。
Emacs にも似たようなものが欲しいです!
サイドバーを VSCode 風にしてみた
2 点のみ変更しました。
OUTLINE 相当のウィジェットを追加
まず機能的な差を埋めます。 lsp-ui-imenu
を使えば、ソースのアウトラインを表示できます:
(leaf lsp-ui-imenu
:ensure nil
:after lsp-mode
:custom ((lsp-imenu-sort-methods . '(position)) ; この設定でアウトライン表示に
(lsp-ui-imenu-buffer-name . "@imenu") ; 後述のバッファグループの都合で名称変更
(lsp-ui-imenu-window-width . my-sidebar-width))
:hook (lsp-ui-imenu-mode-hook . hl-line-mode))
さらにカーソル位置と連動してフォーカスが更新されるようにしました (gist):
GIF です。 Firefox では動かないかも……
しかしファイルツリーとアウトラインを同時に表示することはできません。どうしたものでしょうか。
マルチタブ表示
centaur-tabs を使っていたので、これで『タブ』表示することを思いつきました:
(leaf centaur-tabs
:after projectile
:custom ((centaur-tabs--buffer-show-groups . nil)
(centaur-tabs-cycle-scope . 'tabs)
(centaur-tabs-buffer-groups-function . #'my-centaur-tabs-group))
:config
;; サイドバー および ボトムバーのバッファグループを作成する
(defun my-centaur-tabs-group ()
(cond ((string-equal "@" (substring (buffer-name) 0 1)) '("Sidebar") )
((string-equal "⊥" (substring (buffer-name) 0 1)) '("Bottom bar") )
;; Projectile のグループに fallback
(t (centaur-tabs-projectile-buffer-groups))))
(centaur-tabs-mode t))
実際、こんな画面になります:
- サイドバーには
@imenu
,@tree
のように@
から始まるバッファが表示されます- 他にも良さそうなウィジェットがあれば追加していきます
- ボトムバーには
⊥ vterm
,⊥ scratch
のように⊥
から始まるバッファが表示されます- ただボトムバーの使い道は思いつきません。
- エラー表示は minibuffer で見ます
- シェルは
tmux
pane から使います
- ただボトムバーの使い道は思いつきません。
終わり
サイドバーがリッチになりました! VSCode のアイコン表示がとても好きなので、まだまだ未練はありますが、そこは妥協しよう 1 と思います。
-
Emacs は通常ターミナルでアイコン表示できません。 ↩