У мене виникла проблема з переглядом файлів документації у форматі PDF з AucTex. Я використовую pdf-toolsдля перегляду PDF-файлів зсередини Emacs, і я встановив emacsclient -nяк свій pdf-переглядач за замовчуванням (через xdg-mime на Debian Linux). Це працює чудово за більшості обставин, але порушує (Tex-documentation-texdoc ...)функцію Auctex ( C-c ?).
Я звузив проблему до одного рядка коду. Коли я намагаюся переглянути документацію для listingsпакета, TeX-documentation-texdocперетворює це на наступний сексп:
(shell-command-to-string "texdoc --view listings")
texdocу свою чергу закликає emacsclientфактично відкрити файл (виходячи з того, як я налаштував свій робочий стіл через xdg). Однак у цей момент Emacs зависає, і мені потрібно кинути ( C-g), щоб повернути контроль. Після цього жоден новий pdf не відкривається. Те ж саме відбувається, якщо я намагаюся викликати emacsclient безпосередньо:
(shell-command-to-string "emacsclient -n tmp.pdf")
Обидві команди працюють у командному рядку (тобто, emacsclient -n tmp.pdfі texdoc --view listings.
Моє запитання полягає в такому випадку, як мені викликати emacsclient зсередини Emacs? (і я знаю, що я міг би просто відкрити файл pdf find-file; це не варіант, оскільки мені потрібно викликати зовнішній процес (texdoc), щоб знайти файл, і цей процес потім викликає emacsclient).
texdoc --viewа потім перемикання назад на Emacs, коли він відкриває файл. Але я думаю, що має бути спосіб зробити це за один крок від Emacs?
(async-shell-command "emacsclient -n tmp.pdf")вирішити проблему?
(async-shell-command "emacsclient -n tmp.pdf")працює, але (async-shell-command "texdoc --view listings")ні. Тож це корисна підказка.
C-u C-c ?працює? Спочатку відображається список документів, пов’язаних із пакетом, потім відкривається глядач (call-process "texdoc" nil 0 nil "--just-view" doc).
texdoc -M --list listingsне знайти файл, а потім скористатисяfind-file?