window-system
Переменные сообщают программы Лиспа , что окно системы Emacs работает под управлением . Возможные значения:
- Икс
- Emacs отображает фрейм, используя X.
- w32
- Emacs отображает фрейм, используя собственный графический интерфейс MS-Windows.
- нс
- Emacs отображает фрейм с помощью интерфейса Nextstep (используется в GNUstep и Mac OS X).
- ПК
- Emacs отображает фрейм, используя прямую запись на экране MS-DOS.
- ноль
- Emacs отображает фрейм на символьном терминале.
Из док .
Изменить : кажется, что оконная система устарела в пользу display-graphic-p
(источник: Ch 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's display).
Итак, что вы хотите сделать:
(if (display-graphic-p)
(progn
(your)
(code))
(your)
(code))
А если у вас нет предложения else, вы можете просто:
(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
примеру, в функцию-перехватчик, которая запускается после создания кадра:(add-hook 'after-make-frame-functions (lambda () (if window-system (set-frame-size (selected-frame) 166 100)))))
Обратите внимание, что
'after-make-frame-functions
ловушка не запускается для начального кадра, поэтому часто бывает необходимо добавить связанные с кадром функции ловушки, подобные приведенной выше, в'after-init-hook
.источник
split-window-horizontally
разделяет активную в данный момент панель («окно») в текущем окне («фрейм») на две панели («окна»).'after-init-hook
.В основном делайте:
(if window-system (progn (something) (something-else)))
источник
Если он в режиме Gui, то будет верно следующее.
(если оконная система)
источник
Я определил дополнительную функцию для обертывания функциональности имени окна, потому что я использую 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 или более старых систем, в которых используется последовательный терминал. Но у меня нет времени на это ;-)
источник