PATH и exec-path установлены, но emacs не находит исполняемый файл - PullRequest
33 голосов
/ 22 декабря 2011

Мой .emacs содержит

(setenv "PATH" (concat ".:/usr/texbin:/opt/local/bin" (getenv "PATH")))
(setq exec-path (append exec-path '(".:/usr/texbin:/opt/local/bin")))

(add-to-list 'load-path "/usr/local/share/emacs/site-lisp")
(require 'tex-site)
(load "auctex.el" nil t t)
(load "preview-latex.el" nil t t)

/ usr / texbin - это место, где расположены latex / pdflatex / .. / opt / local / bin / - это место, где можно найти gs.

И все же, когда я запускаю предварительный просмотр в точке, которой, очевидно, нужны и латекс, и gs, я получаю

Preview-DviPS finished at Thu Dec 22 11:25:46
DviPS sentinel: Searching for program: No such file or directory, gs

, что означает, что латекс может быть найден в порядке, но не GS.

Я не уверен, нужна ли установка exec-path, возможно, достаточно PATH, но я установил его в качестве меры отладки.

Почему emacs не может найти gs, даже если каталог, в котором он находится, находится как в PATH, так и в exec-path?

Ответы [ 4 ]

62 голосов
/ 23 декабря 2011

Если вы устанавливаете $PATH внутри своего Emacs, вы вполне можете быть в OS X. Приложения с графическим интерфейсом не запускаются через вашу оболочку, поэтому они видят разные переменные окружения.

Вот трюк, который я использую, чтобы убедиться, что $PATH внутри Emacs - тот же, который я вижу, если я запускаю терминал (, но смотри "обновление" ниже ):

(defun set-exec-path-from-shell-PATH ()
  "Set up Emacs' `exec-path' and PATH environment variable to match that used by the user's shell.

This is particularly useful under Mac OSX, where GUI apps are not started from a shell."
  (interactive)
  (let ((path-from-shell (replace-regexp-in-string "[ \t\n]*$" "" (shell-command-to-string "$SHELL --login -i -c 'echo $PATH'"))))
    (setenv "PATH" path-from-shell)
    (setq exec-path (split-string path-from-shell path-separator))))

Затем просто вызовите функцию set-exec-path-from-shell-PATH, возможно, из вашего файла инициализации Emacs. Я держу этот код на github , кстати.

Обновление: этот код был улучшен и опубликован в виде библиотеки elisp с именем exec-path-from-shell ; Устанавливаемые пакеты доступны в MELPA .

11 голосов
/ 22 декабря 2011

Попробуйте заменить вторую строку следующим образом:

(setq exec-path (append exec-path '("/usr/texbin" "/opt/local/bin")))
1 голос
/ 23 марта 2015

Я столкнулся с подобной проблемой, но с правильным PATH, включая трейлинг ´: ´. Оказалось, что отсутствует внутренняя программа оболочки emacs, что привело к сообщению «Поиск программы: такого файла или каталога нет». Исправлено с

(setq shell-file-name "bash").
0 голосов
/ 22 декабря 2011

Похоже, вам не хватает разделителя пути : в конце строки пути.

...