From: Morgan Smith <Morgan.J.Smith@outlook.com>
To: Tassilo Horn <tsdh@gnu.org>
Cc: Eli Zaretskii <eliz@gnu.org>, 64516@debbugs.gnu.org, jao@gnu.org
Subject: bug#64516: [PATCH] docview: Only enable imenu when supported
Date: Tue, 11 Jul 2023 14:22:49 -0400 [thread overview]
Message-ID: <DM5PR03MB3163020801BFC39F82EEEDC7C531A@DM5PR03MB3163.namprd03.prod.outlook.com> (raw)
In-Reply-To: <DM5PR03MB3163B54C5C827DE6CE597480C531A@DM5PR03MB3163.namprd03.prod.outlook.com> (Morgan Smith's message of "Tue, 11 Jul 2023 13:49:25 -0400")
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: 0001-docview-imenu-check-return-value-of-mutool.patch --]
[-- Type: text/x-patch, Size: 2331 bytes --]
From d2315c945d6fd87a2371eefb82ec0241287e66a1 Mon Sep 17 00:00:00 2001
From: Morgan Smith <Morgan.J.Smith@outlook.com>
Date: Tue, 11 Jul 2023 14:08:24 -0400
Subject: [PATCH] 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): Run 'doc-view-imenu-setup' in the
'doc-view-mode-hook' so that errors don't prevent displaying the
document.
---
lisp/doc-view.el | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/lisp/doc-view.el b/lisp/doc-view.el
index b14655fb274..f64c3a9719b 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
@@ -1910,9 +1912,10 @@ doc-view--pdf-outline
(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)))
@@ -2236,7 +2239,7 @@ doc-view-mode
(setq mode-name "DocView"
buffer-read-only t
major-mode 'doc-view-mode)
- (doc-view-imenu-setup)
+ (add-hook 'doc-view-mode-hook #'doc-view-imenu-setup nil t)
(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
--
2.40.1
[-- Attachment #2: Type: text/plain, Size: 778 bytes --]
Hello,
I apologize for my "oops I figured it out immediately after I sent the
email" syndrome. I was trying to find the answer in the bug reports
when the answer was in the code and quite obvious.
Anyways here is a patch that unconditionally enables imenu but checks
the return value of mutool and will raise an imenu-unavailable-error
when it is not successful. However, that error stops docview from
displaying the document so I decided to put the setup function in a hook
so the error occurs after the document is displayed.
I looked briefly for documentation on how errors work in hooks but could
not find any. I don't want this error to prevent the other hooks from
being run (which would be user defined hooks. we don't currently use
this hook).
Thanks,
Morgan
next prev parent reply other threads:[~2023-07-11 18:22 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-07 15:24 bug#64516: [PATCH] docview: Only enable imenu when supported Morgan Smith
2023-07-07 15:40 ` Morgan Smith
2023-07-07 16:05 ` Morgan Smith
2023-07-08 9:14 ` Eli Zaretskii
2023-07-09 8:13 ` Tassilo Horn
2023-07-11 17:49 ` Morgan Smith
2023-07-11 18:22 ` Morgan Smith [this message]
2023-07-15 8:05 ` Eli Zaretskii
2023-07-15 18:39 ` Tassilo Horn
2023-07-15 23:50 ` Morgan Smith
2023-07-16 4:39 ` Tassilo Horn
2023-07-16 15:03 ` Morgan Smith
2023-07-16 15:24 ` Tassilo Horn
2023-07-18 18:40 ` Morgan Smith
2023-07-18 19:14 ` Tassilo Horn
2023-07-20 16:05 ` Eli Zaretskii
2023-07-28 10:14 ` Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-07-28 10:19 ` Tassilo Horn
2023-07-28 11:22 ` Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-07-11 18:28 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=DM5PR03MB3163020801BFC39F82EEEDC7C531A@DM5PR03MB3163.namprd03.prod.outlook.com \
--to=morgan.j.smith@outlook.com \
--cc=64516@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=jao@gnu.org \
--cc=tsdh@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.