【macOS】Emacsをログイン時に常駐させ、emacsclientでEmacs起動を高速化

スポンサーリンク

Emacsはお世辞にも起動時間は早いとは言えない。特に、init-loaderを使って初期設定ファイルを機能分割してファイル数が増えてきたりすると見通しは良くなる一方で、起動時間は遅くなる。

そこでEmacsのServer機能を利用して改善する。Macパソコンへのログオン時にEmacsを起動し常駐させ、常駐しているEmacsを呼び出すにはemacsclientコマンドを利用。

Emacsの設定

初期設定ファイルに下記を追加し、GUIのEmacs起動と同時にServer起動させる。
尚、私はinit-loaderを利用しており、~/.emacs.d/inits/02_server.elファイルを作成。

;; server start for emacs-client
(when window-system                       ; GUI時
  (require 'server)
  (unless (eq (server-running-p) 't)
    (server-start)

    (defun iconify-emacs-when-server-is-done ()
      (unless server-clients (iconify-frame)))

    ;; C-x C-cに割り当てる(好みに応じて)
    (global-set-key (kbd "C-x C-c") 'server-edit)
    ;; M-x exitでEmacsを終了できるようにする
    (defalias 'exit 'save-buffers-kill-emacs)
    ;; 起動時に最小化する
    (add-hook 'after-init-hook 'iconify-emacs-when-server-is-done)

    ;; 終了時にyes/noの問い合わせ
    (setq confirm-kill-emacs 'yes-or-no-p)
    )
  )

一度Emacsが常駐したら簡単に終了してしまわないように、C-x C-cキーは別の機能に割り当てておく。Emacsの終了は、M-x exitかGUIの[x]ボタンで行う。
更に、終了時には Yes/No の問い合わせを行うようにした。

emacsclientでEmacs起動

Server起動しているEmacsの呼び出しは、下記のようにemacsclientを使う。
常駐しているEmacsを呼び出すだけなので、Emacsが素速く起動する。

$ emacsclient -n <ファイル名>

簡単に起動できるように~/.bashrcに下記行を追加しておく。

alias e='emacsclient -n'
alias ee='open -a /Applications/Emacs.app $1'
alias ekill='emacsclient -e "(kill-emacs)"'

これで、通常のファイル編集はeコマンドのみで利用できる。
初期設定ファイルを修正した場合など、コマンドラインからGUI版のEmacsを起動したい時にはeeコマンド、終了させるにはekillコマンドを利用。

macOSのログイン時にEmacsを自動起動

毎回、手動でEmacsを起動するのも面倒なので、macOSにログインした時に、Emacsを自動起動するようにする。

システム環境設定 → ユーザとグループ → ログイン項目 の画面から
「+」ボタンを押して、アプリケーションの「Emacs」を追加。

macOSにログイン時に、Emacsが自動起動する。

補足

  • コマンドラインから、emacsclient -a ""emacs --daemonコマンドでも常駐できるが、GUI版で使うには多少不都合があったので上記説明の方法にした。
  • macOSのログオフ時にもEmacs終了確認のダイアログが表示される。鬱陶しい場合は、(setq confirm-kill-emacs 'yes-or-no-p)設定行をコメントにするか削除。ログオフ時のみ判断して問い合わせしないように出来たら良いが、今後の課題。

所感

これでEmacsが瞬時に起動する。ほんと快適!!

参照記事

参考

  1. emacsの終了時に必ず確認するようにする – みずぴー日記
  2. ASCII.jp:~師範! Emacsとviって使わないといけないんですか!?~ (3/5)|行っとけ! Ubuntu道場!
  3. Emacsを使いこなすために – Qiita
  4. emacs daemon で使う – Qiita
  5. emacsclientを使ってターミナルから既に起動中のEmacsでファイルを開く – 部屋の中にも一年

コメント

タイトルとURLをコピーしました