Wystąpił problem z przeglądaniem plików dokumentacji pdf w programie AucTex. Używam pdf-toolsdo przeglądania plików PDF z poziomu Emacsa i ustawiłem emacsclient -njako 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ę listingspakietu, TeX-documentation-texdoczamienia to w następujący sexp:
(shell-command-to-string "texdoc --view listings")
texdocz kolei wezwania emacsclientdo 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.pdfi 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 --viewa 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 listingsaby znaleźć plik, a następnie użyćfind-file?