Add my own macroexpander
This commit is contained in:
@@ -46,4 +46,42 @@ translation at point."
|
||||
(keymap-set mode-specific-map "C-m" margins-map)
|
||||
(keymap-set mode-specific-map "b" 'my-insert-buffer-name)
|
||||
|
||||
(defun my-preview-macro-expansion (arg)
|
||||
"Previews the expansion of a macro in a temporary window.
|
||||
|
||||
If the prefix argument ARG is non-nil, a full recursive
|
||||
macroexpansion (`macroexpand-all') will we performed, otherwise only one
|
||||
macroexpansion step (`macroexpand-1') will be done.
|
||||
|
||||
If there is an active region selected, only its contents will be read
|
||||
for the expansion. See also `pp-macroexpand-expression'."
|
||||
(interactive "P")
|
||||
(let ((obj))
|
||||
(if (use-region-p)
|
||||
(setq obj
|
||||
(with-demoted-errors
|
||||
"Failed to read form: %S"
|
||||
(read (buffer-substring (region-beginning) (region-end)))))
|
||||
(save-excursion
|
||||
(setq obj (with-demoted-errors
|
||||
"Failed to read form: %S"
|
||||
(read (current-buffer))))))
|
||||
(if obj
|
||||
(let ((inhibit-read-only t))
|
||||
(with-current-buffer-window "*Macro Expansion*" nil nil
|
||||
(if arg
|
||||
(pp (macroexpand-all obj))
|
||||
(pp (macroexpand-1 obj)))
|
||||
(emacs-lisp-mode)
|
||||
(keymap-local-set (kbd "q") #'quit-window))
|
||||
(select-window (get-buffer-window "*Macro Expansion*"))))))
|
||||
|
||||
(with-eval-after-load 'embark
|
||||
(setq embark-pre-action-hooks
|
||||
(add-to-list 'embark-pre-action-hooks '(my-preview-macro-expansion embark--beginning-of-target)))
|
||||
(keymap-set embark-expression-map "m" 'my-preview-macro-expansion)
|
||||
(keymap-set embark-expression-map "M" 'pp-macroexpand-expression)
|
||||
(keymap-set embark-defun-map "m" 'my-preview-macro-expansion)
|
||||
(keymap-set embark-defun-map "M" 'pp-macroexpand-expression))
|
||||
|
||||
;;; 99-misc.el ends here
|
||||
|
||||
Reference in New Issue
Block a user