В моем файле .emacs у меня есть команды, которые имеют смысл только в графическом режиме (например, (set-frame-size (selected-frame) 166 100)). Как запустить их только в графическом режиме, а не в режиме терминала (т.е. emacs -nw).
Спасибо!
В моем файле .emacs у меня есть команды, которые имеют смысл только в графическом режиме (например, (set-frame-size (selected-frame) 166 100)). Как запустить их только в графическом режиме, а не в режиме терминала (т.е. emacs -nw).
Спасибо!
Переменная window-system сообщает Lisp программам, в какой оконной системе Emacs работает. Возможные значения:
Из документ.
  Изменить: кажется, что оконная система устарела в пользу display-graphic-p (источник: C-h f оконная система RET на emacs 23.3.1).
(display-graphic-p &optional DISPLAY)
Return non-nil if DISPLAY is a graphic display.
Graphical displays are those which are capable of displaying several
frames and several different fonts at once.  This is true for displays
that use a window system such as X, and false for text-only terminals.
DISPLAY can be a display name, a frame, or nil (meaning the selected
frame display).
Итак, что вы хотите сделать:
(if (display-graphic-p)
    (progn
    ;; if graphic
      (your)
      (code))
    ;; else (optional)
    (your)
    (code))
И если у вас нет предложения else, вы можете просто:
;; more readable :)
(when (display-graphic-p)
    (your)
    (code))
		Ответы, в которых упоминаются window-system и display-graphic-p, не ошибаются, но они не сообщают полное изображение.
В действительности, один экземпляр Emacs может иметь несколько фреймов, некоторые из которых могут быть на терминале, а другие из них могут быть в оконной системе. То есть вы можете получать разные значения window-system даже в одном экземпляре Emacs.
Например, вы можете запустить системную систему Emacs и затем подключиться к ней через emacsclient -t в терминале; результирующая оконечная рама будет видеть значение nil для window-system. Аналогично, вы можете запустить emacs в режиме демона, а затем сообщить ему, чтобы создать графический фрейм.
В результате этого избегайте помещать код в ваш .emacs, который зависит от window-system. Вместо этого поместите код как ваш пример set-frame-size в функцию hook, которая запускается после создания фрейма:
(add-hook 'after-make-frame-functions
  (lambda ()
    (if window-system
      (set-frame-size (selected-frame) 166 100)))))
Обратите внимание, что крючок 'after-make-frame-functions не запускается для исходного кадра, поэтому часто необходимо также добавлять связанные с кадром функции hook, как указано выше, в 'after-init-hook.
Если это в режиме Gui, тогда будет верно следующее.
(если оконная система)
window-system - это переменная, определенная в `C исходный код '. Его значение равно x
Документация: название оконной системы через который выбранный кадр отображается. Значение - символ - для instance, `x 'для X окон. Значение равен нулю, если выбранный кадр находится на только текст-терминал.
В основном выполните:
(if window-system
    (progn
      (something)
      (something-else)))
		Я определил дополнительную функцию, чтобы обернуть функциональность имени окна, потому что я использую Emacs везде, то есть из терминала и в графическом режиме, а также в Linux и MacOS:
(defun window-system-name()
  (cond ((eq system-type 'gnu/linux) (if (display-graphic-p) "x"   "nox"))
    ((eq system-type 'darwin)    (if (display-graphic-p) "mac" "nox"))
    (t (error "Unsupported window-system") nil)))
Его можно расширить, чтобы охватить другие системы, такие как Windows или более старые системы, где используется последовательный терминал. Но у меня нет времени на это;-)