emacs nie działa z xdg-open

2

Używam emacsa 24.4.1 na Ubuntu 15.04. Jakoś xdg-open nie działa, jeśli uruchomię go z emacsa. Na przykład, jeśli uruchomię „xdg-open 1.pdf” lub „gvfs-open 1.pdf” w eshell, nie działają. Jednocześnie „evince 1.pdf” działa doskonale.

RCV
źródło

Odpowiedzi:

3

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 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 ...

Emil Vatai
źródło
3

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ąć.

Michael Hoffman
źródło
Aby to zadziałało, musiałem dołączyć -w(czekać):setsid -w xdg-open 1.pdf
Francesquini
1

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.

użytkownik1064555
źródło
Dzięki, działało! Czy jest jakaś dokumentacja zawierająca wyjaśnienie tego?
Emil Vatai
Ta metoda działa, ale może powodować problemy dla innych aplikacji (dla mnie zrujnowanie wywoływania gnuplot z trybu org), więc nie jest to optymalne rozwiązanie! Mam teraz rozwiązanie Michaela Hoffmansa w .emacs (dla polecenia view w Auctex). Zobaczymy jak to działa.
Emil Vatai
Aby odtworzyć wspomniany wyżej błąd: spróbuj uruchomić org-plot/gnuplotkursor / punkt na stole z process-connection-typeustawionym na i bez niego, aby niluzyskać więcej informacji, zobacz pierwszą podsekcję tej strony .
Emil Vatai
0

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 ).

gholk
źródło