Wystąpił problem z przeglądaniem plików dokumentacji pdf w programie AucTex. Używam pdf-tools
do przeglądania plików PDF z poziomu Emacsa i ustawiłem emacsclient -n
jako domyślną przeglądarkę pdf (przez xdg-mime w systemie Debian Linux). Działa to dobrze w większości przypadków, ale psuje (Tex-documentation-texdoc ...)
funkcję Auctex ( C-c ?
).
Zawęziłem problem do jednego wiersza kodu. Kiedy próbuję przeglądać dokumentację listings
pakietu, TeX-documentation-texdoc
zamienia to w następujący sexp:
(shell-command-to-string "texdoc --view listings")
texdoc
z kolei wezwania emacsclient
do otwarcia pliku (na podstawie tego, jak skonfigurowałem swój pulpit za pomocą xdg). Jednak w tym momencie Emacs zawiesza się i muszę wyjść z ( C-g
), aby odzyskać kontrolę. Po tym nie jest otwierany żaden nowy plik pdf. To samo dzieje się, jeśli spróbuję wywołać emacsclient bezpośrednio:
(shell-command-to-string "emacsclient -n tmp.pdf")
Oba polecenia pracy w linii poleceń (czyli emacsclient -n tmp.pdf
i texdoc --view listings
.
Moje pytanie brzmi: w takim przypadku jak wywołać emacsclient z poziomu Emacsa? (i wiem, że mogłem po prostu otworzyć plik pdf find-file
; nie jest to opcja, ponieważ muszę wywołać proces zewnętrzny (texdoc), aby znaleźć plik, a następnie ten proces wywołuje emacsclient).
texdoc --view
a następnie przełączenie z powrotem do Emacsa po otwarciu pliku. Ale myślę, że powinien istnieć sposób na zrobienie tego w jednym kroku od Emacsa?
(async-shell-command "emacsclient -n tmp.pdf")
rozwiązać problem?
(async-shell-command "emacsclient -n tmp.pdf")
działa, ale nie (async-shell-command "texdoc --view listings")
działa. To przydatna wskazówka.
C-u C-c ?
działa Najpierw wyświetla listę dokumentów związanych z pakietem, a następnie otwiera przeglądarkę za pomocą (call-process "texdoc" nil 0 nil "--just-view" doc)
.
texdoc -M --list listings
aby znaleźć plik, a następnie użyćfind-file
?