after-init-hook vs eval-after-load / with-eval-after-load


13

ฉันได้พบว่ามีประโยชน์มากกว่าวิธีการแพคเกจทำงานใน Emacs 24แต่ฉันต้องการคำตอบที่ชัดเจนจากผู้ใช้ที่มีประสบการณ์หรือนักพัฒนาหลักซึ่งสิ่งเหล่านี้เป็นที่ต้องการในกรณีทั่วไปใน 24.4

Afaik (add-hook 'after-init-hook ...)เป็นวิธีที่จะพูดถึงสัตว์เดรัจฉานบังคับในการตั้งค่าการปรับแต่งสำหรับแพคเกจ อย่างไรก็ตามeval-after-loadและความหวานของ syntactically มากขึ้นwith-eval-after-loadดูเหมือนจะเหมาะสมสำหรับการกำหนดค่าแบบไดนามิกมากขึ้นและเม็ดเล็กที่ดีที่เล่นได้ดีกับการโหลดส่วนขยายทีละส่วนแยกและขี้เกียจ

ฉันเข้าใจถูกต้องหรือไม่ ฉันควรจำอะไรอีก

คำตอบ:


11

Afaik (add-hook 'after-init-hook ...)เป็นวิธีที่จะพูดถึงสัตว์เดรัจฉานบังคับในการตั้งค่าการปรับแต่งสำหรับแพคเกจ

ไม่ถ้าคุณต้องการกำหนดค่าแพ็คเกจในไฟล์ init ของคุณวิธีการทั่วไปคือโทรไป(package-initialize)ที่ด้านบนของไฟล์จากนั้นทำการกำหนดค่า after-init-hookมีความซับซ้อนเกินความจำเป็นสำหรับวัตถุประสงค์นี้

อย่างไรก็ตามeval-after-loadและความหวานของ syntactically มากขึ้นwith-eval-after-loadดูเหมือนจะเหมาะสมสำหรับการกำหนดค่าแบบไดนามิกมากขึ้นและเม็ดเล็กที่ดีที่เล่นได้ดีกับการโหลดส่วนขยายทีละส่วนแยกและขี้เกียจ

(with-)eval-after-loadใช้สำหรับสิ่งที่คุณต้องการทำหลังจากโหลดแพ็คเกจ package-initializeไม่ได้โหลดแพ็คเกจมันแค่“ เตรียม” พวกมันเท่านั้น (โหลดชุดโหลดอัตโนมัติ)

หากคุณใช้การeval-after-loadกำหนดค่าทุกชุดคุณไม่จำเป็นต้องโทรไป(package-initialize)ที่ด้านบน แต่สิ่งที่คนทั่วไปมักทำคือเรียก(package-initialize)เพื่อให้การกำหนดค่าส่วนใหญ่สามารถเขียนตรงไปยังไฟล์ init จากนั้นเฉพาะ eval-after-loadโค้ดที่ยาวมากหรือขึ้นอยู่กับแพ็คเกจที่กำลังโหลด


แต่มันก็ยังโอเคที่จะวางทุกอย่างeval-after-loadไว้ในแพ็คเกจใด ๆ ใช่มั้ยและไม่ใช้(package-initialize)เลย?
Erik Kaplun

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