2008-12-19 9 views
9

Gibt es eine Möglichkeit zu ändern/dired dirigieren Dateien asynchron zu kopieren? Wenn Sie mehrere Dateien in Dired markieren und dann mit "C" kopieren, stürzt Emacs ab, bis alle Dateien kopiert sind. Ich möchte stattdessen, dass diese Kopie gestartet wird, und für mich, um weiter zu bearbeiten, wie es im Hintergrund weitergeht. Gibt es eine Möglichkeit, dieses Verhalten zu erhalten?Dired kopieren asynchron

BEARBEITEN: Tatsächlich ruft C 'dired-do-copy' in dired-aux, nicht in dired selbst. Entschuldigung für jede Verwirrung.

Antwort

5

Ich denke, Emacs ist meist auf einen einzigen Thread beschränkt - so kann dies nicht direkt durch Standard-Dired-Befehle wie 'C' Kopie möglich sein.

Es gibt jedoch einen Dired-Befehl "dired-do-shell-command", der zu einer Shell aufruft, um die Arbeit im Hintergrund zu erledigen. Wenn Sie die Dateien auswählen, die Sie kopieren möchten, und dann die Taste '!' (Dies führt dired-do-shell-command) Geben Sie dann 'cp? [Ziel] '(möglicherweise kann' Kopie 'verwendet werden, wenn Sie unter Windows sind). Ich habe das nicht getestet - siehe Hilfe zu "dired-do-shell-command" für weitere Details.

2

Siehe auch die Emacs-Funktion dired-do-async-shell-command.

Für eine noch allgemeinere Lösung siehe https://github.com/jwiegley/emacs-async, mit der Sie auch beliebigen Emacs-Lisp-Code durch Aufruf eines separaten Emacs-Prozesses auswerten können (was natürlich ein wenig zusätzliche Latenzzeit mit sich bringt). Genauer betrachten Dateioperationen die Datei dired-async.el in diesem Repo.

Beachten Sie auch, dass es Arbeiten an Threads in Emacs unter dem Arbeitsnamen Concurrent Emacs gibt, aber es ist noch nicht da. Einzelheiten finden Sie unter http://www.emacswiki.org/emacs/ConcurrentEmacs.

0

Ich fand diese Antwort ziemlich hilfreich: https://emacs.stackexchange.com/a/13802/10761. Lesen dieser Antwort zeigt, dass Sie es so machen können, dass dired mit der Methode scp anstelle der ssh Methode kopiert wird (die letztere codiert zunächst die Datei mit gzip und das kann ziemlich langsam sein). Die scp-Methode wird nur mit dem Programm scp kopiert, wenn die Datei größer als tramp-copy-size-limit ist (standardmäßig 10240). Die Verwendung dieser scp Methode in Verbindung mit dired-async-mode ist sehr schön, da sie nicht nur schnell mit scp kopiert wird, sondern auch asynchron und aus dem Weg geht.

Auch ich denke, das ist nützlich: https://oremacs.com/2016/02/24/dired-rsync/. Es stellt dieses Code-Snippet bereit, um rsync zu verwenden, um Dateien in zu kopieren: