ระบบการปรับแต่งเป็นตัวคุณสมบัติของ Emacs ออกแบบมาเพื่อแก้ปัญหาได้อย่างแม่นยำที่คุณอธิบายเขียนโปรแกรมอาจจะไม่เป็นวิธีที่เหมาะสำหรับผู้ใช้งานเฉลี่ยในการกำหนดค่าของพวกเขาแก้ไข
จุดเริ่มต้นหลักของฟังก์ชันการปรับแต่งคือM-x customize RET
(หรือOptions > Customize Emacs > Top-level Customization Group
จากเมนู) จากนั้นคุณจะเห็นระบบเมนูแบบโต้ตอบสำหรับการปรับการตั้งค่า อินเตอร์เฟสนี้บังคับให้การตั้งค่าทั้งหมดเป็นประเภทที่ถูกต้อง (หมายเลข, สตริง, สี, ฯลฯ ) หลีกเลี่ยงแหล่งที่มาของข้อผิดพลาดที่พบเมื่อผู้ใช้กำหนดค่า Emacs โดยทางโปรแกรม หากเลือกที่ผู้ใช้จะยังคงมีการเปลี่ยนแปลงใด ๆ ที่พวกเขาทำผ่าน UI การตั้งค่าจะถูกเก็บไว้กับส่วนพิเศษในไฟล์เริ่มต้นของผู้ใช้ (อ่าน: .emacs
)
defcustom
เป็น wrapper รอบฟังก์ชั่น Emacs Lisp ระดับล่างอย่างdefvar
ที่ทั้งคู่ประกาศตัวแปรและทำให้มองเห็นได้ภายในส่วนต่อประสานการปรับแต่ง นอกจากนี้ยังช่วยให้นักพัฒนาซอฟต์แวร์สามารถให้ข้อมูลเมตาเพิ่มเติมที่จำเป็นในการแสดงการควบคุมเชิงโต้ตอบที่เหมาะสมเช่นค่าประเภทใดที่เก็บอยู่ในตัวแปรนี้ สตริงใดก็ได้? หมายเลข? ทางเลือกจากชุดตัวเลือกคงที่? เป็นต้นdefgroup
เป็นโครงสร้างการจัดกลุ่มสำหรับตัวเลือกที่ปรับแต่งได้เหล่านี้เพื่อให้สามารถจัดเรียงเป็นลำดับชั้นที่ดี
ควรใช้ฟังก์ชั่นนี้ทุกครั้งที่ข้อมูลเป็นส่วนหนึ่งของตัวเลือกที่กำหนดค่าได้สำหรับผู้ใช้แทนที่จะเป็นรายละเอียดภายในของไลบรารี
นี่เป็นตัวอย่างง่ายๆที่ถูกเปลื้องจากห้องสมุดเล็ก ๆ ของฉัน:
(defgroup checkbox nil
"Quick manipulation of textual checkboxes."
:group 'convenience)
(defcustom checkbox-states '("[ ]" "[x]")
"Checkbox states to cycle between.
First item will be the state for new checkboxes."
:group 'checkbox
:type '(repeat string))
การdefgroup
สร้างกลุ่มใหม่ภายในส่วนติดต่อการปรับแต่งภายใต้convenience
รายการระดับบนสุด ฉันต้องการตัวแปรเพื่อเก็บสถานะช่องทำเครื่องหมายที่เป็นไปได้ ฉันจะได้ใช้แต่เนื่องจากผมต้องการนี้จะปรับแต่งได้ง่ายผมเลือกที่จะใช้งานdefvar
ส่วนระบุว่าเป็นสมาชิกของกลุ่มก่อนหน้านี้ที่กำหนดไว้และแสดงให้เห็นว่ามันเป็นลำดับของสตริง นอกจากนี้ยังมีค่าเริ่มต้นและคำอธิบาย นอกจากนี้ยังมีสิ่งอำนวยความสะดวกเพิ่มเติม (ไม่แสดงที่นี่) สำหรับการเปลี่ยนค่าที่ป้อนโดยผู้ใช้defcustom
:group
:type
หากตอนนี้ฉันทำงานM-x customize RET
และไปที่Convenience > Checkbox
ฉันเห็นสิ่งต่อไปนี้:
ไม่ใช่อินเทอร์เฟซที่สวยที่สุดในโลก แต่ให้สังเกตว่ามีเครื่องมือแบบโต้ตอบสำหรับกำหนดค่าของ "Checkbox States" ( checkbox-states
ภายใน) มันแสดงค่าสตริงปัจจุบันพร้อมกับปุ่มINS
(แทรก) และDEL
(ลบ) และช่วยให้เราสามารถแก้ไขค่าสตริงในกล่องแก้ไข เมื่อเสร็จแล้วเราสามารถตัดสินใจได้ว่าจะใช้การเปลี่ยนแปลงของเราคืนค่าเหล่านั้นหรือนำไปใช้และบันทึกไว้สำหรับเซสชันในอนาคต
customize
สิ่งอำนวยความสะดวกเมื่อเทียบกับเมื่อต้องการปรับแต่งด้วยมือ? หรือคุณสนใจที่จะเขียนโหมดหรือไม่? หลังคือสถานการณ์ที่คุณอาจพบว่าตัวเองใช้สิ่งที่ชอบdefcustom
และไม่ชอบ