Files
emacs-dotfiles/.config.d/99-misc.el
Vladislav Slobodenyuk 34b25f2352 The great config remake.
I decided to go back to the basics with this one. Only the packages I think
I *REALLY* need (or want) are left, the rest are replaced by the built-in
alternatives or even better, removed.
2026-03-13 15:51:28 +09:00

49 lines
1.9 KiB
EmacsLisp

;;; 99-misc.el --- My miscellaneous functions. -*- no-byte-compile: t; lexical-binding: t; -*-
;;; Description:
;; This file contains my miscellaneous functions and their key binding code.
;; Some of those functions were written by me, some of them are taken from the
;; internet.
;;; Code:
(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