La window-system
variable le dice a los programas Lisp en qué sistema de ventanas se está ejecutando Emacs. Los posibles valores son
- X
- Emacs muestra el marco usando X.
- w32
- Emacs muestra el marco utilizando la GUI nativa de MS-Windows.
- ns
- Emacs muestra el marco usando la interfaz Nextstep (usada en GNUstep y Mac OS X).
- ordenador personal
- Emacs muestra el marco utilizando escrituras de pantalla directas de MS-DOS.
- nulo
- Emacs muestra el marco en una terminal basada en caracteres.
Del doc .
Editar : parece que el sistema de ventanas está en desuso en favor de display-graphic-p
(fuente: Ch f window-system RET en 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).
Entonces, lo que quieres hacer es:
(if (display-graphic-p)
(progn
(your)
(code))
(your)
(code))
Y si no tiene una cláusula else, puede simplemente:
(when (display-graphic-p)
(your)
(code))
Las respuestas que mencionan
window-system
ydisplay-graphic-p
no son incorrectas, pero no dan la imagen completa.En realidad, una sola instancia de Emacs puede tener múltiples marcos, algunos de los cuales pueden estar en una terminal y otros en un sistema de ventanas. Es decir, puede obtener diferentes valores de
window-system
incluso dentro de una sola instancia de Emacs.Por ejemplo, puede iniciar un sistema de ventanas Emacs y luego conectarse a él a través
emacsclient -t
de una terminal; la trama terminal resultante verá un valor denil
forwindow-system
. De manera similar, puede iniciar emacs en modo daemon y luego decirle que cree un marco gráfico.Como resultado de esto, evite poner código en su .emacs que dependa de
window-system
. En su lugar, coloque código como suset-frame-size
ejemplo en una función de enlace que se ejecuta después de que se crea un marco:(add-hook 'after-make-frame-functions (lambda () (if window-system (set-frame-size (selected-frame) 166 100)))))
Tenga en cuenta que el
'after-make-frame-functions
enlace no se ejecuta para el marco inicial, por lo que a menudo es necesario agregar también funciones de enlace relacionadas con el marco como la anterior a'after-init-hook
.fuente
split-window-horizontally
divide el panel actualmente activo ("ventana") en la ventana actual ("marco") en dos paneles ("ventanas").'after-init-hook
.Básicamente haz un:
(if window-system (progn (something) (something-else)))
fuente
Si está en modo Gui, entonces lo siguiente sería cierto.
(si es sistema de ventanas)
fuente
He definido una función adicional para ajustar la funcionalidad del nombre de la ventana porque estoy usando Emacs en todas partes, es decir, desde la terminal y en modo gráfico y en Linux y 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)))
Se puede ampliar para cubrir otros sistemas como Windows o sistemas más antiguos donde se utiliza un terminal en serie. Pero no tengo tiempo para hacerlo ;-)
fuente