Jeśli próbuję uruchomić polecenie powłoki w funkcji Emacs Lisp, w której wielokrotnie wywoływam rsync
(lub scp
), której wersji powłoki powinienem użyć? Obecnie używam shell-command
, który blokuje Emacs do momentu zakończenia procesu, a wynik, który powinien być widoczny z --verbose
do rsync
, nie jest drukowany; Mogę użyć shell-command
z &
na końcu ciągu poleceń, aby uczynić go asynchronicznym, który wypisuje postęp - ale nie "blokuje" Emacs w całości, minibuffer wielokrotnie pyta, czy chcę zabić proces, który w międzyczasie jest kaleki; i start-process-shell-command
, który wydaje się zatrzymywać funkcję dopiero po przesłaniu pierwszego pliku/katalogu; pomijam resztę, gdy wykonuję wiele połączeń rsync
wykonanych za pośrednictwem mojej funkcji. Żadne z nich nie wydaje się idealne, jakiekolwiek wskazówki?które polecenie powłoki w emacs seplenienie?
Odpowiedz
Ja sam odniosłem największy sukces przy użyciu procesu uruchamiania.
(start-process "process-name"
(get-buffer-create "*rsync-buffer*")
"/path/to/rsync"
arg1
...
argn)
Spowoduje to wysłanie wszystkich danych wyjściowych do pojedynczego bufora.
To bardzo proste - dziękuję. – hatmatrix
Jednym z rozwiązań może być uruchomienie polecenia w rzeczywistej wersji shell buffer. Wtedy masz do wyboru, które uruchomić jeden z tych:
M-x shell
M-x eshell
M-x term
Jeśli podoba Ci się ten pomysł, można zakodować go tak:
(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 ...")))
Czytaj więcej na 'process-send-string
do jego użytkowania. Możesz również chcieć sprawdzić błędy na output z procesów.
Witaj Trey, dziękuję Ci zawsze. Tym razem musiałem wybrać rozwiązanie Jonathana, ale ponieważ było to bezpośrednie i dobrze dopasowane do tego celu (i ciąg wysyłania procesów działał tylko w buforze utworzonym i jawnie odwoływanym (z get-buffer-create), a nie w temp-buffer ...) ale czytam o funkcjach filtrowania ... jest wiele rzeczy do zgryzienia i jestem pewien, że znajdę zastosowania na końcu. Jeszcze raz dziękuję. – hatmatrix
- 1. mnożenie pustej listy w emacs seplenienie
- 2. wyciąg/plaster/kolejność list w (emacs) seplenienie?
- 3. Szybki tryb powłoki emacs?
- 4. emacs seplenienie, jak uzyskać tryb główny bufora?
- 5. Kolory w wierszu powłoki powłoki Emacs
- 6. Wykonaj polecenie powłoki
- 7. skrypt powłoki polecenie wyjścia ssh
- 8. Uruchom polecenie powłoki ze zmiennej w skrypcie powłoki
- 9. Polecenie powłoki Emacsa na buforze
- 10. Jak wykonać polecenie powłoki w JavaScript
- 11. Jak wykonać polecenie powłoki w programowaniu jądra?
- 12. Powiąż polecenie C-RET w Emacs
- 13. Filtrowanie tekstu za pomocą polecenia powłoki w Emacs
- 14. Polecenie powłoki zaczynające się od ">"
- 15. emacs powłoki rur produkcji do nowego bufora
- 16. Wykonać polecenie powłoki z poziomu klienta MySQL?
- 17. Jak uruchomić polecenie powłoki przez vimscript?
- 18. Uruchom polecenie powłoki, gdy plik zostanie dodany
- 19. Wykonaj tablicę ciągów opisujących polecenie powłoki
- 20. C# wykonać polecenie powłoki i uzyskać wynik
- 21. adb polecenie powłoki: mkdir (do tworzenia katalogu)
- 22. Boto Wykonaj polecenie powłoki na instancji EC2
- 23. Uruchom polecenie powłoki UEFI z aplikacji UEFI
- 24. Równoważnik "exec" w emacs * eshell *?
- 25. Polecenie powłoki sqlite3 ".backup" i transakcja
- 26. Automatyczne zamykanie bufora tabulacji w trybie powłoki emacs?
- 27. Emacs, zabijanie procesów wewnętrznych, dowolne polecenie?
- 28. meteorJS wywołaj polecenie powłoki z serwera
- 29. Wykonaj polecenie powłoki synchronicznie z Elixir/Erlang
- 30. Jak wykonać polecenie powłoki ze skryptu php?
Czy znasz http://www.gnu.org/software/emacs/manual/html_node/elisp/Asynchronous-Processes.html? –