usar salir como comandos emacs configuration terminal

salir - ¿Cómo detectar que emacs está en modo terminal?



como usar emacs (5)

window-system es una variable definida en `C source code ''. Su valor es x

Documentación: Nombre del sistema de ventana a través del cual se muestra el marco seleccionado. El valor es un símbolo, por ejemplo, `x ''para X ventanas. El valor es nulo si el marco seleccionado está en un terminal de solo texto.

Básicamente haz a:

(if window-system (progn (something) (something-else)))

En mi archivo .emacs , tengo comandos que solo tienen sentido en modo gráfico (como (set-frame-size (selected-frame) 166 100) ). ¿Cómo puedo ejecutar estos solo en modo gráfico y no en modo terminal (es decir, emacs -nw ).

¡Gracias!


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 el 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 usa un terminal en serie. Pero no tengo tiempo para hacerlo ;-)


La variable del window-system le dice a los programas Lisp con qué sistema de ventana se está ejecutando Emacs. Los posibles valores son

X
Emacs está mostrando el cuadro usando X.
w32
Emacs está mostrando el marco usando la GUI nativa de MS-Windows.
ns
Emacs muestra el marco utilizando la interfaz Nextstep (utilizada en GNUstep y Mac OS X).
ordenador personal
Emacs muestra el marco utilizando escrituras de pantalla directa de MS-DOS.
nulo
Emacs está mostrando el marco en un terminal basado 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 ;; if graphic (your) (code)) ;; else (optional) (your) (code))

Y si no tiene una cláusula else, puede simplemente:

;; more readable :) (when (display-graphic-p) (your) (code))


Las respuestas que mencionan window-system y display-graphic-p no son incorrectas, pero no cuentan la imagen completa.

En realidad, una sola instancia de Emacs puede tener múltiples marcos, algunos de los cuales podrían estar en un terminal, y otros podrían estar en un sistema de ventanas. Es decir, puede obtener diferentes valores de window-system de window-system incluso dentro de una única instancia de Emacs.

Por ejemplo, puede iniciar un sistema de ventana Emacs y luego conectarse a él a través de emacsclient -t en un terminal; el cuadro de terminal resultante verá un valor de nil para window-system . Del mismo modo, puede iniciar emacs en el modo demonio, y luego decirle que cree un marco gráfico.

Como resultado de esto, evite poner código en sus archivos .emacs que depende window-system . En su lugar, coloque un código como el ejemplo de set-frame-size en una función de enlace que se ejecuta después de crear 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 no se ejecuta para el fotograma inicial, por lo que a menudo también es necesario agregar funciones de enganche relacionadas con el fotograma como la anterior a ''after-init-hook .


Si está en modo Gui, entonces lo siguiente sería verdadero.

(si el sistema de ventanas)