He definido algunas funciones para ejecutar el proceso de fondo asíncrono usando async-shell-command
mis .emacs, pero cada vez que ejecuto los comandos se crea una nueva ventana (no marco) y el búfer del proceso se muestra allí. ¿Cómo podría ejecutar el comando sin el búfer "emergente"?
23
start-process
para un comando sudo? He intentado envolver mi llamada astart-process
en(let ((default-directory "/sudo::")) ... )
, pero no funcionó para mí."program"
en este caso es solo el nombre del programa (por ejemplo, nautilus, caja, firefox) y"arg1 arg2 ..."
debe estar en el cuarto argumento posicional destart-process
. Lo descubrí leyendo la documentación :)Como mencionó Tikhon,
(start-process)
es el camino a seguir. En caso de que no desee crear un búfer pero aún así quiera reaccionar al estado del proceso en segundo plano, también puede emplearlo(set-process-sentinel)
. Aquí hay un ejemplo modificado que estoy tomando de miprojector
paquete:De la descripción de la función Emacs:
Las páginas del manual de GNU sobre Procesos son bastante buenas para obtener más información.
fuente
set-process-sentinel
hace un poco más exactamente? Tengo la idea general de tener una función que gestione el proceso, pero no entiendo completamente todos los detalles. ¡Gracias!M-x describe-function
e ingresaset-process-sentinel
, obtendrá la respuesta breve de la documentación de Emacs: (set-process-sentinel PROCESS SENTINEL) Proporcione a PROCESS el centinela SENTINEL; nulo por defecto. Se llama al centinela como una función cuando el proceso cambia de estado. Obtiene dos argumentos: el proceso y una cadena que describe el cambio.C-h f
...No es necesario cambiar la forma en que ejecuta un comando asincrónico. Emacs tiene una capacidad genérica para permitirle controlar dónde o si aparecerá algún búfer, modificando una sola estructura de datos, el
display-buffer-alist
.En la solución a continuación, puede ver que la función de acción
display-buffer-no-window
(es decir, sin ventanas emergentes) está configurada para asociarse con cualquier búfer con un nombre que comience*Asynchronous Shell Command*
(emacs agrega un sufijo incremental cuando se le pide que cree más de uno).Para ver la lista de otras opciones de visualización disponibles, escriba
C-h f display-buffer
y busque la lista de "funciones de acción".fuente