emacs --daemon + emacsclient で起動したときも、daemon 使わず起動したときも期待通りの設定で動くようにする (途中)

途中なんだけどメモっておかないと忘れるので。

やりたいことは…

  • Emacs の起動高速化したい、 emacs --daemon が使えそう
  • 今すでにある「環境によらず同じ初期化ファイル」というのはキープしたい
  • emacs --daemon + emacsclient も、単に emacs を起動しても動くようにしたい
  • text terminal で emacs -nw で起動した場合も、GUIで起動した場合も動くようにしたいが、それぞれで見た目とか設定を変えたい可能性もある

↑こんな感じ。

で、こんなの↓を作ってみて

github.com

それでわかった?ことは…

  • emacs --daemon で初期化ファイルを読み込んだときは window-systemnil なので一部設定ができない
  • emacsclient で起動したときに設定を遅延すればよくて使えそうな hook が after-make-frame-hook
  • daemon 使用時と非使用時(普通に emacs 起動したとき)で初期化ファイルを共有するためには…
    • GUI 設定を関数にまとめとく
    • その関数を after-make-frame-hook にひっかけておく
    • when (window-system) のときは hook が呼ばれるのを待たずにその関数を呼んじゃう
    • これだけだとフレーム作るたびに関数が呼ばれるので、関数の最後で自分自身を remove-hook しとく
  • after-make-frame-hook は frame 生成後に呼ばれるので default-frame-alist とかをそこで設定しても frame には反映されない?
    • とりあえず (modify-frame-parameters (selected-frame) default-frame-alist) 的なことをすれば解決はできそう

まぁ、何が言いたいかというと、 emacs --daemon がもうちょっと使いやすいと嬉しい、と。