Я использую emacs 24.4.1 на человечности 15.04. Так или иначе xdg-откройте работу doesnot, если я выполняю ее от emacs. Например, если я работаю "xdg-открытый 1.pdf" или "gvfs-открытый 1.pdf", в eshell они не работают. В то же время, "проявите 1.pdf" работы отлично.
Предыдущие два ответа не работали на меня:
(setq process-connection-type nil)
повредился org-plot/gnuplot
setsid xdg-open ...
работавший некоторое время, но затем это остановилось по некоторым причинам.Теперь я использую setsid -w
, который, предположительно, делает setsid
ожидайте, пока названная программа не заканчивается.
Если кому-то был бы нужен он, я использую это с AUCTeX (и я нашел этот вопрос при попытке закрепить поведение AUCTeX на Arch Linux), и мой TeX-command-list
установлен на
(quote
(
;; ...
("View" "setsid -w xdg-open %s.pdf" TeX-run-command t t :help "Run Text viewer")
;; ...
)
Это, кажется, хорошо работает на данный момент...
Используя setsid xdg-open 1.pdf
работы для меня. Проблема, кажется, что gvfs-open
и xdg-open
возврат перед их детьми сделан, работая. Emacs мог бы уничтожить их терминал управления, когда это происходит, уничтожая детей, и останавливаясь evince
от открытия правильно. setsid
наборы новый терминал управления, который не закроет emacs.
Это может быть проблемой с использованием имуществ для коммуникации подпроцесса. Попытайтесь установить тип соединения процесса на ноль для использования каналов вместо этого.
В Вашем .emacs
;; Use pipes for subprocess communication
(setq process-connection-type nil)
я использую функции публикации от org режима и без этого изменения, ни один из сгенерированных файлов не открыт через xdg-открытый, несмотря ни на какие сообщения об ошибках.
xdg-открытая-разработка в синхронизирующем режиме: (shell-command "xdg-open .")
, но не в асинхронном режиме: (async-shell-command "xdg-open .")
.
кажется, что xdg-открытый дочерний процесс икры для открытия файла затем выходит. перед дочерним процессом открытый файл, xdg-открытый выход, таким образом выход оболочки, также. выход оболочки уничтожает весь дочерний процесс.
поэтому просто делают жизнь оболочки немного больше: (async-shell-command "xdg-open . ; sleep 1")
(асинхронная команда оболочки добавит &
после sleep 1
; так или иначе оболочка будет все еще ожидать фоновый процесс &
конец.)