+ enable lexical-scope everywhere (lexical-binding = t): ~5-10% faster startup; ~5-20% general boost + reduce consing, function calls & garbage collection by preferring cl-loop & dolist over lambda closures (for mapc[ar], add-hook, and various cl-lib filter/map/reduce functions) -- where possible + prefer functions with dedicated opcodes, like assq (see byte-defop's in bytecomp.el for more) + prefer pcase & cond (faster) over cl-case + general refactor for code readability + ensure naming & style conventions are adhered to + appease byte-compiler by marking unused variables with underscore + defer minor mode activation to after-init, emacs-startup or window-setup hooks; a customization opportunity for users + ensures custom functionality won't interfere with startup.
23 lines
934 B
EmacsLisp
23 lines
934 B
EmacsLisp
;;; ui/doom/autoload/evil.el -*- lexical-binding: t; -*-
|
|
|
|
;;;###autoload (autoload '+doom:scratch-buffer "ui/doom/autoload/evil" nil t)
|
|
(evil-define-operator +doom:scratch-buffer (&optional beg end bang)
|
|
"Opens the scratch buffer in a popup window and, optionally, send the selected
|
|
region to it. If BANG, use current window instead of a popup."
|
|
:move-point nil :type inclusive
|
|
(interactive "<r><!>")
|
|
(let ((text (when (and (not (evil-normal-state-p)) beg end)
|
|
(buffer-substring beg end)))
|
|
(mode major-mode)
|
|
(old-project (doom-project-root))
|
|
(new-buf (get-buffer-create "*doom:scratch*")))
|
|
(if bang
|
|
(switch-to-buffer new-buf)
|
|
(doom-popup-buffer new-buf))
|
|
(with-current-buffer new-buf
|
|
(setq default-directory old-project)
|
|
(when (and (not (eq major-mode mode))
|
|
(functionp mode))
|
|
(funcall mode))
|
|
(if text (insert text)))))
|
|
|