Emacs Lisp макро-степпер - PullRequest
6 голосов
/ 08 мая 2011

Есть ли аналог Elisp для макрошагера SLIME? В частности, я ищу что-то, что расширяет код в точке до следующего шага расширения (или только до последнего расширения) в новый буфер.

Наивный

(defun macroexpand-point ()
  (interactive)
  (let ((b (get-buffer-create "*el-macroexpansion*"))
        (expansion (format "%s" (macroexpand (thing-at-point 'sexp)))))
    (with-current-buffer b
      (insert expansion)
      (display-buffer b))))

не делает то, что я ожидаю здесь.

Ответы [ 3 ]

6 голосов
/ 08 мая 2011

Возможно, вам нужно это:

(defun macroexpand-sexp-at-point ()
  (macroexpand (sexp-at-point)))

Вся функция может быть выражена более кратко, таким образом

(defun macroexpand-point (sexp)
  (interactive (list (sexp-at-point)))
  (with-output-to-temp-buffer "*el-macroexpansion*"
    (pp (macroexpand sexp)))
  (with-current-buffer "*el-macroexpansion*" (emacs-lisp-mode)))
3 голосов
/ 09 мая 2011

Вы можете обнаружить, что imacroexpand.el делает то, что вы хотите.

2 голосов
/ 14 августа 2013

Можно найти полезным пакет макросов .

Краткое руководство по макросложке:

После установки пакета и без дальнейшей настройки вы можете сделать это:

Переместите курсор перед выражением, которое вы хотите расширить, затем выполните M-x macrostep-expand e e e e e, чтобы развернуть его шаг за шагом. В области эха отображается короткое справочное сообщение о том, как выйти и как его развернуть.

Это можно проверить на примерах макросов ->> со страницы dash.el , которые не слишком просты и не слишком сложны.

...