วิธีโหลดแพคเกจที่ติดตั้งไว้เพียงชุดย่อย


13

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

UPDATE

เพื่อชี้แจงฉันคุ้นเคยกับแนวคิดของการกลั่นกรองผ่าน. emacs ของฉันในการค้นหาแบบไบนารีเพื่อระบุรหัสที่ทำให้เกิดปัญหา ในสถานการณ์นี้ฉันรู้ว่าแพคเกจใดที่ทำให้เกิดปัญหาอยู่แล้ว สิ่งที่ฉันไม่รู้คือวิธีการใช้package-ระบบเพื่อโหลดแพ็กเกจเพียงไม่กี่อย่าง

(package-initialize)จะโหลดแพ็คเกจ แต่รวมถึงทุกอย่างใน.emacs.d/elpaไดเรกทอรีของฉัน package-load-listช่วยให้ผมระบุรุ่นเฉพาะของแพคเกจที่จะโหลดหรือแพคเกจโดยเฉพาะอย่างยิ่งอย่างชัดเจนยกเว้น ฉันต้องการย้อนกลับ - วิธีจัดหา Emacs ด้วยรายชื่อแพ็คเกจที่จะรวมโดยไม่ต้องโหลดแพ็คเกจอื่น ๆ ในระบบ elpa / package


หากคุณแยกปัญหาเป็นจำนวนแพ็คเกจที่ จำกัด คุณสามารถลองสร้างปัญหาโดยเริ่มจาก.emacsไฟล์เปล่า- ติดตั้งแต่ละแพ็คเกจหนึ่งต่อหนึ่งแล้วดูว่าปัญหายังคงมีอยู่หรือไม่ คุณอาจแปลกใจและหาแพ็คเกจที่ไม่น่าเล่นกับแพ็คเกจอื่น เมื่อคุณไปไกลที่สุดให้เขียนขั้นตอนที่คุณใช้ในการทำให้เกิดปัญหาอีกครั้งและส่งรายงานข้อผิดพลาดเช่นเริ่มจากEmacs -Qติดตั้งแพ็คเกจ A จากนั้นติดตั้งแพ็คเกจ B จากนั้นติดตั้งแพ็คเกจ C จากนั้นเปิด*Scratch*บัฟเฟอร์และพิมพ์ ...
กฎหมาย

สิ่งที่ลอว์ลิสต์พูด หากคุณไม่แน่ใจว่าคุณแคบลงอย่างสิ้นเชิงให้ใช้การค้นหาแบบไบนารี: ลบ 1/2 ของสิ่งที่คุณมีที่ repros ปัญหา (เช่นลบ 2 pkgs จาก 4) จากนั้นลบ 3/4, 7/8, ... การตัดรหัสที่จำเป็นในการทำซ้ำในแต่ละครั้ง คุณสามารถสับโค้ดของ pkg ที่กำหนดใน 1/2 เพื่อให้แคบลงไปจนถึงโค้ดที่จำเป็นในการทำซ้ำ คุณสามารถใช้คำสั่งcomment-regionเพื่อแสดงความคิดเห็น (หรือด้วยC-u, เพื่อยกเลิกหมายเหตุ) พื้นที่ของข้อความ
Drew

ฉันเข้าใจสิ่งนี้ในระดับรหัสหลอก ฉันไม่เข้าใจวิธีการใช้ชุดคำสั่งตระกูลคุณโหลดเฉพาะชุดย่อยของแพ็คเกจใน ไดเรกทอรี emacs.d / elpa
Tyler

ก่อนหน้านี้ผู้ดูแลระบุว่าฉันโหลดทุกอย่างด้วยแพ็คเกจเริ่มต้นและฉันไม่แน่ใจว่าจะหลีกเลี่ยงgithub.com/emacs-ess/ESS/issues/140
Tyler

1
package-load-list เป็นวิธีที่จะรวมแพคเกจอย่างชัดเจนเพียงลบallสัญลักษณ์
npostavs

