รีเซ็ตตัวแปรที่กำหนดเองเป็นค่าเริ่มต้นโดยทางโปรแกรม


25

ถาม:การใช้ Elisp ฉันจะรีเซ็ตตัวแปรเป็นค่าเริ่มต้นได้อย่างไรโดยไม่ทราบว่าเป็นค่าใด

ฉันพยายามหาวิธีการทำเช่นนี้โดยการปรับแต่งอินเตอร์เฟสสำหรับตัวแปรที่ฉันตั้งไว้เป็นค่าเริ่มต้นในไฟล์ init ของฉันและกดC-h kตามด้วยคลิกที่ปุ่ม "เปลี่ยนกลับ ... " ที่นำเอกสารมาwidget-button-clickให้ซึ่งเห็นได้ชัดว่าไม่ได้ช่วยอะไรมาก (ในทำนองเดียวกันการC-h k RETชี้ไปที่ปุ่มจะแสดงวิธีใช้Custom-newlineซึ่งไม่ใช่สิ่งที่ฉันกำลังมองหา)


3
ที่เกี่ยวข้องสำหรับ vars ที่ไม่ได้กำหนดเอง: emacs.stackexchange.com/q/10800/50
Malabarba

คำตอบ:


23

C-hig (elisp) Variable Definitions

ภายในdefcustomใช้คุณสมบัติสัญลักษณ์standard-valueเพื่อบันทึกการแสดงออกสำหรับค่ามาตรฐานในsaved-valueการบันทึกค่าที่บันทึกโดยผู้ใช้ด้วยบัฟเฟอร์ที่กำหนดเองและcustomized-valueเพื่อบันทึกค่าที่กำหนดโดยผู้ใช้ที่มีบัฟเฟอร์การปรับแต่ง แต่ไม่ได้บันทึก ดูคุณสมบัติของสัญลักษณ์ คุณสมบัติเหล่านี้คือรายการcarซึ่งเป็นนิพจน์ที่ประเมินค่า

ดังนั้น:

(setq foo (eval (car (get 'foo 'standard-value))))

โปรดทราบว่าสิ่งนี้ใช้ได้กับdefcustomตัวแปรเท่านั้น(เช่น "ตัวเลือกผู้ใช้") Emacs ไม่ได้บันทึกค่าเริ่มต้นของdefvarตัวแปรไว้ที่ใดก็ได้


3
ที่จริงแล้วคุณต้องประเมิน vale ใน plist ตัวอย่างของคุณควรเปลี่ยนเป็น: (setq foo (eval (car (get 'foo 'standard-value))))แบบฟอร์มค่าเริ่มต้นที่สร้างโดยdefcustomเป็นรูปแบบที่มี funcall และการปิด (ซึ่งอาจเกิดขึ้นเฉพาะเมื่อเปิดใช้งานการเชื่อมคำศัพท์)
Elias Mårtenson

คุณอาจต้องการใช้setq-defaultมากกว่าsetqในกรณีนี้
sanityinc

11

วิธีการรีเซ็ตค่าของตัวแปรอาจจะสะอาดกว่า:

custom-reevaluate-settingเป็นฟังก์ชั่นเสียงกระเพื่อมที่รวบรวมcustom.elมา

(custom-reevaluate-setting SYMBOL)

รีเซ็ตค่าเป็นSYMBOLโดยการประเมินค่าที่บันทึกไว้หรือค่ามาตรฐานอีกครั้ง ใช้:setฟังก์ชั่นในการทำเช่นนั้น สิ่งนี้มีประโยชน์สำหรับตัวเลือกที่ปรับแต่งได้ซึ่งกำหนดไว้ก่อนที่จะคำนวณค่ามาตรฐานได้จริง ๆ เช่นตัวแปรที่ถูกทิ้งซึ่งค่าเริ่มต้นขึ้นอยู่กับข้อมูลเวลาทำงาน

ตัวอย่างเช่น:

(custom-reevaluate-setting 'emms-player-next-function)

จะแทนที่ค่าก่อนหน้าด้วยสัญลักษณ์standard-valueนั้น

แก้ไข

อ่านความคิดเห็น @phils ด้านล่างเพื่อดูรายละเอียดที่สำคัญมากเกี่ยวกับฟังก์ชั่นนี้


5
หมายเหตุ " บันทึกหรือค่ามาตรฐาน" ในลำดับที่มีความสำคัญ หากผู้ใช้มีการปรับแต่งและบันทึกค่าสำหรับตัวแปรฟังก์ชันนี้รีเซ็ตมันมันไม่มันsaved-value standard-value
phils
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.