Search code examples
emacselisp

which shell-command in emacs lisp?


If I am trying to run a shell-command in an Emacs Lisp function in which I call rsync (or scp) multiple times, which shell-command variant should I use? I am currently using shell-command, which locks up Emacs until the process is done, and the output that should be visible with the --verbose to rsync is not printed; I can use shell-command with an & at the end of the command string to make it asynchronous, which does print the progress — but while it doesn't "lock up" Emacs entirely, the minibuffer repeatedly asks if I want to kill the process which is crippling in the meantime; and start-process-shell-command, which appears to halt the function only after the first file/directory is transferred; neglecting the rest when there are multiple rsync calls made through my function. None of these seem ideal, any hints?


Solution

  • I have had the most success using start-process myself.

    (start-process "process-name" 
                   (get-buffer-create "*rsync-buffer*") 
                   "/path/to/rsync"
                   arg1
                   ...
                   argn)
    

    This will send all the output to a single buffer.