it-swarm.com.de

PATH und exec-path gesetzt, aber Emacs findet keine ausführbare Datei

Meine .emacs enthält

(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 ist der Ort, an dem sich latex/pdflatex/.. befindet.

Und wenn ich Preview-at-Point starte, was anscheinend sowohl Latex als auch gs benötigt, bekomme ich es

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

was bedeutet, dass Latex gut gefunden werden konnte, aber nicht gs.

Ich bin mir nicht sicher, ob das Setzen des Exec-Pfads notwendig ist, vielleicht reicht PATH aus, aber ich habe es als Debugging-Maßnahme festgelegt.

Warum kann emacs gs nicht finden, obwohl sich das Verzeichnis, in dem es sich befindet, sowohl in PATH als auch im exec-Pfad befindet?

32
Calaf

Wenn Sie $PATH in Ihren Emacs einstellen, befinden Sie sich möglicherweise auf OS X. GUI-Anwendungen werden nicht über Ihre Shell gestartet, so dass andere Umgebungsvariablen angezeigt werden.

Hier ist ein Trick, den ich verwende, um sicherzustellen, dass der $PATH in Emacs derselbe ist, den ich sehe, wenn ich ein Terminal hochfahre (aber siehe "update" unter):

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

Dann rufen Sie einfach die set-exec-path-from-Shell-PATH-Funktion auf, vielleicht aus Ihrer Emacs-Init-Datei. Ich behalte diesen Code auf github , BTW.

Update: Dieser Code wurde verbessert und als elisp-Bibliothek mit dem Namen exec-path-from-Shell veröffentlicht. installierbare Pakete sind in MELPA verfügbar.

61
sanityinc

Versuchen Sie, die zweite Zeile durch folgende zu ersetzen:

(setq exec-path (append exec-path '("/usr/texbin" "/opt/local/bin")))
9
huaiyuan

Ich bin auf ein ähnliches Problem gestoßen, aber mit einem korrekten PFAD, einschließlich des Nachlaufens von ´: ´. Es stellte sich heraus, dass das interne emacs-Shell-Programm fehlte, was zu einer "Suche nach Programm: Keine solche Datei oder ein solches Verzeichnis" führte. Festgelegt mit 

(setq Shell-file-name "bash").
1
Hanz