จะสร้างและเปิดใช้งาน autoloads สำหรับแพ็คเกจท้องถิ่นได้อย่างไร


9

เป็นที่ชัดเจนว่าแพคเกจท้องถิ่น / กำหนดเอง / ส่วนบุคคลไม่ควรมีการเปิดตัวอย่างเป็นทางการและมันจะโง่หากได้รับประโยชน์จากการสนับสนุนการจัดการแพคเกจในตัว ฉันสงสัยว่าจะสร้างและเปิดใช้งาน autoloads สำหรับแพ็คเกจท้องถิ่นได้อย่างไร ซึ่งคล้ายกับpackage.elแพคเกจที่ติดตั้งจาก ELPA เพื่อหลีกเลี่ยงการสร้างล้อใหม่มีวิธีที่จะ "เสแสร้ง" ที่ไดเรกทอรีท้องถิ่นบางรายการ (ที่มีไดเรกทอรีย่อยแต่ละแห่งซึ่งเป็นแพคเกจท้องถิ่น / กำหนดเอง / ส่วนตัว) เป็น ELPA หรือไม่ ฉันยังเปิดให้el-getหากสถานการณ์ดังกล่าวสามารถได้รับการสนับสนุนผ่านเช่นสูตรอาหารที่กำหนดเอง

ฉันแน่ใจว่างานนั้นค่อนข้างธรรมดาและใครก็ตามที่ใช้ Emac ในระดับสูงก็มาถึงจุดนั้นไม่ช้าก็เร็ว ใครช่วยแบ่งปันประสบการณ์ของพวกเขาในสาขานี้?


3
update-directory-autoloadsสามารถใช้ได้อย่างอิสระจากผู้จัดการแพ็คเกจ
npostavs

@npostavs ฉันรู้ แต่มันไม่เวียนเกิดและไม่ใช่โซลูชันที่ครอบคลุมในกรณีนี้ แน่นอนมันจะไม่เพียงพอและฉันจะต้องห่อมันในการดำเนินการของฉันเอง
Alexander Shukaev

1. คุณสามารถระบุรายชื่อ dirs (เช่น dir และผู้สืบทอด) ให้update-directory-autoloadsกับเพื่อทำให้เป็นแบบเรียกซ้ำ 2. คุณสามารถใช้update-file-autoloadsสำหรับไฟล์ทุกไฟล์ที่คุณสนใจไม่ว่าจะอยู่ในไดเรกทอรีใด
Drew

FYI: package.elไม่สามารถเรียกซ้ำ (เช่นไม่รองรับแพ็คเกจที่มีแหล่งข้อมูลในไดเรกทอรีย่อย)
npostavs

ฉันตั้งค่า MELPA ในเครื่องบน Linux ฉันไม่มีทางออกที่ดีสำหรับ windows ฉันหวังว่า emacs จะสนับสนุนสิ่งประเภทนี้นอกกรอบ อาจจะคุ้มค่าในการตรวจสอบแพ็กเกจการใช้งานเพื่อดูว่ามันสามารถ
eflanigan00

คำตอบ:


7

โซลูชันที่ถูกต้อง (IMO) คือการใช้ตัวจัดการแพ็คเกจซึ่งมีการสนับสนุนอย่างชัดเจนสำหรับกรณีการใช้งานนี้ นี่จะเป็นstraight.elซึ่งฉันเขียนเพื่อจุดประสงค์นี้

