Se sto cercando di eseguire un comando shell in una funzione Emacs Lisp in cui chiamo rsync
(o scp
) più volte, quale variante di comando shell dovrei usare? Attualmente sto usando shell-command
, che blocca Emacs fino al termine del processo, e l'output che dovrebbe essere visibile con lo --verbose
su rsync
non viene stampato; Posso usare shell-command
con un &
alla fine della stringa di comando per renderlo asincrono, che stampa l'avanzamento - ma mentre non "blocca" completamente Emacs, il minibuffer chiede ripetutamente se voglio uccidere il processo che è paralizzante nel frattempo; e start-process-shell-command
, che sembra interrompere la funzione solo dopo il trasferimento del primo file/directory; trascurare il resto quando ci sono più chiamate rsync
effettuate tramite la mia funzione. Nessuno di questi sembra ideale, qualche suggerimento?quale shell-command in emacs lisp?
risposta
Ho avuto il maggior successo utilizzando io stesso il processo di avvio.
(start-process "process-name"
(get-buffer-create "*rsync-buffer*")
"/path/to/rsync"
arg1
...
argn)
Questo invierà tutta l'uscita a un singolo buffer.
Questo è molto semplice - grazie. – hatmatrix
Una soluzione potrebbe essere quella di eseguire il comando in un effettivo shell buffer. Poi si arriva a scegliere quale uno di quelli a correre:
M-x shell
M-x eshell
M-x term
Se vi piace l'idea, è possibile codificare in su in questo modo:
(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 ...")))
saperne di più su 'process-send-string
per il suo uso. Si potrebbe anche voler avere qualche controllo degli errori sul output dai processi.
Ciao Trey, grazie sempre. Questa volta ho dovuto scegliere la soluzione di Jonathan, ma poiché era diretta e adatta a questo scopo (e process-send-string sembrava funzionare solo in un buffer creato e referenziato esplicitamente (con get-buffer-create) piuttosto che in temp-buffer ...) ma sto leggendo le funzioni di filtraggio ... c'è molto da aggiungere e sono sicuro che troverò gli usi alla fine. Grazie ancora. – hatmatrix
- 1. PPRINT in Emacs Lisp?
- 2. Evidenziazione sintassi Emacs Lisp
- 3. Emacs senza Lisp
- 4. Debug Emacs Lisp modo maggiore
- 5. Come aggiungo le date in Emacs usando Emacs Lisp?
- 6. Come copiare negli appunti in Emacs Lisp
- 7. moltiplicazione della lista vuota in emacs lisp
- 8. nesting backquote e `in emacs lisp
- 9. Date e orari in Emacs Lisp
- 10. Sovrascrittura di una funzione in Emacs Lisp
- 11. Emacs Lisp: valuta variabile in alist
- 12. Schema dialetto di Lisp in Emacs
- 13. avvolgere una funzione in emacs lisp
- 14. Differenza di struttura tra common lisp ed emacs lisp
- 15. In Emacs Lisp, come trovare dove è definito il simbolo
- 16. Differenza tra simbolo e nome della variabile in Emacs Lisp
- 17. esegue continuamente una funzione emacs lisp
- 18. Come individuare l'errore in un file Lisp in Emacs?
- 19. Come convertire l'elenco in stringa in Emacs Lisp
- 20. Come fare riferimento al file attualmente caricato in Emacs Lisp?
- 21. Qual è l'equivalente di foldr, foldl in Emacs Lisp?
- 22. Cosa significa^L in (Emacs Lisp) codice sorgente?
- 23. Come si fanno le chiusure in Emacs Lisp?
- 24. estratto/slice/riordina gli elenchi in (emacs) lisp?
- 25. Come "decodificare l'URL" una stringa in Emacs Lisp?
- 26. Come aggiungere più elementi a un elenco in Emacs lisp
- 27. indentazione automatica su comune lisp emacs + slime + sbcl in windows
- 28. Inserire intero mese di date in Emacs Lisp
- 29. Come ottenere il testo selezionato in Emacs Lisp?
- 30. Come accedere ai contenuti della regione corrente in Emacs Lisp?
Hai letto http://www.gnu.org/software/emacs/manual/html_node/elisp/Asynchronous-Processes.html? –