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

スポンサーリンク

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」と打ち込む。
「スタートアップフォルダ」が開くので、上記で作成したショートカットをコピーする。

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が瞬時に起動するようになった。ほんと快適!!

参照記事

【Windows/msys2】Emacs 25.3の64bit版をビルドする
以前の記事で、Emacs 25.2をビルドして使う記事を紹介したが、2017/9/11にEmacs 25.3が公開された。そこで、msys2環境の64bit環境(mingw64)でEmacsを25.3をビルドし動かしたので備忘録を残す。 以...
【Windows/msys2】Emacs 26.2の64bit版をインストール(pacmanパッケージから)
以前の記事で、Emacs 26.1をビルドして使う記事を紹介したが、2019/4/12にEmacs 26.2が公開された。 これまではIMEパッチを当てるためにEmacsのソースからビルドして使っていたが、Emacs 26.2ではオリジナル...

参考

  1. Windows10 起動時にアプリを自動起動 – スタートアップに登録 – PC設定のカルマ
  2. 【Tips】Windows 10のスタートアップフォルダを256倍速く開くshell:startup活用術
  3. Tech TIPS:Windowsのtimeout/sleepコマンドで実行を一時停止する – @IT
  4. GNU Emacs Manual(Japanese Translation): Window Size X
  5. 38.2 emacsclientのオプション
  6. C.1 動作引数

コメント

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