Ответы, в которых упоминаются window-system
и display-graphic-p
, не являются неправильными, но они не дают полной картины.
В действительности, один экземпляр Emacs может иметь несколько кадров, некоторые из которых могутбыть на терминале, и другие из которых могут быть в оконной системе.То есть вы можете получить различные значения window-system
даже в пределах одного экземпляра Emacs.
Например, вы можете запустить Emacs оконной системы и затем подключиться к нему через emacsclient -t
в терминале.;результирующий кадр терминала увидит значение nil
для window-system
.Точно так же вы можете запустить emacs в режиме демона, а затем сказать ему создать графический фрейм.
В результате этого избегайте помещения в ваш .emacs кода, который зависит от window-system
.Вместо этого поместите код, подобный вашему примеру set-frame-size
, в функцию ловушки, которая запускается после создания кадра:
(add-hook 'after-make-frame-functions
(lambda ()
(if window-system
(set-frame-size (selected-frame) 166 100)))))
Обратите внимание, что ловушка 'after-make-frame-functions
не запускается для исходного кадра, поэтому частонеобходимо также добавить связанные с фреймами функции перехвата, подобные описанным выше, в 'after-init-hook
.