Emacs Lispで実行可能ファイルへのパスを見つけるにはどうすればよいですか?


16

私の現在のユースケースは、Cask実行可能ファイルがどこにあるかを見つけることです(少なくとも2箇所にインストールでき、これに関して未解決の問題があります)。

このようにキャスクを要求する必要があります。

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

しかし、それへの正しいパスを見つける必要がありcask.el、私が知る限り、それを行う最も簡単な方法は、実行可能ファイルを見つけることです。

これどうやってするの?


6
であるexecutable-findあなたが探しているもの?
レゴシア14

2
実行可能ファイルまたはlispライブラリファイルが必要ですか?Caskには両方があります。
shosti 14

2つの異なることを求めているようです。cask実行可能ファイルを探しますか?またはcask.elライブラリファイル(実行可能ファイルではありません)?それに応じて質問とタイトルを修正してください。
マラバルバ14

回答:


17

@Sigmaの答えは良い出発点ですが、実行可能性でフィルタリングしたり、追加のサフィックスを許可したりしません。たとえば、Windowsの場合、実行中にaを呼び出すことができa.exeます(パスに含まれている場合)。

使用しexecutable-findます。興味があるなら、ここに定義があります(Emacsのソースから取られています):

(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

私が完全に理解していることはわかりません(私はCaskを自分で使用していません)が、次はあなたを正しい軌道に乗せるでしょうか?

(locate-file "cask" exec-path)

それがあなたの一般的な質問に対する答えのようです。


3
実行可能ファイルには、特にを使用する必要がありますexecutable-find
lunaryorn

0

部分的なプレフィックスの実行可能ファイルへのパス:

(locate-file-completion-table
   exec-path
   exec-suffixes
   ;; here is prefix like "emacs" gives "emacs21"/"emacs22"/"emacs-nox"
   (thing-at-point 'filename)
   'identity
   t)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.