Emacsはお世辞にも起動時間は早いとは言えない。特に、init-loaderを使って初期設定ファイルを機能分割してファイル数が増えてきたりすると見通しは良くなる一方で、起動時間は遅くなる。
そこでEmacsのServer機能を利用して改善する。Windowsパソコンへのログオン時に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='runemacs'
alias ekill='emacsclient -e "(kill-emacs)"'
これで、通常のファイル編集はe
コマンドのみで利用できる。
初期設定ファイルを修正した場合など、コマンドラインからGUI版のEmacsを起動したい時にはee
コマンド、終了させるにはekill
コマンドを利用。
Emacs起動用BATファイルを作成
runemacs.exe
でEmacs起動できるが、msys2関連の環境設定された方がいいので、msys2の起動コマンド経由でEmacsを起動する。
下記内容の「~/.emacs.d/etc/msys2/startemacs.bat
」BATファイルを作成する。
@echo off
start C:¥msys64¥mingw64.exe runemacs %1 %2 %3 %4 %5 %6 %7 %8
上記ファイルのショートカットをデスクトップに作成する。
エクスプローラから、上記BATファイルを「右クリック→送る→デスクトップ(ショートカットを作成)」を実行。
作成したショートカットをダブルクリックで、Emacsが起動する事を確認。
【Note】
- アイコン画像をEmacsのに変更したい場合は、ショートカットを右クリック→プロパティ→アイコン変更… から
C:\\msys64\mingw64\bin\runemacs.exe
のファイルを指定しアイコン変更する。 - 32bit版のmsys2を使っている場合は
start C:¥msys32¥mingw32.exe runemacs
にする。
Windowsのログイン時にEmacsを自動起動
毎回、手動でEmacsを起動するのも面倒なので、Windowsにログインした時に、Emacsを自動起動するようにする。
スタートメニューを右クリックし「ファイル名を指定して実行」を選択して、ダイアログに「shell:startup
」と打ち込む。
「スタートアップフォルダ」が開くので、上記で作成したショートカットをコピーする。
これで、Windowsへのログイン時に、Emacsが自動起動する。
Windowsから常駐している Emacs を呼び出す
Windowsのコマンドプロンプトやアプリソフトから Emacs を呼び出したい事がある。その場合は、下記のようにemacsclientw
コマンドで呼び出せる。
C:\msys64\mingw64\bin\emacsclientw.exe -n --server-file=c:\msys64\home\<user>\.emacs.d\server\server +<行番号> <ファイル名>
--server-file
指定のパスは、環境変数「EMACS_SERVER_FILE
」に設定しておいてもよい。
補足
- コマンドラインから、
emacsclient -a ""
やemacs --daemon
コマンドでも常駐できるが、GUI版で使うには多少不都合があったので上記説明の方法にした。(起動中の初期設定ファイル内では、window-system
変数がセットされていない?) - 下記のようにrunemacsの引数に
-g
で、初期ウィンドウのサイズが指定できる。上記で作成したstartemacs.bat
の引数からも指定できる。
runemacs -g 90x50
- msys2の起動時に
(server-running-p)
の戻り値がother
となる事があり常駐しない事があったので、t
以外の判定に修正したらOKとなった。
所感
これでEmacsが瞬時に起動するようになった。ほんと快適!!
コメント