Подтвердить что ты не робот

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-пути?

4b9b3361

Ответ 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

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