PATH и exec-path, но emacs не находит исполняемый файл
My.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 находится там, где расположены латекс /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-пути?
Ответы
Ответ 1
Если вы устанавливаете $PATH
внутри своего Emacs, вы вполне можете быть в OS X. Приложения GUI не запускаются через вашу оболочку, поэтому они видят разные переменные среды.
Вот трюк, который я использую для обеспечения $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 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, BTW.
Обновление: теперь этот код был улучшен и опубликован как библиотека elisp под названием exec-path-from-shell; устанавливаемые пакеты доступны в Marmalade и Melpa.
Ответ 2
Попробуйте заменить вторую строку следующим образом:
(setq exec-path (append exec-path '("/usr/texbin" "/opt/local/bin")))
Ответ 3
Я столкнулся с подобной проблемой, но с правильным PATH, включая завершение ':'. Оказалось, что внутренняя программа оболочки emacs отсутствует, что приводит к поиску программы: нет такого файла или каталога.
Исправлено с помощью
(setq shell-file-name "bash").
Ответ 4
Кажется, вам не хватает разделителя путей :
в конце строки пути.