2011-08-03 40 views
7

Tôi đang cố gắng tạo tệp cấu hình Emacs được viết cho OS X hoạt động trên Ubuntu. Tôi có dòng này:Tìm thư mục trang web của Emacs

(add-to-list 'load-path "/usr/local/Cellar/emacs/23.3/share/emacs/site-lisp/w3m") 

Nó được sử dụng để tải emacs-w3m. Trên OS X, tôi đã cài đặt Emacs bằng Homebrew, do đó nó nằm trong thư mục /usr/local/Cellar/.The trang web-lisp trên Ubuntu ở một nơi khác. Làm thế nào tôi có thể viết dòng này theo cách sẽ hoạt động trên cả hai hệ điều hành? Có một hàm Emacs Lisp để lấy thư mục site-lisp không?

Trả lời

7

Không, không có cách nào. Thư mục site-lisp là một quy ước và chỉ tồn tại sự tồn tại của nó chứ không phải đường dẫn của nó được thỏa thuận.

Hoặc bạn thiết lập một liên kết tượng trưng trên Mac/Ubuntu hoặc bạn sử dụng một hệ thống chuyển đổi:

(defconst my-lisp-dir (cond 
    ((equal system-type 'gnu/linux) "/usr/share/emacs/site-lisp/") 
    ((equal system-type 'darwin) (concat "/usr/local/Cellar/emacs/" (number-to-string emacs-major-version) "." (number-to-string emacs-minor-version) "/share/emacs/site-lisp/")) 
    (t (concat "/usr/local/emacs/site-lisp/"))) 

và sau đó

(add-to-list 'load-path (concat my-lisp-dir "w3m")) 
+0

Điều này có vẻ như là tốt nhất mà Emacs Lisp có thể làm cho vấn đề này. – hekevintran

+0

Hoặc để có giải pháp tổng quát hơn, bạn có thể lặp qua 'đường dẫn tải' hiện tại của mình và tìm các thư mục con có tên' w3m' rồi thêm tất cả vào đường dẫn tải. Tuy nhiên, tôi không nghĩ điều này thực sự cần thiết. Không 'w3m' cài đặt tự động tải của riêng mình? Nó nên! – tripleee

-1

Nếu bạn đang sử dụng Emacs 23 bạn có thể sử dụng như sau:

(concat user-emacs-directory 
     (convert-standard-filename "site-lisp/")) 

Tuy nhiên, điều này chỉ sẽ tìm thấy "mặc định" vị trí cho file lisp sử dụng cài đặt sẵn.

+0

Đó là thư mục _user_ chứ không phải thư mục hệ thống. –

+0

Có, bạn là chính xác. – zev

1

Tôi cố gắng này trên Windows Emacs của tôi (23.4.1) và Mac OS Emacs (23.4.1) cho tiện ích bổ sung khác của tôi và nó hoạt động.

(concat (car load-path) "/w3m") 

Thông thường, đường dẫn tải có trang web lisp như mục đầu tiên trong danh sách.

+1

Tôi sẽ không coi đó là đáng tin cậy. – phils

1

Tạo một tệp subdirs.el trong thư mục trang web của bạn mà không (add-to-list 'load-path (expand-file-name "w3m" (file-name-directory load-file-name))). Điều này nói rằng, bạn cũng có thể chỉ cần đặt thư mục w3m của bạn bất cứ nơi nào bạn thích, vì vậy bạn không phải lo lắng về nơi là trang web lisp nhưng chỉ có w3m ở đâu.

1

site-lisp được thiết kế để cung cấp thư viện cho tất cả người dùng trên một hệ thống nhất định và do đó sẽ được quản lý trên cơ sở mỗi hệ thống.

Nếu bạn chỉ cố gắng quản lý cấu hình của riêng bạn một cách nhất quán trên các máy chủ, đừng đặt mọi thứ vào site-lisp; đặt chúng dưới một thư mục con của thư mục người dùng của bạn, chẳng hạn như ~/.emacs.d/lisp/ và sau đó sử dụng:

(add-to-list 'load-path (expand-file-name "~/.emacs.d/lisp/w3m")) 

Nếu bạn muốn truy vấn load-path của bạn cho một thư mục "trang web lisp" (hoặc những người mà trông giống như một) , bạn có thể làm điều này:

(remove-if-not 
(lambda (path) (string-match-p "/site-lisp\\'" path)) 
load-path) 

(nhưng câu trả lời Stefan là tốt nhất nếu bạn thực sự muốn giữ cho mọi thứ trong site-lisp)

1

Đối với một số lý do (xem dưới đây) tôi muốn thiết lập package-user-dir (ELPA) đến thư mục trang web-lisp .

Nó nên có thể suy ra các trang web lisp thư mục từ exec-directory biến tiêu chuẩn:

(setq site-lisp-directory (concat exec-directory "../site-lisp") 

Ít nhất với precompiled Emacs-phiên bản từ GNU làm việc này (thư mục đã tồn tại).Cuối cùng tạo ra các thư mục:

(unless (file-accessible-directory-p site-lisp-directory) 
    (make-directory site-lisp-directory)) 

động lực của tôi là package-user-dir theo mặc định là %USERPROFILE%/.emacs.d/elpa/, mà dường như là một vị trí khá lạ. Các gói sẽ được cài đặt trên toàn hệ thống cho tất cả người dùng. Ngoài ra ~/.emacs.d có cài đặt máy chủ, tự động lưu danh sách và sao lưu. Những gì có gói để làm ở đó khi Emacs có một trang web-lisp-thư mục chuyên dụng có thể yêu cầu.

Tuy nhiên, "sự cố" thực sự là precompiled Emacs 24.3 cho Windows. Nó không yêu cầu cài đặt và do đó có thể chạy một cách ổn định, giống như từ một cây gậy. IMHO ELPA sau đó sẽ sử dụng thư mục-lisp-directory của nó, để các gói được cài đặt một cách hợp lý.

Các vấn đề liên quan