diff --git a/modules/lang/emacs-lisp/autoload.el b/modules/lang/emacs-lisp/autoload.el index 080bfbd02..2191695c2 100644 --- a/modules/lang/emacs-lisp/autoload.el +++ b/modules/lang/emacs-lisp/autoload.el @@ -67,6 +67,9 @@ library/userland functions" (byte-compile #'+emacs-lisp-highlight-vars-and-faces))) +;; +;;; Handlers + (defun +emacs-lisp--module-at-point () (let ((origin (point))) (save-excursion @@ -126,11 +129,52 @@ if it's callable, `apropos' otherwise." (thing (helpful-symbol (intern thing))) ((call-interactively #'helpful-at-point)))) -;; FIXME -;; (defun +emacs-lisp-lookup-file (thing) -;; (when-let (module (+emacs-lisp--module-at-point thing)) -;; (doom/help-modules (car module) (cadr module) 'visit-dir) -;; t)) +;;;###autoload +(defun +emacs-lisp-indent-function (indent-point state) + "A replacement for `lisp-indent-function'. + +Indents plists more sensibly. Adapted from +https://emacs.stackexchange.com/questions/10230/how-to-indent-keywords-aligned" + (let ((normal-indent (current-column)) + (orig-point (point)) + ;; TODO Refactor `target' usage (ew!) + target) + (goto-char (1+ (elt state 1))) + (parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t) + (cond ((and (elt state 2) + (or (not (looking-at-p "\\sw\\|\\s_")) + (eq (char-after) ?:))) + (unless (> (save-excursion (forward-line 1) (point)) + calculate-lisp-indent-last-sexp) + (goto-char calculate-lisp-indent-last-sexp) + (beginning-of-line) + (parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t)) + (backward-prefix-chars) + (current-column)) + ((and (save-excursion + (goto-char indent-point) + (skip-syntax-forward " ") + (not (eq (char-after) ?:))) + (save-excursion + (goto-char orig-point) + (and (eq (char-after) ?:) + (eq (char-before) ?\() + (setq target (current-column))))) + (save-excursion + (move-to-column target t) + target)) + ((let* ((function (buffer-substring (point) (progn (forward-sexp 1) (point)))) + (method (or (function-get (intern-soft function) 'lisp-indent-function) + (get (intern-soft function) 'lisp-indent-hook)))) + (cond ((or (eq method 'defun) + (and (null method) + (> (length function) 3) + (string-match-p "\\`def" function))) + (lisp-indent-defform state indent-point)) + ((integerp method) + (lisp-indent-specform method state indent-point normal-indent)) + (method + (funcall method indent-point state)))))))) ;; @@ -170,6 +214,18 @@ if it's callable, `apropos' otherwise." load-path))) (buttercup-run-discover))) +;;;###autoload +(defun +emacs-lisp/edebug-instrument-defun-on () + "Toggle on instrumentalisation for the function under `defun'." + (interactive) + (eval-defun 'edebugit)) + +;;;###autoload +(defun +emacs-lisp/edebug-instrument-defun-off () + "Toggle off instrumentalisation for the function under `defun'." + (interactive) + (eval-defun nil)) + ;; ;;; Hooks @@ -234,62 +290,3 @@ verbosity when editing a file in `doom-private-dir' or `doom-emacs-dir'." (when (and start finish) (put-text-property start finish 'display "..."))))) nil) - -;;;###autoload -(defun +emacs-lisp-indent-function (indent-point state) - "A replacement for `lisp-indent-function'. - -Indents plists more sensibly. Adapted from -https://emacs.stackexchange.com/questions/10230/how-to-indent-keywords-aligned" - (let ((normal-indent (current-column)) - (orig-point (point)) - ;; TODO Refactor `target' usage (ew!) - target) - (goto-char (1+ (elt state 1))) - (parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t) - (cond ((and (elt state 2) - (or (not (looking-at-p "\\sw\\|\\s_")) - (eq (char-after) ?:))) - (unless (> (save-excursion (forward-line 1) (point)) - calculate-lisp-indent-last-sexp) - (goto-char calculate-lisp-indent-last-sexp) - (beginning-of-line) - (parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t)) - (backward-prefix-chars) - (current-column)) - ((and (save-excursion - (goto-char indent-point) - (skip-syntax-forward " ") - (not (eq (char-after) ?:))) - (save-excursion - (goto-char orig-point) - (and (eq (char-after) ?:) - (eq (char-before) ?\() - (setq target (current-column))))) - (save-excursion - (move-to-column target t) - target)) - ((let* ((function (buffer-substring (point) (progn (forward-sexp 1) (point)))) - (method (or (function-get (intern-soft function) 'lisp-indent-function) - (get (intern-soft function) 'lisp-indent-hook)))) - (cond ((or (eq method 'defun) - (and (null method) - (> (length function) 3) - (string-match-p "\\`def" function))) - (lisp-indent-defform state indent-point)) - ((integerp method) - (lisp-indent-specform method state indent-point normal-indent)) - (method - (funcall method indent-point state)))))))) - -;;;###autoload -(defun +emacs-lisp/edebug-instrument-defun-on () - "Toggle on instrumentalisation for the function under `defun'." - (interactive) - (eval-defun 'edebugit)) - -;;;###autoload -(defun +emacs-lisp/edebug-instrument-defun-off () - "Toggle off instrumentalisation for the function under `defun'." - (interactive) - (eval-defun nil))