Виправляємо Segfault при запуску Emacs в режимі демона

Segfault
Авторство: XKCD.com

Я давно перестав користуватись такою надзвичайно зручною штукою, як запуск Emacs в режимі демона, по надзвичайно дивній для мене причині --- лінь було розбиратись у причинах segfault'у при запуску демона. А причина 100% знаходилась в конфігах і нормального пояснення того, що може привести до "випадання в осад" ніде якось не трапилось. Тому нічого розумнішого окрім як по черзі коментувати рядки в init.el, щоб знайти можливу причину мені на думку не спало.

Розв'язок проблеми виявився простим, все злітало при задаванні шрифту:

(add-to-list 'default-frame-alist '(font . "Roboto Mono-9" ))
(set-face-attribute 'default t :font "Roboto Mono-9" )
(set-frame-font "Roboto Mono-9" nil t)

Не така велика біда подумав я, зараз виправимо:

(if window-system ;; Перевіряємо чи emacs запускається не в консольному режимі
    (progn
      (add-to-list 'default-frame-alist '(font . "Roboto Mono-9" ))
      (set-face-attribute 'default t :font "Roboto Mono-9" )
      (set-frame-font "Roboto Mono-9" nil t)))

Але тут виявилось, що при запуску emacsclient -c цей код виконуватись не буде, тобто треба щось, щоб при створенні нового фрейму задавало шрифт.

Великий і всемогутній StackOverFlow підказав мені відповідь, і тепер повноцінне рішення виглядає так:

(if window-system ;; Перевіряємо чи emacs запускається не в консольному режимі
    (progn
      (add-to-list 'default-frame-alist '(font . "Roboto Mono-9" ))
      (set-face-attribute 'default t :font "Roboto Mono-9" )
      (set-frame-font "Roboto Mono-9" nil t))
  ;; Інакше задаємо шрифт іншим способом
  (setq default-frame-alist '((font . "Roboto Mono-9"))))

P.S

Раніше, не пам'ятаю вже навіщо, я викладав відео яке демонструє, як працює Emacs в режимі демона:

comments powered by Disqus