Jak znaleźć ścieżkę do pliku wykonywalnego za pomocą Emacsa Lispa?

16

Mój obecny przypadek użycia polega na ustaleniu, gdzie znajduje się Caskplik wykonywalny (można go zainstalować w co najmniej dwóch miejscach, a problem jest z tym związany).

Muszę wymagać beczki w ten sposób:

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

Ale muszę znaleźć właściwą ścieżkę do tego cask.eli, o ile wiem, najłatwiejszym sposobem na to jest zlokalizowanie pliku wykonywalnego.

W jaki sposób mogę to zrobić?

Trevoke
źródło
6
Czy executable-findtego szukasz?
legoscia
2
Czy chcesz plik wykonywalny lub plik biblioteki Lisp? Cask ma jedno i drugie.
shosti
Wygląda na to, że pytasz o dwie różne rzeczy. Czy chcesz zlokalizować plik wykonywalny beczki? Lub plik biblioteki cask.el (który nie jest plikiem wykonywalnym)? Proszę odpowiednio zmienić swoje pytanie i tytuł.
Malabarba

Odpowiedzi:

17

Odpowiedź @ Sigma to dobry początek, ale nie filtruje według wykonalności, ani nie dopuszcza dodatkowych sufiksów. Na przykład w asystemie Windows uruchamianie może wywoływać a.exe, jeśli jest to na twojej drodze.

Więc użyj executable-find; oto definicja (wzięta ze źródeł Emacsa), jeśli jesteś ciekawy:

(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))
Łaskawy
źródło
3

Nie jestem pewien, czy rozumiem całkowicie (sam nie używam Cask), ale czy poniższe postawy postawią cię na dobrej drodze?

(locate-file "cask" exec-path)

To wydaje się być odpowiedzią na twoje ogólne pytanie.

Sigma
źródło
3
W przypadku plików wykonywalnych powinieneś raczej użyć executable-find.
lunaryorn,
0

Ścieżki do pliku wykonywalnego z częściowym prefiksem:

(locate-file-completion-table
   exec-path
   exec-suffixes
   ;; here is prefix like "emacs" gives "emacs21"/"emacs22"/"emacs-nox"
   (thing-at-point 'filename)
   'identity
   t)
gavenkoa
źródło