คำตอบ:


10

package-load-listตัวแปรสามารถนำมาใช้เพื่อระบุอย่างแม่นยำซึ่งแพคเกจและรุ่นที่จะโหลด:

List of packages for `package-initialize' to load.
Each element in this list should be a list (NAME VERSION), or the
symbol `all'.  The symbol `all' says to load the latest installed
versions of all packages not specified by other elements.

For an element (NAME VERSION), NAME is a package name (a symbol).
VERSION should be t, a string, or nil.
If VERSION is t, the most recent version is activated.
If VERSION is a string, only that version is ever loaded.
 Any other version, even if newer, is silently ignored.
 Hence, the package is "held" at that version.
If VERSION is nil, the package is not loaded (it is "disabled").

สิ่งเดียวที่ต้องระวังคือค่าเริ่มต้นรวมถึงallถ้าคุณsetqแล้วคุณจะไม่เป็นไรเพราะที่เขียนทับค่าเดิมอย่างสมบูรณ์

(require 'package)
(setq package-load-list
      '((package1 "4.2")
        (package2 "0.5.1")))
(package-initialize)

4

ตัวเลือกที่จะทำงานได้ดีในบริบทที่นักพัฒนาที่ทำงานเกี่ยวกับการทำซ้ำข้อผิดพลาดอาจไม่มี (หรือต้องการ) การพึ่งพาที่ติดตั้งเหล่านั้นคือการใช้tryแพคเกจ ( https://melpa.org/#/try ) ผู้อื่นสามารถโหลดแพ็กเกจจากการจัดการแพ็กเกจโดยไม่ต้องแก้ไขการติดตั้งโลคัล

(package-install 'try)
(require 'try)

(try 'some-package)
(try 'some-other-package)

(steps (to reproduce) (the (problem)))

2

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

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

ใช้straight.elในการทำซ้ำข้อบกพร่อง

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

ในทางตรงกันข้ามการบูตสแตรปstraight.elจะไม่โหลดสิ่งใดนอกจากstraight.elตัวเอง (ที่เก็บสูตรเริ่มต้นถูกลงทะเบียน แต่จะไม่ถูกโคลนจนกว่าจะจำเป็น) ปกติแล้วคุณควรจะโหลดstraight.elโดยใช้ส่วนของbootstrapแต่เมื่อคุณอยู่emacs -Qนี่คือวิธีที่คุณสามารถเริ่มต้น straight.el:

M-x load-file RET ~/.emacs.d/straight/bootstrap.el RET

คุณสามารถทำได้จากบรรทัดคำสั่งโดยการสร้างนามแฝง:

$ emacs -Q -l ~/.emacs.d/straight/bootstrap.el

สมมติว่าคุณกำลังทำรายงานบั๊กสำหรับ Projectile ในการโหลด Projectile และการพึ่งพาทั้งหมดให้รัน:

M-x straight-use-package RET projectile RET

โปรดทราบว่าสิ่งนี้จะใช้การตรวจสอบ Projectile และการอ้างอิงทั้งหมดดังนั้นคุณควรจดบันทึกสิ่งเหล่านี้เพื่อสร้างรายงานบั๊กของคุณ


0

เมื่อคุณต้องการเพียงครั้งเดียว (เช่นลองและทดสอบสูตรการทำซ้ำข้อบกพร่อง) คุณมักจะหนีไปด้วย:

emacs -Q -l ~/.emacs.d/elpa/<pkg>-<vers>/<pkg>-autoloads.el

ฉันพูดว่า "มักจะ" เพราะมันจะไม่ให้ความสนใจกับการพึ่งพาดังนั้นในบางกรณีคุณจะต้องเพิ่ม-l ...args เหล่านั้นเพิ่มเติมเพื่อโหลดแพ็กเกจอื่น ๆ ที่จำเป็น

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