all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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





  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.