emacs tidak berfungsi dengan xdg-open

2

Saya menggunakan emacs 24.4.1 di ubuntu 15.04. Entah bagaimana xdg-open tidak berfungsi jika saya menjalankannya dari emacs. Misalnya, jika saya menjalankan "xdg-open 1.pdf" atau "gvfs-open 1.pdf" di eshell, mereka tidak berfungsi. Pada saat yang sama, "evince 1.pdf" bekerja dengan sempurna.

RCV
sumber

Jawaban:

3

Dua jawaban sebelumnya tidak berhasil untuk saya:

  • (setq process-connection-type nil) bangkrut org-plot/gnuplot
  • setsid xdg-open ... bekerja sebentar, tapi kemudian berhenti karena suatu alasan.

Sekarang saya menggunakan setsid -w, yang seharusnya membuat setsidmenunggu sampai program yang dipanggil selesai.

Jika seseorang membutuhkannya, saya menggunakan ini dengan AUCTeX (dan saya menemukan pertanyaan ini ketika mencoba untuk memperbaiki perilaku AUCTeX di Arch linux), dan saya TeX-command-listdiatur ke

(quote
 ( 
  ;; ...
  ("View" "setsid -w xdg-open %s.pdf" TeX-run-command t t :help "Run Text viewer")
  ;; ...
  )

Tampaknya berfungsi dengan baik untuk saat ini ...

Emil Vatai
sumber
3

Menggunakan setsid xdg-open 1.pdfkarya untukku. Masalahnya tampaknya itu gvfs-opendan xdg-openkembali sebelum anak-anak mereka selesai bekerja. Emacs mungkin membunuh terminal pengendali mereka ketika ini terjadi, membunuh anak-anak, dan berhenti evincemembuka dengan benar. setsidmenetapkan terminal pengendali baru yang emacs tidak akan tutup.

Michael Hoffman
sumber
Untuk membuatnya bekerja, saya harus memasukkan -w(tunggu):setsid -w xdg-open 1.pdf
Francesquini
1

Ini mungkin masalah dengan menggunakan ptys untuk komunikasi subproses. Cobalah mengatur tipe proses-koneksi hingga nol untuk menggunakan pipa saja.

Di .emacs Anda

;; Use pipes for subprocess communication
(setq process-connection-type nil)

Saya menggunakan fungsi penerbitan dari mode org dan tanpa perubahan ini, tidak ada file yang dihasilkan dibuka melalui xdg-open, meskipun tidak ada pesan kesalahan.

pengguna1064555
sumber
Terima kasih, itu berhasil! Apakah ada dokumentasi yang berisi penjelasan untuk ini?
Emil Vatai
Metode ini berhasil, tetapi dapat menyebabkan masalah untuk aplikasi lain (bagi saya itu merusak panggilan gnuplot dari org-mode), jadi ini bukan solusi yang optimal! Saya punya solusi Michael Hoffmans di .emacs saya sekarang (untuk perintah tampilan di Auctex). Kami akan melihat cara kerjanya.
Emil Vatai
Untuk mereproduksi kesalahan yang disebutkan di atas: coba jalankan org-plot/gnuplotdengan kursor / titik di atas meja dengan dan tanpa process-connection-typedisetel ke nil, untuk lebih jelasnya lihat subbagian pertama halaman ini .
Emil Vatai
0

kerja xdg-terbuka dalam mode sinkron: (shell-command "xdg-open ."), tapi tidak dalam modus async: (async-shell-command "xdg-open .").

sepertinya proses anak menelurkan xdg-open untuk membuka file kemudian keluar. sebelum anak memproses file terbuka, xdg-buka, jadi keluar shell juga. keluar shell membunuh semua proses anak.

jadi buat saja shell lebih lama: (async-shell-command "xdg-open . ; sleep 1") (async-shell-command akan ditambahkan &setelahnya sleep 1; toh, shell masih akan menunggu proses latar belakang &selesai.)

gholk
sumber