From a890241138ea468f8a275941b02da39b4e894c1e Mon Sep 17 00:00:00 2001 From: David Bremner Date: Sun, 29 Aug 2021 12:23:29 -0700 Subject: [PATCH] emacs: wrap process-lines Initially just set the working directory, to avoid (the implicit) call-process crashing when the default-directory points to a non-existent location. Use of a macro here is over-engineering for this change, but the same change needs to be applied to several other process creation primitives. --- emacs/notmuch-address.el | 2 +- emacs/notmuch-draft.el | 2 +- emacs/notmuch-hello.el | 6 +++--- emacs/notmuch-lib.el | 9 +++++++++ emacs/notmuch-tree.el | 2 +- emacs/notmuch.el | 2 +- 6 files changed, 16 insertions(+), 7 deletions(-) diff --git a/emacs/notmuch-address.el b/emacs/notmuch-address.el index 9fc13bc5..1a4cdda2 100644 --- a/emacs/notmuch-address.el +++ b/emacs/notmuch-address.el @@ -217,7 +217,7 @@ requiring external commands." ;; harvest if necessary. (notmuch-address-harvest-trigger))) (t - (process-lines notmuch-address-command original)))) + (notmuch--process-lines notmuch-address-command original)))) (defun notmuch-address-expand-name () (cond diff --git a/emacs/notmuch-draft.el b/emacs/notmuch-draft.el index aeb6c588..0b1ba43f 100644 --- a/emacs/notmuch-draft.el +++ b/emacs/notmuch-draft.el @@ -239,7 +239,7 @@ applied to newly inserted messages)." (defun notmuch-draft-resume (id) "Resume editing of message with id ID." ;; Used by command `notmuch-show-resume-message'. - (let* ((tags (process-lines notmuch-command "search" "--output=tags" + (let* ((tags (notmuch--process-lines notmuch-command "search" "--output=tags" "--exclude=false" id)) (draft (equal tags (notmuch-update-tags tags notmuch-draft-tags)))) (when (or draft diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index 21855b70..61494c02 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -496,7 +496,7 @@ diagonal." (widget-get widget :notmuch-search-oldest-first))))) (defun notmuch-saved-search-count (search) - (car (process-lines notmuch-command "count" search))) + (car (notmuch--process-lines notmuch-command "count" search))) (defun notmuch-hello-tags-per-line (widest) "Determine how many tags to show per line and how wide they @@ -748,7 +748,7 @@ Complete list of currently available key bindings: (list (cons tag (concat "tag:" (notmuch-escape-boolean-term tag)))))) - (process-lines notmuch-command "search" "--output=tags" "*"))) + (notmuch--process-lines notmuch-command "search" "--output=tags" "*"))) (defun notmuch-hello-insert-header () "Insert the default notmuch-hello header." @@ -786,7 +786,7 @@ Complete list of currently available key bindings: :help-echo "Refresh" (notmuch-hello-nice-number (string-to-number - (car (process-lines notmuch-command "count"))))) + (car (notmuch--process-lines notmuch-command "count"))))) (widget-insert " messages.\n"))) (defun notmuch-hello-insert-saved-searches () diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el index c7bb2091..928286c3 100644 --- a/emacs/notmuch-lib.el +++ b/emacs/notmuch-lib.el @@ -860,6 +860,15 @@ You may need to restart Emacs or upgrade your notmuch package.")) ;; `notmuch-logged-error' does not return. )))) +(defmacro notmuch--apply-with-env (func &rest args) + `(let ((default-directory "~")) + (apply ,func ,@args))) + +(defun notmuch--process-lines (program &rest args) + "Wrap process-lines, binding DEFAULT-DIRECTORY to a safe +default" + (notmuch--apply-with-env #'process-lines program args)) + (defun notmuch-call-notmuch--helper (destination args) "Helper for synchronous notmuch invocation commands. diff --git a/emacs/notmuch-tree.el b/emacs/notmuch-tree.el index b3f1183d..1efb95bb 100644 --- a/emacs/notmuch-tree.el +++ b/emacs/notmuch-tree.el @@ -1113,7 +1113,7 @@ the same as for the function notmuch-tree." (concat " and (" query-context ")")))) (sort-arg (if oldest-first "--sort=oldest-first" "--sort=newest-first")) (message-arg (if unthreaded "--unthreaded" "--entire-thread"))) - (when (equal (car (process-lines notmuch-command "count" search-args)) "0") + (when (equal (car (notmuch--process-lines notmuch-command "count" search-args)) "0") (setq search-args basic-query)) (notmuch-tag-clear-cache) (let ((proc (notmuch-start-notmuch diff --git a/emacs/notmuch.el b/emacs/notmuch.el index 479b39f1..2ef67c0e 100644 --- a/emacs/notmuch.el +++ b/emacs/notmuch.el @@ -940,7 +940,7 @@ See `notmuch-tag' for information on the format of TAG-CHANGES." PROMPT is the string to prompt with." (let* ((all-tags (mapcar (lambda (tag) (notmuch-escape-boolean-term tag)) - (process-lines notmuch-command "search" "--output=tags" "*"))) + (notmuch--process-lines notmuch-command "search" "--output=tags" "*"))) (completions (append (list "folder:" "path:" "thread:" "id:" "date:" "from:" "to:" "subject:" "attachment:")