He definido algunas funciones para ejecutar el proceso de fondo asíncrono usando async-shell-commandmis .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-processpara un comando sudo? He intentado envolver mi llamada astart-processen(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 miprojectorpaquete: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-sentinelhace 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-functione 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-buffery busque la lista de "funciones de acción".fuente