คำถามติดแท็ก advice

4
ประโยชน์ในทางปฏิบัติของระบบคำแนะนำใหม่ใน Emacs 24.4
Emacs 24.4 มาพร้อมกับระบบคำแนะนำใหม่ NEWSไฟล์พูดว่า: ** แพคเกจใหม่ให้nadvice.elบริการคำแนะนำที่มีน้ำหนักเบา มันเป็นชั้น: *** add-function/ remove-functionซึ่งสามารถใช้เพื่อเพิ่ม / ลบรหัสในสถานที่ที่มีการทำงานเช่นตัวกรองกระบวนการหรือ<foo>-functionตะขอ *** advice-add/ advice-removeเพื่อเพิ่ม / ลบคำแนะนำในฟังก์ชั่นที่ตั้งชื่อเหมือนที่defadviceทำ ถาม:อะไรคือประโยชน์และการใช้งานจริงของแพ็คเกจใหม่นี้ ฉันสนใจเป็นพิเศษในคำตอบที่กล่าวถึงประเด็นต่อไปนี้: หากฉันใช้เฉพาะคำแนะนำในการปรับแต่ง Emacs (ซึ่งแตกต่างจากการเขียนแพ็คเกจเสริม) ฉันต้องเปลี่ยนไปใช้ระบบใหม่หรือไม่? มันจะเข้ามาแทนที่ระบบเก่าในบางจุดหรือไม่? สิ่งที่ว่าผมสามารถทำอะไรกับระบบใหม่ที่ฉันไม่สามารถประสบความสำเร็จด้วยdefadvice? อะไรคือความสำคัญของความสามารถในการ "เพิ่ม / ลบรหัสในสถานที่ดำเนินการใด ๆ "
53 emacs24.4  advice 

1
ฉันจะใช้ nadvice ได้อย่างไร
การกำหนดค่าของฉันเต็มไปด้วยคำแนะนำและฉันยังคงได้ยินเกี่ยวกับnadvice.elแพคเกจminimalist minimalist ใหม่ ฉันค้นหาคู่มือและฉันอ่านแหล่งข้อมูลแล้ว แต่ฉันจะยอมรับอย่างเปิดเผย: ฉันยังไม่รู้ว่าจะใช้งานอย่างไร ทุกคนที่นี่สามารถชี้แนะทางให้ฉันหรือบอกวิธีเริ่มใช้คำแนะนำแบบเก่าของฉันได้อย่างไร

