webdevqa.jp.net

PATHとexec-pathが設定されていますが、emacsが実行可能ファイルを見つけられません

私の.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は、latex/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で十分ですが、デバッグ手段として設定しました。

それが入っているディレクトリがPATHとexec-pathの両方にあるにもかかわらず、emacsがgsを見つけられないのはなぜですか?

35
Calaf

Emacs内で$PATHを設定している場合、OS Xを使用している可能性があります。GUIアプリケーションはシェル経由で起動されないため、異なる環境変数が表示されます。

Emacs内の$PATHが端末を起動した場合に表示されるものと同じであることを確認するために使用するトリックを以下に示します(しかし、以下の「更新」を参照してください)。

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

次に、単にset-exec-path-from-Shell-PATH関数を呼び出します。おそらくEmacsのinitファイルから呼び出します。私はそのコードを保持します githubで 、ところで。

更新:このコードは改善され、 exec-path-from-Shell と呼ばれるelispライブラリとして公開されました。インストール可能なパッケージは [〜#〜] melpa [〜#〜]にあります

62
sanityinc

2行目を次のように置き換えてみてください。

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

私は同様の問題にぶつかりましたが、末尾の ´:´を含む正しいPATHでした。内部のemacsシェルプログラムが見つからないことが判明し、「プログラムの検索:そのようなファイルまたはディレクトリはありません」というメッセージが表示されました。で修正

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