[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 65108998b1e: docview: imenu: check return value of 'mutool'
From: |
Eli Zaretskii |
Subject: |
master 65108998b1e: docview: imenu: check return value of 'mutool' |
Date: |
Thu, 20 Jul 2023 12:04:07 -0400 (EDT) |
branch: master
commit 65108998b1ee0b42b57d478ba3b51f9040f04cd4
Author: Morgan Smith <Morgan.J.Smith@outlook.com>
Commit: Eli Zaretskii <eliz@gnu.org>
docview: imenu: check return value of 'mutool'
While 'mutool' supports many filetypes, 'mutool show' only
supports PDF files. This would lead to cryptic imenu errors
when opening other
file types (like EPUB) since we would parse the error output.
During my testing this caused 'imenu--index-alist' to have a
value of '(nil).
* lisp/doc-view.el (doc-view--pdf-outline): Error when 'mutool'
returns an error. Use 'call-process' to get the return value and
remove the call to 'shell-quote-argument' as 'call-process'
doesn't want any escapes.
(doc-view-mode): Handle possible error from 'doc-view-imenu-setup'.
(doc-view-imenu-enabled): Remove superfluous (and ... t).
(doc-view-imenu-setup): Remove check for mutool already ensured by
'doc-view-imenu-enabled' being non-nil.
(Bug#64516)
---
lisp/doc-view.el | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/lisp/doc-view.el b/lisp/doc-view.el
index b14655fb274..847601872f5 100644
--- a/lisp/doc-view.el
+++ b/lisp/doc-view.el
@@ -147,6 +147,8 @@
(require 'filenotify)
(eval-when-compile (require 'subr-x))
+(autoload 'imenu-unavailable-error "imenu")
+
;;;; Customization Options
(defgroup doc-view nil
@@ -214,7 +216,7 @@ are available (see Info node `(emacs)Document View')."
:type 'boolean
:version "30.1")
-(defcustom doc-view-imenu-enabled (and (executable-find "mutool") t)
+(defcustom doc-view-imenu-enabled (executable-find "mutool")
"Whether to generate an imenu outline when \"mutool\" is available."
:type 'boolean
:version "29.1")
@@ -1910,9 +1912,10 @@ structure is extracted by `doc-view--imenu-subtree'."
(let ((fn (or file-name (buffer-file-name))))
(when fn
(let ((outline nil)
- (fn (shell-quote-argument (expand-file-name fn))))
+ (fn (expand-file-name fn)))
(with-temp-buffer
- (insert (shell-command-to-string (format "mutool show %s outline"
fn)))
+ (unless (= 0 (call-process "mutool" nil (current-buffer) nil "show"
fn "outline"))
+ (imenu-unavailable-error "Unable to create imenu index using
`mutool'"))
(goto-char (point-min))
(while (re-search-forward doc-view--outline-rx nil t)
(push `((level . ,(length (match-string 1)))
@@ -1961,7 +1964,7 @@ GOTO-PAGE-FN other than `doc-view-goto-page'."
(defun doc-view-imenu-setup ()
"Set up local state in the current buffer for imenu, if needed."
- (when (and doc-view-imenu-enabled (executable-find "mutool"))
+ (when doc-view-imenu-enabled
(setq-local imenu-create-index-function #'doc-view-imenu-index
imenu-submenus-on-top nil
imenu-sort-function nil
@@ -2236,7 +2239,10 @@ toggle between displaying the document or editing it as
text.
(setq mode-name "DocView"
buffer-read-only t
major-mode 'doc-view-mode)
- (doc-view-imenu-setup)
+ (condition-case imenu-error
+ (doc-view-imenu-setup)
+ (imenu-unavailable (message "imenu support unavailable: %s"
+ (cadr imenu-error))))
(doc-view-initiate-display)
;; Switch off view-mode explicitly, because doc-view-mode is the
;; canonical view mode for PDF/PS/DVI files. This could be
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 65108998b1e: docview: imenu: check return value of 'mutool',
Eli Zaretskii <=