branch: externals/denote commit 35fb700d8c2ab1736d91996815f9e55271015db5 Author: Protesilaos Stavrou <i...@protesilaos.com> Commit: Protesilaos Stavrou <i...@protesilaos.com>
Consolidate the user-error of the various query commands --- denote.el | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/denote.el b/denote.el index 314b7b96a8..9199c3c009 100644 --- a/denote.el +++ b/denote.el @@ -5735,14 +5735,21 @@ concomitant alist, such as `denote-backlinks-display-buffer-action'." "Function to make an Xref buffer showing query link results. It accepts the same arguments as `denote-make-links-buffer'.") +(defun denote--user-error-if-not-major-mode (mode) + "Signal `user-error' is MODE is not `derived-mode-p'." + (unless (derived-mode-p mode) + (user-error "Only use this command inside the `%s'" mode))) + (defun denote-query-focus-last-search (query) "Search QUERY in the content of files which matched the last search. \"Last search\" here means any call to `denote-grep', `denote-backlinks', `denote-query-contents-link', or, generally, any command that relies on the `denote-make-links-buffer'." - (interactive (list (denote-grep-query-prompt "Search (only files matched last): ")) denote-query-mode) - (unless (derived-mode-p 'denote-query-mode) - (user-error "Only use this command inside the `denote-query-mode'")) + (interactive + (or (denote--user-error-if-not-major-mode 'denote-query-mode) + (list (denote-grep-query-prompt "Search (only files matched last): "))) + denote-query-mode) + (denote--user-error-if-not-major-mode 'denote-query-mode) (denote-make-links-buffer query denote-query--last-files nil '(display-buffer-same-window)) @@ -5766,9 +5773,11 @@ a list of fixed strings (NOT regexps) to check against last matched files. Files that match any of the strings get excluded. Internally, the list is processed using `regexp-opt'. For an example of this usage, see `denote-query-exclude-files-with-keywords'." - (interactive (list (denote-grep-file-regexp-prompt)) denote-query-mode) - (unless (derived-mode-p 'denote-query-mode) - (user-error "Only use this command inside the `denote-query-mode'")) + (interactive + (or (denote--user-error-if-not-major-mode 'denote-query-mode) + (list (denote-grep-file-regexp-prompt))) + denote-query-mode) + (denote--user-error-if-not-major-mode 'denote-query-mode) (let (final-files) (dolist (file denote-query--last-files) (unless (string-match @@ -5790,9 +5799,11 @@ see `denote-query-exclude-files-with-keywords'." See `denote-query-exclude-files' for details, including the behaviour when REGEXP is a list." - (interactive (list (denote-grep-file-regexp-prompt :include)) denote-query-mode) - (unless (derived-mode-p 'denote-query-mode) - (user-error "Only use this command inside the `denote-query-mode'")) + (interactive + (or (denote--user-error-if-not-major-mode 'denote-query-mode) + (list (denote-grep-file-regexp-prompt :include))) + denote-query-mode) + (denote--user-error-if-not-major-mode 'denote-query-mode) (let (final-files) (dolist (file denote-query--last-files) (when (string-match @@ -5817,10 +5828,10 @@ KEYWORDS should be a list of keywords (without underscore). Interactively, KEYWORDS are read from the minibuffer using `completing-read-multiple', which see." (interactive - (list (denote-keywords-prompt "Exclude files with keywords")) + (or (denote--user-error-if-not-major-mode 'denote-query-mode) + (list (denote-keywords-prompt "Exclude files with keywords"))) denote-query-mode) - (unless (derived-mode-p 'denote-query-mode) - (user-error "Only use this command inside the `denote-query-mode'")) + (denote--user-error-if-not-major-mode 'denote-query-mode) (denote-query-exclude-files (mapcar (lambda (kw) (concat "_" kw)) keywords))) @@ -5829,10 +5840,10 @@ Interactively, KEYWORDS are read from the minibuffer using See `denote-query-exclude-files-with-keywords' for details." (interactive - (list (denote-keywords-prompt "Only include files with keywords")) + (or (denote--user-error-if-not-major-mode 'denote-query-mode) + (list (denote-keywords-prompt "Only include files with keywords"))) denote-query-mode) - (unless (derived-mode-p 'denote-query-mode) - (user-error "Only use this command inside the `denote-query-mode'")) + (denote--user-error-if-not-major-mode 'denote-query-mode) (denote-query-only-include-files (mapcar (lambda (kw) (concat "_" kw)) keywords))) @@ -5842,8 +5853,7 @@ See `denote-query-exclude-files-with-keywords' for details." This effectively gets ride of any interactive filter applied (by the means of e.g. `denote-query-exclude-files')." (interactive nil denote-query-mode) - (unless (derived-mode-p 'denote-query-mode) - (user-error "Only use this command inside the `denote-query-mode'")) + (denote--user-error-if-not-major-mode 'denote-query-mode) (denote-make-links-buffer denote-query--last-query nil (and (eq major-mode 'denote-query-mode) (buffer-name)) '(display-buffer-same-window))