วิธีการที่เหมาะสมในการให้โปรแกรมภายนอกพร้อมกับแพคเกจ?


12

ฉันรักษาชุดของ elisp จำนวนมาก (เช่น codesearch, emacs-ycmd, traad) ที่จะได้รับประโยชน์จากความสามารถในการติดตั้งโปรแกรมภายนอกที่พวกเขาใช้ประหยัดเวลาและความพยายามสำหรับผู้ใช้บางคน ตัวอย่างเช่นด้วย codesearch.el มันจะเป็นการดีที่จะสามารถดาวน์โหลดรวบรวมและติดตั้งเครื่องมือ codesearch (เขียนในไปไม่ใช่ elisp) สำหรับผู้ใช้ สิ่งนี้จะลบสิ่งกีดขวางอย่างน้อยหนึ่งข้อสำหรับการใช้แพ็คเกจ

มี "แนวปฏิบัติที่ดีที่สุด" สำหรับการทำเช่นนี้หรือไม่? ตัวอย่างเช่นฉันควรวางโปรแกรมภายนอกไว้ที่ไหน

หากคุณไม่มีคำแนะนำโดยตรงคุณสามารถส่งต่อฉันไปยังแพ็คเกจใด ๆ ที่ทำสิ่งนี้ได้ (และโดยพื้นฐานแล้วมันทำได้ดีหรือไม่)


1
ฉันเกรงว่ามันอาจจะอยู่ระหว่างยากและเป็นไปไม่ได้เลยเพราะคุณไม่มีการควบคุมว่า Emacs OS ของผู้ใช้ใช้ Linux, Windows หรือ Mac OS เป็น bootloader ;-) หรือไม่
mbork

2
ฉันเกรงว่าจะเป็นการดีกว่าที่จะแยกโปรแกรมภายนอกออกจากแพ็คเกจ Emacs เพื่อความยืดหยุ่นสูงสุด วิธีการจัดเตรียมซอฟต์แวร์ภายนอกด้วยแพ็คเกจ Emacs นั้นทำงานได้ดีที่สุดสำหรับสิ่งต่าง ๆ เช่นไฟล์ Ruby / Python / TeX / ... ที่ถูกตีความ วิธีที่ตรงข้ามกับการให้รหัส Emacs Lisp กับแพ็คเกจที่ติดตั้งผ่านตัวจัดการแพคเกจของระบบของคุณ (เช่น mu และ notmuch do) นั้นมีความยืดหยุ่นน้อยลงเพราะคุณไม่มี autoloads
wasamasa

ดูเหมือนว่าคุณทั้งสองจะพูดถูก ตัวอย่างเดียวที่ฉันพบของแพ็คเกจ emacs ที่มีการอ้างอิงภายนอกคือ jedi ซึ่งรวมสคริปต์ python บางตัวไว้ในแพ็คเกจ elpa
abingham

นี่เป็นสิ่งที่เราจะสามารถทำใน Emacs 25 ด้วยการโหลดแบบไดนามิกหรือไม่
wdkrnls

คำตอบ:


3

ไม่มี "แนวปฏิบัติที่ดีที่สุด" สำหรับสิ่งนั้นไม่ใช่ หรือการสนับสนุนใด ๆ ที่มีอยู่สำหรับมัน ฉันคิดว่าถ้ามันถูกติดตั้งโดยเฉพาะสำหรับแพคเกจ Foo แล้วสถานที่ที่จะติดตั้งนั้นจะอยู่ในไดเรกทอรีของแพ็คเกจ Foo

สำหรับวิธีการทำนั้นการติดตั้งแพ็กเกจ Elisp ของคุณผ่านทาง ELPA นั้นคุณอาจต้องการลองเพิ่มไฟล์ Elisp หลักของคุณดังนี้:

(eval-when-compile (call-process "make"))

จากนั้นให้ Makefile ที่เหมาะสม แน่นอนว่าเพื่อให้ทำงานในแพลตฟอร์ม "ส่วนใหญ่" คุณอาจต้องการบางสิ่งที่ซับซ้อนกว่านี้เล็กน้อย


1

คุณอาจต้องการจัดทำสูตรel-getสำหรับการติดตั้งแพ็คเกจของคุณ

ดูมาตรา 9 "การเขียนสูตร" ในไฟล์ข้อมูล

:build/system-typeสถานที่อาจเป็นที่สนใจโดยเฉพาะอย่างยิ่งถ้าคุณมีความต้องการตัวแปรข้ามแพลตฟอร์มที่แตกต่างกัน ดูส่วนที่ 9.5 "สร้าง" เพื่อดูรายละเอียด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.