From: Tassilo Horn <tsdh@gnu.org>
To: Visuwesh <visuweshm@gmail.com>
Cc: Eli Zaretskii <eliz@gnu.org>, 73638@debbugs.gnu.org
Subject: bug#73638: 31.0.50; doc-view: imenu index cannot be made for LaTeX PDFs
Date: Mon, 07 Oct 2024 09:02:31 +0200 [thread overview]
Message-ID: <87y130z988.fsf@gnu.org> (raw)
In-Reply-To: <8734l9h0nj.fsf@gmail.com> (Visuwesh's message of "Sun, 06 Oct 2024 18:02:48 +0530")
Visuwesh <visuweshm@gmail.com> writes:
Hi!
>> I don't do that very frequently. I think it would be simpler if we
>> skip the sentinel and instead use some :buffer " *mutool-run-result*"
>> with make-process and just read from there after the
>> accept-process-output loop.
>
> That was a serious brainfart, indeed. I've went with your approach in
> the attached, please review.
>
> @@ -1986,21 +1998,25 @@ doc-view--pdf-outline
> structure is extracted by `doc-view--imenu-subtree'."
> (let ((fn (or file-name (buffer-file-name))))
> (when fn
> - (let ((outline nil)
> - (fn (expand-file-name fn)))
> - (with-temp-buffer
> - (unless (eql 0 (call-process doc-view-pdfdraw-program nil
> - (current-buffer) nil "show" fn "outline"))
> + (with-temp-buffer
> + (let ((proc (make-process
> + :name "doc-view-pdf-outline"
> + :command (list "mutool" "run")
> + :buffer (current-buffer))))
> + (process-send-string proc (format doc-view--mutool-pdf-outline-script
> + (expand-file-name fn)))
> + ;; Need to send this twice for some reason...
> + (process-send-eof)
> + (process-send-eof)
> + (while (accept-process-output proc))
> + (unless (eq (process-status proc) 'exit)
> (setq doc-view--outline 'unavailable)
> (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)))
> - (title . ,(replace-regexp-in-string "\\\\[rt]" " "
> - (match-string 2)))
> - (page . ,(string-to-number (match-string 3))))
> - outline)))
> - (nreverse outline)))))
> + (search-forward "BEGIN")
If the script fails for some reason, there will be no BEGIN and we let a
search-failed error bubble up. So I'd put it in the condition-case and
handle it like the end-of-file error. Or simply provide the NOERROR
search-forward arg.
> + (condition-case nil
> + (read (current-buffer))
> + (end-of-file nil)))))))
Maybe it would also a good idea to use a :stderr buffer with
make-process and put its contents into the imenu-unavailable-error.
That way, chances are better we get the reason for failure delivered in
bug reports.
Otherwise, it all looks good to me. :-)
Thanks,
Tassilo
next prev parent reply other threads:[~2024-10-07 7:02 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-05 11:06 bug#73638: 31.0.50; doc-view: imenu index cannot be made for LaTeX PDFs Visuwesh
2024-10-05 19:56 ` Tassilo Horn
2024-10-06 5:42 ` Eli Zaretskii
2024-10-06 6:28 ` Visuwesh
2024-10-06 6:39 ` Eli Zaretskii
2024-10-06 8:16 ` Tassilo Horn
2024-10-06 10:32 ` Visuwesh
2024-10-06 11:26 ` Tassilo Horn
2024-10-06 12:32 ` Visuwesh
2024-10-07 7:02 ` Tassilo Horn [this message]
2024-10-07 9:26 ` Visuwesh
2024-10-07 9:55 ` Visuwesh
2024-10-07 11:03 ` Tassilo Horn
2024-10-07 12:53 ` Visuwesh
2024-10-07 15:04 ` Tassilo Horn
2024-10-08 9:44 ` Visuwesh
2024-10-08 15:43 ` Tassilo Horn
2024-10-06 6:39 ` Visuwesh
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=87y130z988.fsf@gnu.org \
--to=tsdh@gnu.org \
--cc=73638@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=visuweshm@gmail.com \
/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.