2011-12-22 19 views
31

emacs My chứaPATH và exec-con đường thiết lập, nhưng emacs không tìm thấy thi

(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 là nơi mủ/pdflatex/.. được đặt. /opt/local/bin/là nơi gs có thể được tìm thấy.

Vậy mà khi tôi chạy preview-at-point, mà rõ ràng là cần cả hai mủ và gs, tôi nhận được

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

có nghĩa là mủ có thể được tìm thấy tất cả các quyền, nhưng không gs.

Tôi không chắc liệu thiết lập đường dẫn exec là cần thiết, có lẽ PATH là đủ, nhưng tôi đã đặt nó như là một biện pháp gỡ lỗi.

Tại sao các emacs không tìm thấy gs mặc dù thư mục nằm trong cả PATH và đường dẫn exec?

Trả lời

56

Nếu bạn đang thiết $PATH bên trong Emacs của bạn, bạn cũng có thể vào các ứng dụng GUI OS X. không được bắt đầu qua shell của bạn, vì vậy họ nhìn thấy khác nhau biến môi trường.

Dưới đây là một thủ thuật mà tôi sử dụng để đảm bảo $PATH bên trong Emacs là một cùng tôi thấy nếu tôi cháy lên một thiết bị đầu cuối (nhưng thấy "cập nhật" bên dưới):

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

Sau đó, chỉ cần gọi set-exec-path-from-shell-PATH chức năng, có lẽ từ tập tin init Emacs của bạn. Tôi giữ mã đó on github, BTW.

Cập nhật: mã này hiện đã được cải tiến và xuất bản dưới dạng thư viện elisp có tên là exec-path-from-shell; các gói cài đặt có sẵn trong Marmalade và Melpa.

+0

Tôi thực sự trên OSX, và tải PATH và exec-đường dẫn từ vỏ sẽ rất tốt đẹp. Tuy nhiên, 'string-rtrim' không được tìm thấy (bởi cả emacs 22 và 23). Đó có phải là chức năng của riêng bạn? – Calaf

+0

Ah, vâng, đó là chức năng của riêng tôi: Tôi sẽ chỉnh sửa câu trả lời để sửa lỗi này. – sanityinc

+0

Chúc mừng .. Nếu bạn có cơ hội, vui lòng cập nhật câu trả lời của bạn. Nó sẽ rất tiện dụng cho người dùng emacs/Mac. Như bạn đã xác định, câu hỏi thực sự có liên quan chủ yếu đối với người dùng Mac, vì vậy nếu bạn có đủ điểm, hãy di chuyển queston đến apple.stackexchange.com. – Calaf

-3

Dường như bạn đang thiếu dấu tách đường dẫn : ở cuối chuỗi đường dẫn của bạn.

+0

IOW, sử dụng ".:/Usr/texbin:/opt/local/bin:" (lưu ý ':' ở cuối). – Drew

+0

Sau khi thêm dấu tách đường dẫn chấm dứt (và khởi động lại các emacs), tôi vẫn gặp lỗi tương tự. – Calaf

+0

Không! Chính xác là không làm điều này. Điều này là dành cho shell PATH không phải cho biến exec-path mà chỉ là một danh sách. – Thomas

8

Hãy thử thay thế dòng thứ hai với điều này:

(setq exec-path (append exec-path '("/usr/texbin" "/opt/local/bin"))) 
+1

Điều đó giải quyết vấn đề 'gs', nhưng hiện tại có một vấn đề khác, có vẻ như liên quan đến quyền của tệp được tạo ra bởi gs. Hãy để tôi hỏi riêng câu hỏi đó. – Calaf

1

Tôi gặp vấn đề tương tự, nhưng với PATH chính xác, bao gồm cả dấu ´: ´. Hóa ra chương trình shell emacs nội bộ bị thiếu, dẫn đến một ´Tìm kiếm chương trình: Không có tập tin hoặc thư mục nào. Đã sửa lỗi với

(setq shell-file-name "bash").