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が瞬時に起動する。ほんと快適!!
コメント