ฉันจะค้นหาพา ธ ไปยังโปรแกรมที่เรียกใช้งานได้ด้วย Emacs Lisp ได้อย่างไร


16

กรณีการใช้งานปัจจุบันของฉันคือการค้นหาว่าCaskไฟล์ปฏิบัติการอยู่ที่ไหน(สามารถติดตั้งได้อย่างน้อยสองแห่งและมีปัญหาเกี่ยวกับเรื่องนี้)

ฉันต้องการถังด้วยวิธีนี้:

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

แต่ฉันจำเป็นต้องค้นหาเส้นทางที่ถูกต้องไปยังที่cask.elและเท่าที่ฉันรู้วิธีที่ง่ายที่สุดที่จะทำคือการหาที่ปฏิบัติการ

ฉันจะทำสิ่งนี้ได้อย่างไร


6
คือexecutable-findสิ่งที่คุณกำลังมองหา?
legoscia

2
คุณต้องการไฟล์ไลบรารีที่สามารถเรียกใช้งานได้หรือ lisp หรือไม่? ถังมีทั้ง
shosti

ดูเหมือนว่าคุณกำลังถามสองสิ่งที่แตกต่างกัน คุณต้องการที่จะหาถังปฏิบัติการหรือไม่? หรือไฟล์ไลบรารี cask.el (ซึ่งไม่ใช่ไฟล์เรียกทำงาน)? กรุณาแก้ไขคำถามและชื่อของคุณตาม
Malabarba

คำตอบ:


17

@ คำตอบของซิกม่าเป็นการเริ่มต้นที่ดี แต่มันไม่ได้กรองโดยความสามารถในการปฏิบัติงานและไม่อนุญาตให้มีคำต่อท้ายเพิ่มเติม ตัวอย่างเช่นบน 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
สำหรับ executables executable-findเฉพาะคุณค่อนข้างควรใช้
Lunaryorn

0

พา ธ ไปยัง executable บนส่วนนำหน้าบางส่วน:

(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.