PATH i exec-ścieżka ustawiona, ale emacs nie znajduje pliku wykonywalnego

Mój .emacs zawiera

(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 jest gdzie latex / pdflatex/.. znajdują się. /opt / local / bin / jest miejscem, gdzie można znaleźć gs.

A jednak kiedy uruchamiam preview-at-point, który najwyraźniej potrzebuje zarówno lateksu, jak i gs, dostaję

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

Co oznacza, że Lateks można znaleźć w porządku, ale nie gs.

Nie jestem pewien, czy ustawienie exec-path jest konieczne, być może PATH wystarczy, ale ustawiłem to jako miarę debugowania.

Dlaczego emacs nie może znaleźć gs mimo, że katalog, w którym się znajduje, znajduje się zarówno w ścieżce, jak i w ścieżce exec?

Author: Calaf, 2011-12-22

4 answers

Jeśli ustawiasz $PATH wewnątrz Emacsa, możesz być na OS X. aplikacje GUI nie są uruchamiane przez powłokę, więc widzą różne zmienne środowiskowe.

Oto sztuczka, której używam, aby upewnić się, że $PATH wewnątrz Emacsa jest ten sam, który widzę, jeśli odpalę terminal ( ale patrz "update" poniżej):

(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))))

Następnie po prostu wywołaj funkcję set-exec-path-from-shell-PATH, być może z pliku init Emacsa. Trzymam ten kod na GitHubie, BTW.

Update: ten kod ma teraz została ulepszona i opublikowana jako biblioteka elisp o nazwie exec-path-from-shell ; Pakiety instalowalne są dostępne w MELPA.

 60
Author: sanityinc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-24 01:29:55

Spróbuj zastąpić drugi wiersz tym:

(setq exec-path (append exec-path '("/usr/texbin" "/opt/local/bin")))
 9
Author: huaiyuan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-22 17:05:55

Napotkałem podobny problem, ale z poprawną ścieżką, w tym trailing :. Okazało się, że brakuje wewnętrznego programu Emacs shell, co skutkowało poszukiwaniem programu: brak takiego pliku lub wiadomości katalogu. Fixed with

(setq shell-file-name "bash").
 1
Author: Hanz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-23 17:45:22

Wygląda na to, że brakuje separatora ścieżki : na końcu łańcucha ścieżki.

 -3
Author: event_jr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-22 16:41:10