Wie finde ich den Pfad zu einer ausführbaren Datei mit Emacs Lisp?


16

Mein aktueller Anwendungsfall ist es, herauszufinden, wo sich die Caskausführbare Datei befindet (sie kann an mindestens zwei Stellen installiert werden, und es ist ein Problem offen).

Ich muss das Fass folgendermaßen anfordern:

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

Aber ich muss den richtigen Pfad dazu finden cask.el, und meines Wissens ist der einfachste Weg, dies zu tun, das Auffinden der ausführbaren Datei.

Wie kann ich das machen?


6
Ist , executable-findwas Sie suchen?
Legoscia

2
Möchten Sie die ausführbare Datei oder die Lisp-Bibliotheksdatei? Cask hat beides.
Shosti

Es sieht so aus, als würdest du zwei verschiedene Dinge fragen. Möchten Sie die ausführbare Datei des Fasses suchen? Oder die Bibliotheksdatei cask.el (die keine ausführbare Datei ist)? Bitte ändern Sie Ihre Frage und Ihren Titel entsprechend.
Malabarba

Antworten:


17

@ Sigmas Antwort ist ein guter Anfang, aber sie filtert nicht nach Ausführbarkeit und lässt keine zusätzlichen Suffixe zu. Unter Windows akann das Ausführen beispielsweise aufgerufen werden a.exe, wenn dies in Ihrem Pfad enthalten ist.

Also benutze executable-find; Hier ist die Definition (aus Emacs 'Quellen), wenn Sie neugierig sind:

(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

Sie sind sich nicht sicher, ob ich alles verstanden habe (ich verwende Cask nicht selbst), aber würden Sie mit den folgenden Informationen auf dem richtigen Weg sein?

(locate-file "cask" exec-path)

Das scheint die Antwort auf Ihre allgemeine Frage zu sein.


3
Für ausführbare Dateien sollten Sie eher verwenden executable-find.
Lunaryorn

0

Pfade zur ausführbaren Datei mit partiellem Präfix:

(locate-file-completion-table
   exec-path
   exec-suffixes
   ;; here is prefix like "emacs" gives "emacs21"/"emacs22"/"emacs-nox"
   (thing-at-point 'filename)
   'identity
   t)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.