web-dev-qa-db-fra.com

PATH et exec-path set, mais emacs ne trouve pas l'exécutable

Mon .emacs contient

(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 est où latex/pdflatex/.. sont situés ./opt/local/bin/est où gs peut être trouvé.

Et pourtant, quand je lance preview-at-point, qui nécessite apparemment du latex et du gs, je reçois

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

ce qui signifie que le latex pourrait être trouvé bien, mais pas gs.

Je ne suis pas sûr que le paramétrage de exec-path soit nécessaire, peut-être que PATH est suffisant, mais je l'ai défini comme une mesure de débogage.

Pourquoi emacs ne peut-il pas trouver gs alors que son répertoire est à la fois dans PATH et dans exec-path?

32
Calaf

Si vous définissez $PATH dans votre Emacs, vous êtes peut-être sous OS X. Les applications à interface graphique ne démarrant pas via votre shell, elles voient donc différentes variables d'environnement.

Voici une astuce que j'utilise pour m'assurer que le $PATH à l'intérieur d'Emacs est le même que celui que je vois si je lance un terminal (mais voir "update" ci-dessous):

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

Ensuite, appelez simplement la fonction set-exec-path-from-Shell-PATH, peut-être à partir de votre fichier init Emacs. Je garde ce code sur github , BTW.

Update: ce code a maintenant été amélioré et publié sous la forme d'une bibliothèque elisp appelée exec-path-from-Shell ; les paquets installables sont disponibles dans MELPA .

61
sanityinc

Essayez de remplacer la deuxième ligne par ceci:

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

Je rencontre un problème similaire, mais avec un PATH correct, y compris la traînée ´: ´. Il s’est avéré que le programme Shell interne d’Emacs était manquant, ce qui a entraîné un message «Recherche du programme: Aucun fichier ou répertoire». Fixé avec 

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