LoginSignup
13
11

More than 5 years have passed since last update.

emacsclient がちょっと使いづらいので

Last updated at Posted at 2014-12-22

tl;dr ラッパースクリプト を作った。

辛い点

いろいろ機能を盛り込むと emacs の立ちあげが重くなるので、立ちあげっぱなしにしたくなる。

そうなると、シェルのカレントディレクトリのファイル開くのに emacs にファイルパス入れるの面倒なので、CLI から既に立ち上がっている emacs に開いてほしい。

そこで server-mode + emacsclient の出番。しかし、emacsclient は emacs が立ち上がってないと通信先がいないのでファイル開くのに失敗する。

そのために用意された -a オプションを使ってこう実行すると:

$ emacsclient -a '' somefile

emacs が daemon モードかつ server-mode 実行して立ち上がる。しかし現在のシェルではなく別窓で開いてほしいとか GUI 使いたいとかの場合は -a ではダメ。また daemon モードで -n/--no-wait を開くと大変わかりづらくなる。

EmacsWiki: Emacs Client の Starting Emacs automatically を参考にしても、デスクトップとして使っている時と ssh ログインした時で GUI にしてほしい時と screen で新たに開いてほしい時が違う、リトライ上限は?、既に別 screen で立ち上がってる emacs で開いてしまう、などがありつらい。

問題点をまとめると:

  • emacsclient の emacs 自動立ちあげに不満
    • daemon モードに若干不満がある
    • ある面で便利なのは分かる
  • emacswiki に提示されている簡易自動立ちあげスクリプトには問題がある
    • 例えば X で emacs が立ち上がっている状態で ssh ログインして emacsclient を使うと ssh のシェルではなく X の方の emacs で開いてしまう
      • server-name の自動割り当て
    • リトライ上限ほしい
      • init.el 失敗すると延々とリトライし続ける

書いた

問題点というかワガママを通すため && Python の習作を兼ねて emacsclient ラッパースクリプトを書いた:

emacs と emacsclient にパスが通っているのと Mac の GUI で使う場合は open -a Emacs が実行可能な状態を前提にしている。

基本的には emacsclient と同じ使い方でいいが、以下の違いがある:

  • 対象の emacs が立ち上がってない場合は自動で立ちあげてくれる
  • init.el の設定は不要
    • むしろしていると、下記の server-name 自動命名がうまく動かないかも
  • server-name は、X か Mac か screen かで自動的に命名してくれる。
    • screen の時はその screen 毎に命名するので、複数 screen 立ちあげていてもそれぞれで emacs が立ち上がる
  • 追加機能として echo foo | emacsclient - みたいにすると標準入力から受け取った文字列で新たなバッファを作る

使い方

前述したとおり emacsclient と同じだが、具体的にはこういった使い方をしている:

zshrc
if which emacsclientw &> /dev/null
then
    alias e="emacsclientw --no-wait"
    export EDITOR=emacsclientw
fi

こうすると:

$ e somefile
# 現在の環境の名前の emacs が立ち上がってないなら、立ちあげてから emacsclient を実行する
# 立ち上がってるならそのまま emacsclient 実行
$ git commit
# emacsclient を使ってコミットメッセージを編集

みたいなことができるようになる。

まとめ

emacsclient を server-name 自動割り当てして自動で立ちあげてくれるラッパースクリプトを作った。

emacswiki の該当ページも半分も読んでないのでもっといい方法ある人教えてください。

13
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11