¿Cómo puedo escribir en la salida estándar en Emacs
messages (3)
Estoy intentando depurar un programa de Emacs en cuanto al rendimiento. En particular, sufro un tiempo de arranque extremadamente largo (~ 5 ''en comparación con ~ 1'' para un Emacs desnudo) en una conexión remota a través de WLAN, teléfono celular, etc. En este contexto, cualquier message
escrito no es de ayuda, ya que la pantalla no es refrescado en absoluto.
Lo que me gustaría hacer es escribir en el "resultado estándar" del proceso de Linux. --batch
modo --batch
pero esto no me sirve de nada porque quiero usar Emacs de forma interactiva.
Entonces, ¿cómo puedo escribir mensajes en la salida estándar de Linux (a diferencia de la salida estándar de Emacs)?
Inicie emacs como daemon ( emacs --daemon
) y cualquier mensaje durante la secuencia de inicio se enviará a stdout o stderr, tal como lo describe lunaryorn.
Conéctese al servidor con emacsclient
La forma más sencilla de matar al servidor es Mx kill-emacs
RET
Para más detalles, vea Ch i g (emacs) Emacs Server
Puede generar un error estándar como este:
(print "hello world" #''external-debugging-output)
o
(princ "hello world" #''external-debugging-output)
Esto puede amortiguar, así que ten cuidado. No es posible enviar a salida estándar en este momento. Voy a agregar eso, ¡creo!
Funciona para mí en centos 6.8 (GNU Emacs 23.1.1):
(append-to-file "here I come to save the day/n" nil "/dev/stdout")
Pruebe también usar "/ dev / tty" en lugar de "/ dev / stdout":
No está claro si tiene la intención de redireccionar "emacs -nw" stdout a un archivo y supervisar ese archivo externamente (luego use "/ dev / stdout"); o están de acuerdo con escribir en "/ dev / tty" contaminando así el mismo tty de la pantalla principal "emacs -nw".
Si se inicia una versión GUI de emacs, de tal manera que puede perder el archivo adjunto a la tty de origen, puede abusar de variables de entorno para comunicar la tty de shell de origen a elisp.
Esto funciona para mí usando Aquamacs en Mac OS X. Lanzando desde un shell bash:
$ MY_TTY=$(tty) open /Applications/Aquamacs/ Emacs.app &
luego en emacs:
(append-to-file "here I come to save the day/n" nil (getenv "MY_TTY"))