magit と elscreen を使いやすく
イントロ
magit
と elscreen
は結構相性悪いと感じることが多く、今まで以下の様な点で困っていた。
- magit-mode を終了しても magit 用の buffer が消えない
- なんとなく気持ち悪い
- 1 つならまだしも、2 ~ 3個残る。
- elscreen 上で magit buffer を閉じた時、どの buffer が開かれるか、学習できなかった
- 本当は最後に作業していた buffer を開きたい。
- 条件によっては、何故か magit 用 buffer がスクリーンに残ったり 、わけがわからない
- 複数の elscreen 上で magit 動かすと、最後の buffer を全く覚えておらず、不思議な挙動をしているように感じてしまう。
- 本当は最後に作業していた buffer を開きたい。
何言っているかわからないと思うが、俺も何が起こってるかわからなかった。
magit
+ elscreen
で運用している人が少ないのか、あまりインターネッツに情報がない。
これはなんとなく magit 使いづらいと感じていた部分を少しだけ直した話になります。
やったこと
以下のような関数作って、フックに追加する。
これで二週間くらい運用して見た限りでは、だいぶストレスがなくなりました。
しかし、magit-status
毎に buffer を新しく生成しているので、PC リソース(というかメモリ)を上手に使えていないはず。
(defun elscreen-kill-all-scratch-screen () "Delete all scratch screen" (interactive) (dolist (screen-and-buffer (elscreen-get-screen-to-name-alist)) (when (and (string-match "*scratch*" (cdr screen-and-buffer)) (> (length (elscreen-get-screen-list)) 1)) (elscreen-kill (car screen-and-buffer))))) (defun delete-all-magit-buffers () "Delete all *magit-xxx* buffer" (interactive) (dolist (buffer (buffer-list)) (when (string-match "*magit" (buffer-name buffer)) (kill-buffer buffer)))) (defun magit-mode-quit-window () "Restores the previous window configuration and kills the magit buffer" (interactive) (delete-all-magit-buffers) (elscreen-kill-all-scratch-screen) (jump-to-register :magit-fullscreen)) (define-key magit-status-mode-map (kbd "q") 'magit-mode-quit-window) (defun with-editor-post-finish-hook-1 () (delete-all-magit-buffers) (elscreen-kill-all-scratch-screen)) (defun with-editor-post-cancel-hook-1 () (delete-all-magit-buffers) (elscreen-kill-all-scratch-screen))