[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: TeX-documentation-texdoc
From: |
Greg Bognar |
Subject: |
Re: TeX-documentation-texdoc |
Date: |
Mon, 23 Jan 2023 12:28:08 +0100 |
Hi Ikumi,
1. Unfortunately, the new function definition below does not work with okular.
Same problem as before.
2. All of the environment variables PDFVIEWER, PDFVIEWER_texdoc, TEXDOCVIEW_pdf,
and TEXDOC_VIEWER_PDF have an empty value.
All the best,
Greg
-------------------------------------------------------------------------------
On Mon 23 Jan 2023 at 08:33 Ikumi Keita wrote:
> Hi Greg,
>
> >>>>> Greg Bognar <greg.bognar@startmail.com> writes:
> > Your code works! So yes, your commit harmed okular in some way.
>
> Thank you. That's a bad news for me :-)
>
> > Where do we go from here?
>
> Then we have to find out the way compatible for both okular and evince.
> Unfortunately, the old code is bad for evince; it still blocks emacs
> until the user quits evince as described in bug#28905[1].
>
> [1] https://debbugs.gnu.org/28905
>
> 1. Can you please test the following code, then? This uses
> `start-process' instead of `start-process-shell-command', as suggested
> by Mosè in the thread of [1].
> ----------------------------------------------------------------------
> (defun TeX-documentation-texdoc (&optional arg)
> "Run texdoc to read documentation.
>
> Prompt for selection of the package of which to show the documentation.
>
> If called with a prefix argument ARG, after selecting the
> package, prompt for selection of the manual of that package to
> show."
> (interactive "P")
> (let ((pkg (thing-at-point 'symbol))
> buffer list doc)
> ;; Strip off properties. XXX: XEmacs doesn't have
> ;; `substring-no-properties'.
> (set-text-properties 0 (length pkg) nil pkg)
> (setq pkg (TeX-read-string "View documentation for: " pkg))
> (unless (zerop (length pkg))
> (if arg
> ;; Called with prefix argument: run "texdoc --list --nointeract
> <pkg>"
> (progn
> ;; Create the buffer, insert the result of the command, and
> ;; accumulate the list of manuals.
> (with-current-buffer (get-buffer-create
> (setq buffer (format "*texdoc: %s*" pkg)))
> (erase-buffer)
> (insert (shell-command-to-string
> (concat "texdoc --list --nointeract " pkg)))
> (goto-char 1) ; No need to use `point-min' here.
> (save-excursion
> (while (re-search-forward
> ;; XXX: XEmacs doesn't support character classes in
> ;; regexps, like "[:alnum:]".
> "^ *\\([0-9]+\\) +\\([-~/a-zA-Z0-9_.${}#%,:\\
> ()]+\\)" nil t)
> (push (cons (match-string 1) (match-string 2)) list))))
> (unwind-protect
> (cond
> ((null (executable-find "texdoc"))
> ;; Note: `shell-command-to-string' uses shell, only
> ;; `call-process' looks at `exec-path', thus only here makes
> ;; sense to use `executable-find' to test whether texdoc is
> ;; available.
> (message "texdoc not found"))
> (list
> ;; Go on if there are manuals listed: show the buffer,
> prompt
> ;; for the number of the manual, then run
> ;; texdoc --just-view <doc>
> (TeX-pop-to-buffer (get-buffer buffer))
> (condition-case nil
> (when (setq doc
> (cdr (assoc (TeX-read-string "Please enter \
> the number of the file to view, anything else to skip: ") list)))
> (call-process "texdoc" nil 0 nil "--just-view" doc))
> ;; Exit gently if a `quit' signal is thrown.
> (quit nil)))
> (t (message "No documentation found for %s" pkg)))
> ;; In any case quit-and-kill the window.
> (when (get-buffer-window buffer)
> (quit-window t (get-buffer-window buffer)))))
> ;; Called without prefix argument: just run "texdoc --view <pkg>" and
> ;; show the output, so that the user is warned in case it doesn't find
> ;; the documentation or "texdoc" is not available.
> (message "%s"
> ;; The folowing code to the end of `defun' used to be
> ;; just
> ;; (shell-command-to-string (concat "texdoc --view " pkg))
> ;; , but in some cases it blocks emacs until the user
> ;; quits the viewer (bug#28905).
> (with-output-to-string
> (let* (;; Use pipe rather than pty because the
> ;; latter causes atril (evince variant
> ;; viewer) to exit before showing anything.
> (process-connection-type nil)
> (process (start-process
> "Doc view" standard-output
> "texdoc" "--view" pkg)))
> ;; Suppress the message "Process Doc view
> ;; finished".
> (set-process-sentinel process #'ignore)
> ;; Kill temp buffer without query. This is
> ;; necessary, at least for some environment, if
> ;; the underlying shell can't find the texdoc
> ;; executable.
> (set-process-query-on-exit-flag process nil)
> ;; Don't discard shell output.
> (accept-process-output process))))))))
> ----------------------------------------------------------------------
>
> 2. If the above code fails, then could you provide the value of the
> following environment variables in the emacs shell (M-x shell)? That
> is, type "echo $PDFVIEWER RET" etc. in that shell.
>
> PDFVIEWER
> PDFVIEWER_texdoc
> TEXDOCVIEW_pdf
> TEXDOC_VIEWER_PDF
>
> I'd like to know whether there is something bad in your viewer
> setting to run inside emacs while safe in a vanilla shell.
>
> Regards,
> Ikumi Keita
> #StandWithUkraine #StopWarInUkraine
- TeX-documentation-texdoc, Greg Bognar, 2023/01/20
- Re: TeX-documentation-texdoc, David Kastrup, 2023/01/20
- Re: TeX-documentation-texdoc, Pieter van Oostrum, 2023/01/21
- Re: TeX-documentation-texdoc, Greg Bognar, 2023/01/21
- Re: TeX-documentation-texdoc, Ikumi Keita, 2023/01/22
- Re: TeX-documentation-texdoc, Greg Bognar, 2023/01/22
- Re: TeX-documentation-texdoc, Ikumi Keita, 2023/01/23
- Re: TeX-documentation-texdoc,
Greg Bognar <=
- Re: TeX-documentation-texdoc, Ikumi Keita, 2023/01/24
- Re: TeX-documentation-texdoc, Greg Bognar, 2023/01/24
- Re: TeX-documentation-texdoc, Ikumi Keita, 2023/01/26
- Re: TeX-documentation-texdoc, Arash Esbati, 2023/01/26
- Re: TeX-documentation-texdoc, Ikumi Keita, 2023/01/27
- Re: TeX-documentation-texdoc, Arash Esbati, 2023/01/27
- Re: TeX-documentation-texdoc, Ikumi Keita, 2023/01/28
- Re: TeX-documentation-texdoc, Arash Esbati, 2023/01/24
- Re: TeX-documentation-texdoc, Ikumi Keita, 2023/01/25