emacs: use the originating buffer's working directory for pipe
authorJani Nikula <jani@nikula.org>
Sat, 1 Mar 2014 13:17:50 +0000 (15:17 +0200)
committerDavid Bremner <david@tethera.net>
Wed, 5 Mar 2014 00:00:50 +0000 (20:00 -0400)
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.

emacs/notmuch-show.el

index 88752f1719306271fc4e276568dae0a904fd4701..b8782ddb632e5397e84d6a2f9e63d853cd9aa8d9 100644 (file)
@@ -1781,10 +1781,14 @@ message."
       (setq shell-command
            (concat notmuch-command " show --format=raw "
                    (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
        (setq buffer-read-only nil)
        (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)))
          (goto-char (point-max))
          (set-buffer-modified-p nil)