Si estoy tratando de ejecutar un comando de shell en una función de Emacs Lisp en la que llamo a rsync
(o scp
) varias veces, ¿qué variante de comando de shell debo usar? Actualmente estoy usando shell-command
, que bloquea Emacs hasta que finalice el proceso, y la salida que debería ser visible con --verbose
a rsync
no se imprime; Puedo usar shell-command
con un &
al final de la cadena de comandos para que sea asincrónico, lo que sí imprime el progreso, pero mientras no "bloquea" completamente Emacs, el minibúfer pregunta repetidamente si quiero matar el proceso que es paralizante mientras tanto; y start-process-shell-command
, que parece detener la función solo después de que se transfiere el primer archivo/directorio; Descuidar el resto cuando hay múltiples llamadas rsync
realizadas a través de mi función. Ninguno de estos parece ideal, ¿alguna pista?¿qué comando de shell en emacs lisp?
Respuesta
He tenido el mayor éxito usando el proceso de inicio mismo.
(start-process "process-name"
(get-buffer-create "*rsync-buffer*")
"/path/to/rsync"
arg1
...
argn)
Esto enviará toda la salida a un solo búfer.
Esto es muy sencillo, gracias. – hatmatrix
Una solución podría ser ejecutar el comando en un shell buffer real. A continuación, puedes elegir la que uno de los que corren:
M-x shell
M-x eshell
M-x term
Si te gusta esa idea, puede codificar hasta que como esto:
(defun my-rsync-routine()
"run some rsync processes"
(with-temp-buffer
(shell (current-buffer))
(process-send-string nil "rsync ...")
(process-send-string nil "rsync ...")
(process-send-string nil "rsync ...")))
Leer más en 'process-send-string
para su uso. Es posible que también desee comprobar algunos errores en el output de los procesos.
Hola Trey, gracias siempre. Esta vez tuve que elegir con la solución de Jonathan, pero era directa y adecuada para este propósito (y el proceso-envío-cadena parecía funcionar solo en un buffer creado y explícitamente referenciado (con get-buffer-create) en lugar de en temp-buffer ...) pero estoy leyendo sobre las funciones de filtrado ... hay mucho que grok y estoy seguro de que encontraré usos al final. Gracias de nuevo. – hatmatrix
- 1. ¿Qué significa [...] # en emacs-lisp?
- 2. Python Shell en Emacs 24?
- 3. PINTURA en Emacs Lisp?
- 4. Análisis en Emacs Lisp
- 5. ¿Qué tan viable es emacs LISP además de editar emacs?
- 6. emacs - autocompletado en modo Emacs Lisp
- 7. En Emacs-lisp, ¿cuál es la forma correcta de utilizar call-process en un comando ls?
- 8. Emacs Lisp resaltado de sintaxis
- 9. multiplicación de lista vacía en emacs lisp
- 10. Emacs sin Lisp
- 11. Orden de Evaluación en Emacs Lisp
- 12. ¿Cómo ejecuto un comando sudo en Emacs?
- 13. Diferencia de estructura entre lisp común y emacs lisp
- 14. ¿Qué significa (interactivo) en una función Emacs Lisp?
- 15. ¿Uso correcto de aplicar en Emacs Lisp?
- 16. Esquema dialecto de Lisp en Emacs
- 17. Cómo copiar al portapapeles en Emacs Lisp
- 18. dejó y flet en Emacs Lisp
- 19. Emacs: Terminal vs shell?
- 20. Depurar Emacs Lisp modo principal
- 21. Emacs ido-style shell
- 22. intérprete Lisp/Scheme sin Emacs?
- 23. Ayuda escribiendo emacs lisp para emacs etags search
- 24. ¿Cómo agrego las fechas en Emacs usando Emacs Lisp?
- 25. Modo Emacs Shell: ¿cómo enviar la región a la shell?
- 26. shell cygwin en Emacs - ¿salida desordenada?
- 27. Técnicas de solución de problemas para Emacs y Emacs Lisp
- 28. Fechas y horas en Emacs Lisp
- 29. Reemplazando una función en Emacs Lisp
- 30. Emacs Lisp: evaluar la variable en alist
¿Has leído http://www.gnu.org/software/emacs/manual/html_node/elisp/Asynchronous-Processes.html? –