Bagaimana saya bisa menemukan jalur ke executable dengan Emacs Lisp?


16

Kasus penggunaan saya saat ini adalah untuk menemukan di mana Caskexecutable (dapat diinstal di setidaknya dua tempat, dan ada masalah terbuka tentang ini).

Saya perlu meminta tong dengan cara ini:

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

Tapi saya perlu menemukan jalan yang benar untuk itu cask.el, dan sejauh yang saya tahu, cara termudah untuk melakukannya adalah dengan menemukan executable.

Bagaimana saya bisa melakukan ini?


6
Apakah executable-findyang Anda cari?
legoscia

2
Apakah Anda ingin file library yang dapat dieksekusi atau lisp? Tong memiliki keduanya.
shosti

Sepertinya Anda menanyakan dua hal berbeda. Apakah Anda ingin menemukan tong yang dapat dieksekusi? Atau file library cask.el (yang tidak dapat dieksekusi)? Harap ubah pertanyaan dan judul Anda sesuai.
Malabarba

Jawaban:


17

Jawaban @ Sigma adalah awal yang baik, tetapi tidak difilter berdasarkan kemampuan eksekusi, juga tidak memungkinkan sufiks tambahan. Di windows, misalnya, menjalankan adapat memanggil a.exe, jika itu yang ada di jalur Anda.

Jadi gunakan executable-find; inilah definisi (diambil dari sumber Emacs), jika Anda penasaran:

(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

Tidak yakin saya mengerti sepenuhnya (saya sendiri tidak menggunakan Tong), tetapi apakah yang berikut akan menempatkan Anda di jalur yang benar?

(locate-file "cask" exec-path)

Itu tampaknya menjadi jawaban untuk pertanyaan umum Anda.


3
Khusus untuk executable sebaiknya Anda gunakan executable-find.
lunaryorn

0

Paths ke executable pada awalan parsial:

(locate-file-completion-table
   exec-path
   exec-suffixes
   ;; here is prefix like "emacs" gives "emacs21"/"emacs22"/"emacs-nox"
   (thing-at-point 'filename)
   'identity
   t)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.