Comment trouver le chemin vers un exécutable avec Emacs Lisp?

16

Mon cas d'utilisation actuel consiste à trouver où se trouve l' Caskexécutable (il peut être installé à au moins deux endroits, et il y a un problème à ce sujet).

J'ai besoin d'un fût de cette façon:

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

Mais je dois trouver le bon chemin pour cela cask.el, et pour autant que je sache, la façon la plus simple de le faire est de localiser l'exécutable.

Comment puis-je faire ceci?

Trevoke
la source
6
Est executable-findce que vous cherchez?
legoscia
2
Voulez-vous l'exécutable ou le fichier de bibliothèque lisp? Cask a les deux.
shosti
Il semble que vous demandiez deux choses différentes. Voulez-vous localiser l'exécutable de cask? Ou le fichier de bibliothèque cask.el (qui n'est pas un exécutable)? Veuillez modifier votre question et votre titre en conséquence.
Malabarba

Réponses:

17

@ La réponse de Sigma est un bon début, mais elle ne filtre pas par exécutabilité et ne permet pas de suffixes supplémentaires. Sur Windows, par exemple, l'exécution apeut invoquer a.exe, si c'est ce qui se trouve sur votre chemin.

Alors utilisez executable-find; voici la définition (tirée des sources d'Emacs), si vous êtes curieux:

(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))
Clément
la source
3

Je ne suis pas sûr de bien comprendre (je n'utilise pas Cask moi-même), mais est-ce que ce qui suit vous mettrait sur la bonne voie?

(locate-file "cask" exec-path)

Cela semble être la réponse à votre question générale.

Sigma
la source
3
Pour les exécutables en particulier, vous devriez plutôt utiliser executable-find.
lunaryorn
0

Chemins vers l'exécutable sur le préfixe partiel:

(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
la source