मैंने एक ही (with-current-buffer ....
को बार-बार दोहराने के अपने कोड में एक प्रवृत्ति देखी है, इसलिए मैंने with-current-buffer
की मैक्रो परिभाषा के आधार पर एक मैक्रो को परिभाषित करने का निर्णय लिया - यह मेरे पास अब तक है:डिफैमक्रो का शरीर निष्पादित नहीं किया जा रहा है
(defmacro with-assembla-buffer(asm-buffer-name heading-str &rest body)
"Create buffer with name of ASM-BUFFER-NAME, or uses it if exists,
preps it with readonly/erase/heading - executes `body' - then puts
readonly back on, goes to beginning of buffer, and switches to it."
(with-current-buffer (get-buffer-create asm-buffer-name)
(assembla-mode)
(toggle-read-only -1)
(erase-buffer)
(insert (format "-- %s --------------------" heading-str))
(newline)
`(progn ,@body)
(toggle-read-only 1)
(goto-char (point-min))
(switch-to-buffer (current-buffer))))
इस के शरीर निष्पादित किया जा रहा कभी नहीं है, लेकिन जब यह defun
बजाय defmacro
पूरी तरह से काम करता है के लिए बंद कर रहा है। तो से अलग क्यों शरीर को कभी भी निष्पादित नहीं किया गया है, मेरा दूसरा प्रश्न है - क्या यह एक डिफ्यून की तुलना में मैक्रो के रूप में अधिक समझ में आता है?
के शब्दों में Emacs-23 के 'Ch च स्विच करने के लिए buffer':" चेतावनी:!। इस तरह से एक और बफर अस्थायी रूप से पर काम करने की एक लिस्प कार्यक्रम के भीतर नहीं है का उपयोग करें 'बजाय सेट buffer' कि खिलवाड़ से बचा जाता है विंडो-बफर पत्राचार के साथ " – Stefan