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.

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


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


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.