Làm cách nào tôi có thể tìm đường dẫn đến một tệp thực thi với Emacs Lisp?


16

Trường hợp sử dụng hiện tại của tôi là tìm nơi Caskthực thi (nó có thể được cài đặt ở ít nhất hai nơi và có một vấn đề mở về vấn đề này).

Tôi cần phải yêu cầu thùng theo cách này:

(require 'cask "~/.cask/cask.el")

Nhưng tôi cần tìm ra con đường chính xác cho điều đó cask.el, và theo như tôi biết, cách dễ nhất để làm điều đó là thông qua việc định vị tệp thực thi.

Tôi có thể làm cái này như thế nào?


6
executable-findnhững gì bạn đang tìm kiếm?
Legoscia

2
Bạn có muốn tập tin thư viện thực thi hoặc lisp? Cask có cả hai.
shosti

Có vẻ như bạn đang hỏi hai điều khác nhau. Bạn có muốn xác định vị trí thực thi thùng? Hoặc tệp thư viện cask.el (không phải là tệp thực thi)? Vui lòng sửa đổi câu hỏi và tiêu đề của bạn cho phù hợp.
Malabarba

Câu trả lời:


17

Câu trả lời của @ Sigma là một khởi đầu tốt, nhưng nó không lọc theo khả năng thực thi, cũng không cho phép thêm hậu tố. Trên các cửa sổ, ví dụ, chạy acó thể gọi a.exe, nếu đó là những gì trong đường dẫn của bạn.

Vì vậy, sử dụng executable-find; đây là định nghĩa (lấy từ nguồn của Emacs), nếu bạn tò mò:

(defun executable-find (command)
  "Search for COMMAND in `exec-path' and return the absolute file name.
Return nil if COMMAND is not found anywhere in `exec-path'."
  ;; Use 1 rather than file-executable-p to better match the behavior of
  ;; call-process.
  (locate-file command exec-path exec-suffixes 1))

3

Không chắc chắn tôi hiểu hoàn toàn (bản thân tôi không sử dụng Cask), nhưng liệu những điều sau đây có đưa bạn đi đúng hướng?

(locate-file "cask" exec-path)

Đó dường như là câu trả lời cho câu hỏi chung của bạn.


3
Đối với thực thi cụ thể, bạn nên sử dụng executable-find.
lunaryorn

0

Đường dẫn để thực thi trên tiền tố một phần:

(locate-file-completion-table
   exec-path
   exec-suffixes
   ;; here is prefix like "emacs" gives "emacs21"/"emacs22"/"emacs-nox"
   (thing-at-point 'filename)
   'identity
   t)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.