emacs: use the originating buffer's working directory for pipe

Currently notmuch-show-pipe-message runs the command in the working
directory of the *notmuch-pipe* buffer if it exists, and the current
buffer's working directory (which is inherited to the new
*notmuch-pipe* buffer) otherwise. This is all very surprising to the
user, and it's difficult to know or change where the command will be
run.

Always use the current show buffer's working directory for piping. The
user can check that with M-x pwd and change it with M-x cd. This is
consistent with notmuch-show-pipe-part.
This commit is contained in:
Jani Nikula 2014-03-01 15:17:50 +02:00 committed by David Bremner
parent ed720f4e6d
commit ec13bd12e3

View file

@ -1781,10 +1781,14 @@ message."
(setq shell-command (setq shell-command
(concat notmuch-command " show --format=raw " (concat notmuch-command " show --format=raw "
(shell-quote-argument (notmuch-show-get-message-id)) " | " command))) (shell-quote-argument (notmuch-show-get-message-id)) " | " command)))
(let ((buf (get-buffer-create (concat "*notmuch-pipe*")))) (let ((cwd default-directory)
(buf (get-buffer-create (concat "*notmuch-pipe*"))))
(with-current-buffer buf (with-current-buffer buf
(setq buffer-read-only nil) (setq buffer-read-only nil)
(erase-buffer) (erase-buffer)
;; Use the originating buffer's working directory instead of
;; that of the pipe buffer.
(cd cwd)
(let ((exit-code (call-process-shell-command shell-command nil buf))) (let ((exit-code (call-process-shell-command shell-command nil buf)))
(goto-char (point-max)) (goto-char (point-max))
(set-buffer-modified-p nil) (set-buffer-modified-p nil)