1
Emacs ให้คำแนะนำที่ถูกผูกไว้
ฉันต้องการแทนที่ฟังก์ชันในโค้ดชั่วคราว ยกตัวอย่างเช่น (defun nadvice/load-quiet (args) (cl-destructuring-bind (file &optional noerror nomessage nosuffix must-suffix) args (list file noerror t nosuffix must-suffix))) (defun nadvice/idle-require-quiet (old-fun &rest args) (advice-add 'load :filter-args #'nadvice/load-quiet) (apply old-fun args) (advice-remove #'load #'nadvice/load-quiet)) (advice-add 'idle-require-load-next :around #'nadvice/idle-require-quiet) อะไรไม่ทำงาน: นี้. มันจะสะอาดกว่านี้ถ้าฉันสามารถหลีกเลี่ยงการเปิดใช้งานและปิดการใช้งานคำแนะนำและไว้วางใจธรรมชาติของ Emacs แบบเธรดเดียวเพื่อดูแลสิ่งต่าง ๆ cl-letfจะไม่ให้ฉันอ้างอิงฟังก์ชั่นการกำเนิดดังนั้นฉันไม่สามารถใช้สิ่งที่:filter-argsปกติจะทำ cl-flet ไม่สามารถแทนที่ฟังก์ชั่นในฟังก์ชั่นอื่น ๆ nofletเป็นแพ็คเกจภายนอกซึ่งฉันต้องการหลีกเลี่ยง (ทำมากกว่าที่ฉันต้องการด้วย)

3
before-save-hook สำหรับโหมด cc
ฉันต้องการปรับแต่งcc-modeเพื่อใช้งานฟังก์ชั่นก่อนบันทึก ทางออกหนึ่งคือการปรับเปลี่ยนcc-modekeymap เพื่อผูกC-x C-sกับฟังก์ชั่นที่ทำงานที่ฉันต้องการแล้วบันทึก คำถามของฉันคือมีเบ็ดที่ฉันสามารถปรับแต่งสำหรับนี้ เอกสาร CC เบ็ดไม่พูดถึงเฉพาะสำหรับbefore-save-hook cc-modeสิ่งนี้ควรทำผ่านเบ็ดได้อย่างไร? หรือฉันจะทำสิ่งนี้ผ่านได้defadviceอย่างไร จากการอ่านคู่มือวิธีเดียวที่ฉันเห็นคือการเปิดใช้งานคำแนะนำก่อนบันทึกแล้วปิดใช้งานหลังจากงานเสร็จ ฟังดูยุ่งยาก สิ่งที่เป็นวิธีการใช้สำนวนadvice?
13 hooks  cc-mode  advice 

2
วิธีจัดการรายการอาร์กิวเมนต์ใน nadvice.el
ทำตามคำตอบของคำถามอีกข้อหนึ่งเกี่ยวกับระบบคำแนะนำใหม่ : ในแบบเก่าadvice.elมันเป็นไปได้ที่จะจัดการกับสมาชิกแต่ละคนของรายการอาร์กิวเมนต์ของฟังก์ชั่นที่แนะนำโดยไม่ต้องทำการยืนยันใด ๆ เกี่ยวกับสมาชิกเหล่านั้นที่ไม่ได้จัดการ ตัวอย่างเช่นคำแนะนำต่อไปนี้: (defadvice ansi-term (around prompt-for-name last) (let ((name (read-from-minibuffer "Tag: "))) (and (not (string= name "")) (ad-set-arg 1 (concat "Term: " name))) ad-do-it)) อนุญาตให้มีการจัดเตรียม (เป็นทางเลือก) ของอาร์กิวเมนต์ชื่อบัฟเฟอร์ansi-termในขณะที่ansi-termจะยังคงได้รับอาร์กิวเมนต์แรกโดยการพร้อมท์ตามรูปแบบโต้ตอบของตัวเอง (สำหรับการอ้างอิงในภายหลังansi-termลายเซ็นของคือ(PROGRAM &optional BUFFER-NAME)และรูปแบบการโต้ตอบของมันแจ้งให้ PROGRAM ที่มีค่าเริ่มต้นที่เป็นไปได้หลายประการ แต่ไม่ได้ทำอะไรเกี่ยวกับ BUFFER-NAME) nadvice.elฉันไม่แน่ใจหรือไม่ว่านี้คือในความเป็นไปได้ หากเป็นเช่นนั้นฉันไม่แน่ใจว่าจะสามารถทำได้ ฉันพบสองวิธีในการแทนที่รายการอาร์กิวเมนต์ของฟังก์ชันที่แนะนำ ตัวอย่างเช่นจากcombinators คำแนะนำจาก* info * (elisp) : `:filter-args' Call FUNCTION …
12 advice  arguments 

3
ฉันจะลบคำแนะนำที่ไม่มีชื่อออกได้อย่างไร
ฉันสนุกกับการเพิ่มคำแนะนำลงในฟังก์ชั่น: (advice-add 'executable-find :around (lambda (f &rest args) (apply g args))) ;;; ^ อุ๊ยพิมพ์ผิด แก้ไขและประเมินโค้ดข้างต้นอีกครั้ง แต่ตอนนี้ฉันมีทั้งคำแนะนำ "แก้ไข" และ "แตก" รอบฟังก์ชันนั้น ฉันจะกำจัดสิ่งเหล่านี้ได้อย่างไร ระบุว่าadvice-removeต้องการฟังก์ชั่นวัตถุหรือคำแนะนำรอบ ๆ (เห็นได้ชัดว่าฉันสามารถออกจากและรีสตาร์ท แต่มีวิธีอื่นใช่หรือไม่)
12 advice 

3
จะเขียนตัวห่อหุ้มฟังก์ชั่น“ pass-through” แบบโปร่งใสได้อย่างไร?
สิ่งที่ฉันหมายความโดย "โปร่งใส 'ผ่าน' ฟังก์ชั่นเสื้อคลุม" คือฟังก์ชั่นขอเรียกมันwrapperว่าผลตอบแทนที่เป็นผลมาจากการส่งผ่านอาร์กิวเมนต์ทุกฟังก์ชั่นอื่น ๆ wrappeeบางอย่างที่ขอเรียกว่า วิธีนี้ทำได้ใน Emacs Lisp หมายเหตุ: wrapperฟังก์ชั่นในอุดมคตินั้นไม่เชื่อเรื่องพระเจ้าเกี่ยวกับwrappeeลายเซ็นของฟังก์ชัน กล่าวคือไม่ทราบจำนวนตำแหน่งตำแหน่ง ฯลฯ ของwrappeeข้อโต้แย้ง มันเพิ่งผ่านการขัดแย้งทั้งหมดของมันไปwrappeeเช่นเดียวกับที่wrappeeได้รับการเรียกเดิม (ไม่จำเป็นต้องยุ่งกับ call stack เพื่อแทนที่ call to wrapperด้วย call to wrappee) ฉันโพสต์คำตอบบางส่วนสำหรับคำถามของฉัน: (defun wrapper (&rest args) (apply 'wrappee args)) นี้จะทำงานเฉพาะเมื่อwrappeeเป็นไม่โต้ตอบ เห็นได้ชัดว่าวิธีการที่ฟังก์ชั่นโต้ตอบได้รับข้อโต้แย้งของพวกเขาแสดงให้เห็นถึง "ช่องทาง" ที่แตกต่างจากสิ่งที่ครอบคลุมโดย(&rest args)คาถา สิ่งที่ฉันยังต้องการคือwrappeeคู่ที่เท่าเทียมกันของ(&rest args)ลายเซ็นสำหรับกรณีที่wrappeeมีฟังก์ชั่นแบบโต้ตอบ (คำถามนี้เกิดจากปัญหาที่อธิบายไว้ในคำถามก่อนหน้านี้ ) ในกรณีที่ต้องการคำชี้แจงเพิ่มเติมเกี่ยวกับสิ่งที่ฉันขอเป็นด้านล่างเป็นตัวอย่างสองประการแสดง Python และ JavaScript ที่เทียบเท่ากับสิ่งที่ฉันต้องการ ใน Python …
10 advice  arguments 

5
วิธีการเข้าสู่โหมดดูอย่างเดียวเมื่อเรียกดูซอร์สโค้ด Emacs จากความช่วยเหลือ?
เมื่อฉันเรียกดู Emacs ช่วยฟังก์ชั่นผ่านC-h fฉันมักจะมองเข้าไปในการใช้งาน Elisp / C ฉันต้องการป้อนview-modeอัตโนมัติเมื่อฉันเข้าถึงซอร์สโค้ดด้วยวิธีนี้เพื่อหลีกเลี่ยงการแก้ไขที่ไม่จำเป็น มีตะขอหรือฟังก์ชั่นที่ฉันสามารถแนะนำให้ทำสิ่งนี้ได้หรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.