Это потому, что это внутри макроса. Макрос должен возвращать форму Lisp, которая затем оценивается.
Например, глядя на первый вызов этого макроса:
(add-annoying-arrows-advice previous-line '(ace-jump-mode backward-paragraph isearch-backward ido-imenu smart-up))
Нам нужно расширение, чтобы содержать:
(put 'previous-line 'aa-alts '(ace-jump-mode backward-paragraph isearch-backward ido-imenu smart-up))
чего и (quote ,cmd)добивается. Если бы макрос использовал cmdвзамен простой , он был бы сохранен буквально, и расширение было бы:
(put cmd 'aa-alts '(ace-jump-mode backward-paragraph isearch-backward ido-imenu smart-up))
что является ошибкой, потому что cmdне определено в среде, где вызывается макрос.
prognозначает, что вы должны поставить запятую перед тем, что вы хотите оценить, независимо от того, насколько далеко оно вложено? (Это,cmdв другом списке, а не непосредственно в нем(progn).)