From bc2d8c64174a7a9d15210468f8253f2da667cbc4 Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Wed, 13 Jan 2021 19:52:44 -0600 Subject: Elisp: Add Eros, fix plist indentation --- config.org | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/config.org b/config.org index bb89424..bc094c7 100644 --- a/config.org +++ b/config.org @@ -1246,6 +1246,102 @@ from [[https://github.com/mpereira/.emacs.d#make-cursor-movement-an-order-of-mag "Don't truncate printed expressions by level.") #+end_src +**** Eros (Evaluation Result OverlayS) + + #+begin_src emacs-lisp + (straight-use-package 'eros) + + (cuss eros-eval-result-prefix ";; => " + "Prefix displayed before eros overlays.") + + (eros-mode +1) + #+end_src + +**** Fix plists in elisp + +from [[https://github.com/Fuco1/.emacs.d/blob/a8230343bb7e2f07f5eac8e63e5506fa164344f6/site-lisp/my-redef.el#L25][Fuco1]], via mpereira – it’s also in another config I looked at, but using =el-patch=, which I’m not ready to do quite yet. + +#+begin_src emacs-lisp + + ;; redefines the silly indent of keyword lists + ;; before + ;; (:foo bar + ;; :baz qux) + ;; after + ;; (:foo bar + ;; :baz qux) + (eval-after-load "lisp-mode" + '(defun lisp-indent-function (indent-point state) + "This function is the normal value of the variable `lisp-indent-function'. + The function `calculate-lisp-indent' calls this to determine + if the arguments of a Lisp function call should be indented specially. + INDENT-POINT is the position at which the line being indented begins. + Point is located at the point to indent under (for default indentation); + STATE is the `parse-partial-sexp' state for that position. + If the current line is in a call to a Lisp function that has a non-nil + property `lisp-indent-function' (or the deprecated `lisp-indent-hook'), + it specifies how to indent. The property value can be: + ,* `defun', meaning indent `defun'-style + \(this is also the case if there is no property and the function + has a name that begins with \"def\", and three or more arguments); + ,* an integer N, meaning indent the first N arguments specially + (like ordinary function arguments), and then indent any further + arguments like a body; + ,* a function to call that returns the indentation (or nil). + `lisp-indent-function' calls this function with the same two arguments + that it itself received. + This function returns either the indentation to use, or nil if the + Lisp function does not specify a special indentation." + (let ((normal-indent (current-column)) + (orig-point (point))) + (goto-char (1+ (elt state 1))) + (parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t) + (cond + ;; car of form doesn't seem to be a symbol, or is a keyword + ((and (elt state 2) + (or (not (looking-at "\\sw\\|\\s_")) + (looking-at ":"))) + (if (not (> (save-excursion (forward-line 1) (point)) + calculate-lisp-indent-last-sexp)) + (progn (goto-char calculate-lisp-indent-last-sexp) + (beginning-of-line) + (parse-partial-sexp (point) + calculate-lisp-indent-last-sexp 0 t))) + ;; Indent under the list or under the first sexp on the same + ;; line as calculate-lisp-indent-last-sexp. Note that first + ;; thing on that line has to be complete sexp since we are + ;; inside the innermost containing sexp. + (backward-prefix-chars) + (current-column)) + ((and (save-excursion + (goto-char indent-point) + (skip-syntax-forward " ") + (not (looking-at ":"))) + (save-excursion + (goto-char orig-point) + (looking-at ":"))) + (save-excursion + (goto-char (+ 2 (elt state 1))) + (current-column))) + (t + (let ((function (buffer-substring (point) + (progn (forward-sexp 1) (point)))) + method) + (setq 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 "\\`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))))))))) +#+end_src + *** Janet #+begin_src emacs-lisp -- cgit 1.4.1-21-gabe81