Ni siquiera conozco la terminología adecuada para esta sintaxis de lisp, por lo que no sé si las palabras que estoy usando para formular la pregunta tienen sentido. Pero la pregunta tiene sentido, estoy seguro.emacs: ¿cómo uso edebug en el código que está definido en una macro?
Déjenme mostrarles. cc-mode (cc-fonts.el) tiene cosas llamadas "matchers" que son bits de código que se ejecutan para decidir cómo crear una región de código. Eso suena bastante simple, pero el código de coincidencia está en una forma que no entiendo completamente, con signos de interrogación y comas-atsign y solo coma, etc., y además está incrustado en un c-lang-defcost, que a su vez es un macro. No sé cómo llamar todo eso, pero quiero ejecutar edebug en ese código.
Look:
(c-lang-defconst c-basic-matchers-after
"Font lock matchers for various things that should be fontified after
generic casts and declarations are fontified. Used on level 2 and
higher."
t `(;; Fontify the identifiers inside enum lists. (The enum type
;; name is handled by `c-simple-decl-matchers' or
;; `c-complex-decl-matchers' below.
,@(when (c-lang-const c-brace-id-list-kwds)
`((,(c-make-font-lock-search-function
(concat
"\\<\\("
(c-make-keywords-re nil (c-lang-const c-brace-id-list-kwds))
"\\)\\>"
;; Disallow various common punctuation chars that can't come
;; before the '{' of the enum list, to avoid searching too far.
"[^\]\[{}();,/#=]*"
"{")
'((c-font-lock-declarators limit t nil)
(save-match-data
(goto-char (match-end 0))
(c-put-char-property (1- (point)) 'c-type
'c-decl-id-start)
(c-forward-syntactic-ws))
(goto-char (match-end 0)))))))
estoy leyendo sobre la sintaxis Lisp para averiguar cuáles son esas cosas y cómo llamarlos, pero aparte de eso, ¿cómo puedo ejecutar edebug en el código que sigue al comentario que dice ;; Fontify the identifiers inside enum lists.
?
Sé cómo ejecutar edebug en un defun - solo invoque edebug-defun
dentro de la definición de la función, y listo. ¿Hay algo que deba hacer para eliminar las formas de código del emparejador cc-mode?
¿Qué hace def-edebug-spec
hacer, y lo usaría aquí? ¿Si es así, cómo?
Ha pasado un tiempo, pero creo que edebug maneja la macro backtick ('), y sus constructos especiales para enderezar (, y, @) correctamente. No hay una forma de usar edebug en solo una subexpresión dentro de una definición. En cambio, debes instrumentar toda la expresión defun o top-level. – dlaliberte