如何使用Emacs Lisp找到可执行文件的路径?


16

我当前的用例是查找Cask可执行文件的位置(它可以安装在至少两个位置,并且存在一个与此相关的问题)。

我需要这样的酒桶:

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

但是我需要找到正确的路径cask.el,据我所知,最简单的方法是找到可执行文件。

我怎样才能做到这一点?


6
executable-find你在找什么?
legoscia 2014年

2
您需要可执行文件还是Lisp库文件?木桶兼有。
shosti

看来您在问两个不同的问题。您是否要找到cask可执行文件?还是cask.el库文件(不是可执行文件)?请相应地修改您的问题和标题。
马拉巴巴2014年

Answers:


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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.