Odpowiedzi:
Dwie poprzednie odpowiedzi nie działały dla mnie:
(setq process-connection-type nil)
zepsuł się org-plot/gnuplot
setsid 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 setsid
oczekiwany 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-list
ustawiony 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.pdf
działa dla mnie. Problem wydaje się być to, że gvfs-open
i xdg-open
wró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ę evince
od prawidłowego otwarcia. setsid
ustawia 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/gnuplot
kursor / punkt na stole z process-connection-type
ustawionym na i bez niego, aby nil
uzyskać 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