Odpowiedzi:
Dwie poprzednie odpowiedzi nie działały dla mnie:
(setq process-connection-type nil) zepsuł się org-plot/gnuplotsetsid xdg-open ... działało przez chwilę, ale potem z jakiegoś powodu przestało działać.Teraz używam setsid -w, co podobno powoduje, że setsidoczekiwany program się zakończy.
Jeśli ktoś by go potrzebował, używam tego z AUCTeX (i znalazłem to pytanie, próbując naprawić zachowanie AUCTeX na Arch Linux), a mój TeX-command-listustawiony jest na
(quote
(
;; ...
("View" "setsid -w xdg-open %s.pdf" TeX-run-command t t :help "Run Text viewer")
;; ...
)
Na razie wydaje się, że działa dobrze ...
Używanie setsid xdg-open 1.pdfdziała dla mnie. Problem wydaje się być to, że gvfs-openi xdg-openwrócić, zanim ich dzieci zakończeniu pracy. Emacs może zabić ich kontrolujący terminal, kiedy to nastąpi, zabijając dzieci i powstrzymując się evinceod prawidłowego otwarcia. setsidustawia nowy terminal kontrolny, którego emacs nie chce zamknąć.
Może to być problem z używaniem ptys do komunikacji podprocesowej. Spróbuj zamiast tego ustawić typ połączenia procesowego na zero, aby używać potoków.
W twoich .emacs
;; Use pipes for subprocess communication
(setq process-connection-type nil)
Korzystam z funkcji publikowania z trybu organizacji i bez tej zmiany żaden z wygenerowanych plików nie otwiera się za pomocą xdg-open, pomimo braku komunikatów o błędach.
org-plot/gnuplotkursor / punkt na stole z process-connection-typeustawionym na i bez niego, aby niluzyskać więcej informacji, zobacz pierwszą podsekcję tej strony .
xdg otwarty praca w trybie synchronizacji: (shell-command "xdg-open ."), ale nie w trybie asynchronicznym: (async-shell-command "xdg-open .").
wygląda na to, że proces potomny spawnujący xdg-open otwiera plik, a następnie kończy działanie. przed procesem potomnym otwórz plik, wyjdź z xdg-open, a także wyjdź z powłoki. wyjście z powłoki zabija cały proces potomny.
więc po prostu zmniejsz życie powłoki:
(async-shell-command "xdg-open . ; sleep 1")
(polecenie async-shell-dodaje się &później sleep 1; w każdym razie powłoka nadal czeka na &zakończenie procesu w tle ).
-w(czekać):setsid -w xdg-open 1.pdf