Add some elisp editing stuff

This commit is contained in:
Alexander Rosenberg 2024-09-13 01:20:27 -07:00
parent 35797a591d
commit a3791c4048
Signed by: Zander671
GPG Key ID: 5FD0394ADBD72730

153
init.el
View File

@ -46,8 +46,8 @@
;; basic stuff
(use-package emacs
:hook (;(emacs-lisp-mode . my/-emacs-lisp-mode-setup-evil-lookup)
(prog-mode . electric-pair-local-mode)
:hook (;;(emacs-lisp-mode . my/-emacs-lisp-mode-setup-evil-lookup)
;;(prog-mode . electric-pair-local-mode)
((text-mode message-mode tex-mode) . flyspell-mode)
((text-mode message-mode tex-mode prog-mode) . auto-fill-mode)
(prog-mode . flyspell-prog-mode))
@ -137,7 +137,8 @@
(setq-default indent-tabs-mode nil
tab-width 4
fill-column 80
comment-multi-line t)
comment-multi-line t
comment-empty-lines 'eol)
;; Tree sitter download locations
(setq treesit-language-source-alist
@ -209,8 +210,8 @@ Interactively, force the recompile if called with a prefix."
(use-package flyspell
:config
(setq ispell-program-name "hunspell"
flyspell-issue-message-flag nil
flyspell-issue-welcome-flag nil)
flyspell-issue-message-flag nil
flyspell-issue-welcome-flag nil)
(define-key flyspell-mode-map (kbd "C-;") nil t)
(define-key flyspell-mode-map (kbd "C-,") nil t))
@ -300,8 +301,13 @@ Interactively, force the recompile if called with a prefix."
("C-c C-+" . evil-numbers/inc-at-pt-incremental)
("C-c C--" . evil-numbers/dec-at-pt-incremental)))
(use-package evil-cleverparens
:hook ((lisp-mode emacs-lisp-mode) . evil-cleverparens-mode)
:hook (((lisp-mode emacs-lisp-mode) . evil-cleverparens-mode)
(evil-cleverparens-mode . paredit-mode))
:bind (:map paredit-mode-map
("C-<return>" . paredit-RET)
("C-RET" . paredit-RET))
:custom
(eldoc-add-command 'paredit-RET)
(evil-cleverparens-use-s-and-S nil))
;; make lisp editing nicer
@ -372,12 +378,12 @@ visual states."
;; vertico
(use-package vertico
:bind (:map vertico-map
("C-S-k" . kill-line)
("C-k" . vertico-previous)
("C-j" . vertico-next)
("RET" . vertico-directory-enter)
("DEL" . vertico-directory-delete-char)
("M-DEL" . vertico-directory-delete-word))
("C-S-k" . kill-line)
("C-k" . vertico-previous)
("C-j" . vertico-next)
("RET" . vertico-directory-enter)
("DEL" . vertico-directory-delete-char)
("M-DEL" . vertico-directory-delete-word))
:hook (minibuffer-setup . cursor-intangible-mode)
:init
(defun my/crm-indicator (args)
@ -392,8 +398,8 @@ visual states."
enable-recursive-minibuffers t
read-extended-command-predicate #'command-completion-default-include-p
minibuffer-prompt-properties '(read-only t
cursor-intangible t
face minibuffer-prompt))
cursor-intangible t
face minibuffer-prompt))
(vertico-mode 1))
;; orderless
@ -414,10 +420,10 @@ visual states."
(command
(styles my/orderless-with-initialism basic)))))
; marginalia
;; marginalia
(use-package marginalia
:bind (:map minibuffer-local-map
("M-a" . marginalia-cycle))
("M-a" . marginalia-cycle))
:init
(marginalia-mode 1))
@ -455,6 +461,9 @@ visual states."
("M-g i" . consult-imenu)
("M-g I" . consult-imenu-multi)
("M-g r" . consult-imenu-multi)
;; these are so that you can still newline even if a completion popup is open
("C-RET" . newline)
("C-<return>" . newline)
:map help-map
("TAB". consult-info)
("C-m" . consult-man))
@ -484,7 +493,7 @@ visual states."
:config
(defun my/-company-setup-shell-mode ()
(setq-local company-backends '(company-files company-keywords
company-dabbrev-code)))
company-dabbrev-code)))
(defun my/-company-search-mode-add-lighter ()
(if company-search-mode
(cl-pushnew company-search-lighter global-mode-string :test 'equal)
@ -637,7 +646,6 @@ to `posframe-show' if the display is graphical."
"--clang-tidy" "--completion-style=detailed"
"--header-insertion=never" "--pch-storage=memory"
"--function-arg-placeholders"))))
;"--malloc-trim" "--function-arg-placeholders"))))
;; gud
(use-package gud
@ -645,7 +653,7 @@ to `posframe-show' if the display is graphical."
:ensure nil
:after (project evil)
:bind (:map project-prefix-map
("U" . my/project-gdb))
("U" . my/project-gdb))
:init
(setq gdb-debuginfod-enable-setting t)
(defvar my/project-gdb-command nil
@ -973,11 +981,80 @@ COMMAND and COMINT are like `compile'."
;; yuck (config language for eww)
(use-package yuck-mode)
;; Some Elisp indentation stuff
;; Source: https://github.com/magit/emacsql
;; emacsql.el line 394
(defun my/lisp-inside-plist-p ()
"Return t if point is inside a plist."
(save-excursion
(let ((start (point)))
(beginning-of-defun)
(when-let ((sexp (nth 1 (parse-partial-sexp (point) start))))
(goto-char sexp)
(looking-at (rx "(" (* (syntax whitespace)) ":"))))))
(defun my/-calculate-indent-fix-plists (oldfun &rest args)
"This function is meant to advise `calculate-lisp-indent'.
It calls OLDFUN with ARGS in such an environment as to prevent the default
indentation of plists."
(if (save-excursion
(beginning-of-line)
(my/lisp-inside-plist-p))
(let ((lisp-indent-offset 1))
(apply oldfun args))
(apply oldfun args)))
(advice-add 'calculate-lisp-indent :around
'my/-calculate-indent-fix-plists)
(defvar my/max-lisp-noindent-comment-search-lines 10
"Max lines to search for the noindent comment.")
(defun my/-calculate-lisp-indent-noindent-comment (oldfun &rest args)
"This function is meant to advise `calculate-lisp-indent'.
It calls OLDFUN with ARGS, unless the line ends with the comment
; noindent [LINES]
In this case, it just returns the current amount of indentation. LINES is the
number of lines that this comment affects. This is limited by
`my/max-lisp-noindent-comment-search-lines'.
This only works if its on the first or second form in a block. I think this is
because the indentation code only checks those and then assumes the same
indentation for every following line in the same block. This is probably OK as
I can't imagine too many instances where you need to randomly change the indent
midway through a block, and in those cases you can just stick this on the first
line in the block and manually deal with indentation."
(if (and (save-excursion
(end-of-line)
(re-search-backward
(rx (+ ";") (syntax whitespace) "noindent"
(? (syntax whitespace) (group (+ num)))
line-end)
(pos-bol (- my/max-lisp-noindent-comment-search-lines))
t))
(save-excursion
;; if we are on a blank line, move forward a line
(when (zerop (length (buffer-substring-no-properties
(pos-bol) (pos-eol))))
(beginning-of-line 2))
(<= (count-lines (match-beginning 0) (pos-eol))
(if-let ((match (match-string 1)))
(string-to-number match)
1))))
(save-excursion
(beginning-of-line)
(looking-at (rx (* blank)))
(length (match-string 0)))
(apply oldfun args)))
(advice-add 'calculate-lisp-indent :around
'my/-calculate-lisp-indent-noindent-comment)
;; sly
(use-package sly
:hook (lisp-mode . my/-lisp-mode-autoconnect-sly)
:bind (:map sly-mode-map
("C-c e" . my/sly-show-notes-at-point))
("C-c e" . my/sly-show-notes-at-point)) ; noindent
:autoload sly-connected-p
:init
(defun my/-lisp-mode-autoconnect-sly ()
@ -1343,7 +1420,7 @@ If no name is given, list all bookmarks instead."
(trashed)."
(interactive)
(when (mu4e-thread-message-folded-p)
(mu4e-warn "Cannot mark folded messages"))
(mu4e-warn "Cannot mark folded messages"))
(mu4e-mark-at-point 'move mu4e-trash-folder)
(when mu4e-headers-advance-after-mark
(mu4e-headers-next)))
@ -1378,11 +1455,11 @@ If no name is given, list all bookmarks instead."
(mu4e-drafts-folder . "/protonmail/Drafts")
(mu4e-trash-folder . "/protonmail/Trash")
(mu4e-bookmarks . ((:name "Inbox"
:query "maildir:/protonmail/Inbox"
:key ?i)
:query "maildir:/protonmail/Inbox"
:key ?i)
(:name "Unread"
:query "flag:unread AND NOT flag:trashed AND NOT maildir:/protonmail/Spam"
:key ?u))))))))
:query "flag:unread AND NOT flag:trashed AND NOT maildir:/protonmail/Spam"
:key ?u))))))))
(use-package mu4e-alert
:after mu4e
:hook (after-init . mu4e-alert-enable-notifications)
@ -1413,17 +1490,17 @@ If no name is given, list all bookmarks instead."
:hook ((emacs-lisp-mode . my/-helpful-setup-emacs-lisp-mode)
(helpful-mode . my/-setup-helpful-mode))
:bind (:map help-map
("f" . helpful-callable)
("v" . helpful-variable)
("k" . helpful-key)
("o" . helpful-symbol)
("x" . helpful-command)
("F" . helpful-function)
:map helpful-mode-map
("<mouse-8>" . my/helpful-history-back)
("<mouse-9>" . my/helpful-history-forward)
("<normal-state><" . my/helpful-history-back)
("<normal-state>>" . my/helpful-history-forward))
("f" . helpful-callable)
("v" . helpful-variable)
("k" . helpful-key)
("o" . helpful-symbol)
("x" . helpful-command)
("F" . helpful-function)
:map helpful-mode-map
("<mouse-8>" . my/helpful-history-back)
("<mouse-9>" . my/helpful-history-forward)
("<normal-state><" . my/helpful-history-back)
("<normal-state>>" . my/helpful-history-forward))
:init
(defun my/-helpful-setup-emacs-lisp-mode ()
(setq-local evil-lookup-func #'helpful-at-point))
@ -1634,10 +1711,12 @@ one of the normal rainbow-delimiters-depth-N-face faces."
;; page break lines
(use-package page-break-lines
:hook (helpful-mode . page-break-lines-mode)
:config
(global-page-break-lines-mode 1)
(add-to-list 'page-break-lines-modes 'prog-mode)
(add-to-list 'page-break-lines-modes 'text-mode))
(add-to-list 'page-break-lines-modes 'text-mode)
(add-to-list 'page-break-lines-modes 'helpful-mode))
;; fun!
(use-package mines)