Как проверить, находится ли Emacs в режиме графического интерфейса пользователя (и только потом запускать `tool-bar-mode`)?

16

У меня есть эта строка в моем .emacsфайле:

(tool-bar-mode 0)

потому что я ненавижу панели инструментов в моем графическом интерфейсе emacs ( /Applications/Emacs.app/Contents/MacOS/Emacs).

Но когда я запускаю свой другой текстовый emacs в терминал ( /opt/local/bin/emacs), он жалуется на эту команду:

Symbol's function definition is void: tool-bar-mode

Как я могу добавить ifусловие, чтобы оно выполняло tool-bar-modeкоманду только тогда, когда я нахожусь в emacs с графическим интерфейсом?

Благодарность!

user9474
источник

Ответы:

22

Ладно нашел сам. Просто добавь

;; turn off toolbar
(if window-system
    (tool-bar-mode 0))
user9474
источник
3

другой способ сделать это будет:

 (if (functionp 'tool-bar-mode) (tool-bar-mode 0))

таким образом, функция вызывается, только если она существует

Рэй
источник
0

Это работает для меня без жалоб на Linux. Вы можете попробовать nilили -1вместо 0:

(tool-bar-mode nil)

Что произойдет, если вы делаете emacs -nw?

Приостановлено до дальнейшего уведомления.
источник
0

Использование window-systemпеременной в качестве логического значения не рекомендуется . Вместо этого используйте display-graphic-pили любой из других display-*-p предикатов, которые сообщают о специфических для UI возможностях фрейма.

Если вы хотите, чтобы ваш код был обратно совместим с предыдущими версиями Emacs, то вам подойдет следующая оболочка совместимости:

(if (< emacs-major-version 23)
    (or window-system (getenv "DISPLAY"))
  (display-graphic-p))
Александр Шукаев
источник