ระบบการปรับแต่งเป็นตัวคุณสมบัติของ 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และไม่ชอบ