คุณสามารถอ่านเอกสารอย่างละเอียดรวมถึงการเปรียบเทียบกับผู้จัดการแพ็คเกจอื่น ๆ ในREADMEดังนั้นฉันจะดำเนินการตามวิธีที่คุณสามารถใช้straight.elเพื่อแก้ไขปัญหาเฉพาะของคุณ

  1. ~/.emacs.d/straight/repos/<my-repo>วางพื้นที่เก็บข้อมูลของคุณได้ใน
  2. โหลดโดยใช้

    (straight-use-package '(<my-package> :local-repo "<my-repo>"))
    
  3. คุณทำเสร็จแล้ว เมื่อใดก็ตามที่คุณทำการเปลี่ยนแปลงซอร์สโค้ดการสร้าง autoload และการคอมไพล์ไบต์จะถูกทำซ้ำ (เมื่อเริ่มต้น Emacs ถัดไป) คุณยังได้รับสิ่งต่าง ๆ เช่นการจัดการการพึ่งพาระบบควบคุมเวอร์ชันอัตโนมัติและอื่น ๆ ได้ฟรี

  4. เมื่อ (ถ้า) คุณต้องการเผยแพร่แพ็คเกจเพียงแค่กดที่ใดที่หนึ่งแล้วปรับเปลี่ยนสูตรเพื่อให้ชี้ไปยังที่เก็บ Git นั้น
  5. นอกจากนี้คุณยังสามารถใช้straight.elกับuse-packageหากคุณต้องการ (มันเป็นเพียงน้ำตาลไวยากรณ์ส่วนใหญ่)

3

ฉันทำสิ่งต่อไปนี้บน Linux:

ฉันตั้งค่าพื้นที่เก็บข้อมูล Melpa ในพื้นที่โดยการโคลน Melpa

ฉันแก้ไขสูตรอาหารที่ฉันต้องการให้ชี้ไปที่แพ็คเกจท้องถิ่นของฉัน ต่อไปนี้คือlocal-melpa/recipies/ace-window

(ace-window
  :url "/home/my_home/.emacs.d/packages/ace-window/"
  :fetcher git)

จากนั้นพิมพ์ local-mepla make allหรือmake recipies/ace-windowเพื่อสร้างแพ็กเกจlocal-melpa/packages

จากนั้นmake packages/archive-contentsจะเติมรายการของแพคเกจ

จากนั้นใช้ในการติดตามเพื่อบอก emacs ให้ใช้ Melpa ในพื้นที่ของฉัน

(setq package-archives '(("local-melpa" . "~/.emacs.d/packages/local-melpa/packages/")))

ฉันไม่ได้คิดวิธีการทำงานmakeบน windows แต่ฉันสามารถสร้างแพ็คเกจในlocal-melpaLinux และคัดลอกไปยัง windows และ emacs เข้าใจและติดตั้งแพ็คเกจได้อย่างถูกต้อง

ประโยชน์ของสิ่งนี้คือฉันสามารถรีเซ็ตได้ตลอดเวลาที่ฉันต้องการโดยลบ~/.emacs.d/elpa/*ไดเรกทอรีของฉันและติดตั้งการปรับปรุงที่กำหนดเองไปยังแพ็คเกจใด ๆ


บางทีเควลปาก็น่าสนใจเช่นกัน?
npostavs

ฉันคิดว่าคุณเป็น npostavs ที่ถูกต้อง ฉันต้องนั่งลงและดูมัน
eflanigan00

2

หากคุณเปลี่ยนแพ็กเกจที่ติดตั้งไว้แล้วด้วยเวอร์ชันอื่นและที่คุณขาดหายไปคือไฟล์ autoloads คุณสามารถใช้ package-generate-autoloads เพื่อสร้างมันได้:

(package-generate-autoloads "async" "~/.emacs.d/elpa/async-1.9.3/")

ฉันพบว่าง่ายขึ้นแล้วใช้ update-directory-autotools เมื่อฉันต้องการลดระดับแพ็คเกจเป็นรุ่นก่อนหน้า

ที่จริงฉันคิดว่าฉันยังไม่ได้ตอบคำถามของคุณ ฉันจะทิ้งคำตอบไว้ที่นี่ในขณะนี้ แต่คำตอบของฉันมีความเกี่ยวข้องมากขึ้นที่นี่: /programming/26348561/how-to-generate-autoloads-for-elpa-packages/50100170

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