Ich habe einen Trend in meinem Code der Wiederholung der gleichen (with-current-buffer ....
immer und immer wieder festgestellt, so habe ich beschlossen, ein Makro basierend auf dieser Makrodefinition von with-current-buffer
zu definieren - das ist, was ich bisher habe:Body of defmacro wird nicht ausgeführt
(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))))
der Körper wird dies jedoch nie ausgeführt wird, wenn es um defun
statt defmacro
eingeschaltet ist, ist perfekt funktioniert. Also abgesehen von warum Körper nie ausgeführt wird, ist meine andere Frage - macht das mehr Sinn als ein Makro als ein defun?
Emacs-23 'Ch f Switch-to-buffer' zitieren:„WARNING:. Dies ist nicht der Weg auf einen anderen Puffer vorübergehend innerhalb eines Lisp-Programm zu arbeiten Verwenden 'Set-buffer' anstelle Das vermeidet Messing mit den Window-Buffer-Korrespondenzen " – Stefan