勉強日記

チラ裏

Git on shell on Emacsで、コミットメッセージを同じEmacs上で編集する

TL;DR

  • GIT_EDITOR=emacsclient
  • M-: (server-start) RET

直面した問題

shellの上でEmacsを使う者と、Emacsの上でshellを使う者がいる

僕は後者です。
全ての作業をEmacs上で完結させたい。
マウスに手を伸ばさないといけないなんて耐えられない。

で、Emacs上でGitを使おうとして直面した問題。
editorにEmacsを設定すると、git commitするたびに新しいEmacsフレームが立ち上がってしまう。
init.elの読み込みに時間がかかって仕方がない

解決方法

  • emacsrunemacsコマンドは、新しくEmacsを起動してバッファを開くコマンド。
  • 対して、emacsclientコマンドは、serverモードで起動しておいたEmacsでバッファを開くことができる

Emacsをサーバーモードで起動する設定

serverの使い方

init.elに下記を記入

(require 'server)
(unless (server-running-p)
   (server-start))

Gitのエディタの設定

下記のいずれかを実施(前者のほうが優先されるそう)

  • 環境変数の設定
    • GIT_EDITOR=emacsclient
  • git configの設定
    • git config --global core.editor

結果

f:id:wand_ta:20190109124205p:plain

  • git commitすると、同じEmacs上でCOMMIT_EDITMSGバッファが開き、コミットメッセージを編集できる。
  • この間、shellは処理待ちとなる

f:id:wand_ta:20190109124213p:plain

  • C-x kでCOMMIT_EDITMSGバッファをkillすると、shellに処理が戻り、commitされる。