Nie znam nawet właściwej terminologii dla tej składni lisp, więc nie wiem, czy słowa, których używam do zadawania pytania, mają sens. Ale to pytanie ma sens, jestem pewien.emacs: jak używać edebug na kodzie zdefiniowanym w makrze?
Pozwolę sobie więc pokazać. cc-mode (cc-fonts.el) ma rzeczy zwane "matchers", które są bitami kodu, które działają, aby zdecydować, jak uściślić region kodu. Brzmi to dość prosto, ale kod Matchera jest w formie, której nie rozumiem całkowicie, z backtickami i przecinkiem, po prostu przecinkiem i tak dalej, a ponadto jest osadzony w C-Lang-Defcost, który sam w sobie jest makro. Nie wiem, jak to nazwać, ale chcę uruchomić edebug na tym kodzie.
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)))))))
Czytam się na składni lisp, aby dowiedzieć się, co te rzeczy są i co do nich zadzwonić, ale poza tym, w jaki sposób mogę uruchomić edebug na kodzie, który następuje komentarz to czyta ;; Fontify the identifiers inside enum lists.
?
Wiem, jak uruchomić edebug na defun - wystarczy wywołać edebug-defun
w ramach definicji funkcji i wyłączyć Idź. Czy istnieje odpowiednia rzecz do zrobienia edebug formularzy kodu cc-mode matcher?
Co robi def-edebug-spec
i czy mogę go tutaj użyć? Jeśli tak to jak?
Minęło trochę czasu, ale wierzę, że edebug obsługuje makropolecenie (') i jego specjalne konstrukcje do poprawnego wstawiania (, i, @). Nie ma sposobu, aby użyć edebug tylko dla podwyrażenia w definicji. Zamiast tego musisz przyswoić całe wyrażenie defun lub najwyższego poziomu. – dlaliberte