diff options
| author | tslil clingman <tslil@posteo.de> | 2025-06-25 20:04:30 +0100 |
|---|---|---|
| committer | tslil clingman <tslil@posteo.de> | 2025-06-25 20:04:30 +0100 |
| commit | ae6b5a35f4ed8c44cc2e19e8e60b91eae79d6eb9 (patch) | |
| tree | 2c7a6c4b04341cca54054563daf86cc032aa8ed7 | |
| parent | 1805d8ddfc1b929101a02160938699ee239437cd (diff) | |
[emacs] use treesitter for expand-region, -avy, +ruff,lua-mode
| -rw-r--r-- | emacs/inits/01-basic.el | 3 | ||||
| -rw-r--r-- | emacs/inits/14-movement.el | 92 | ||||
| -rw-r--r-- | emacs/inits/15-project-mgmt.el | 4 | ||||
| -rw-r--r-- | emacs/inits/20-programming.el | 24 | ||||
| -rw-r--r-- | emacs/inits/22-lisp.el | 16 | ||||
| -rw-r--r-- | emacs/inits/24-latex.el | 5 |
6 files changed, 84 insertions, 60 deletions
diff --git a/emacs/inits/01-basic.el b/emacs/inits/01-basic.el index 5a6222b..b25c02b 100644 --- a/emacs/inits/01-basic.el +++ b/emacs/inits/01-basic.el @@ -101,9 +101,6 @@ (setq enable-dir-local-variables nil) -;; (setq shell-file-name "/usr/bin/bash" -;; explicit-shell-file-name "/usr/bin/bash") - ;; ----------------------------------------------------------------------------- ;; Basic packages diff --git a/emacs/inits/14-movement.el b/emacs/inits/14-movement.el index b44778e..3950fef 100644 --- a/emacs/inits/14-movement.el +++ b/emacs/inits/14-movement.el @@ -1,16 +1,65 @@ -;; Time-stamp: <2024-02-29 11h24 CET (f62464ac)> +;; Time-stamp: <2025-06-25 20h01 BST (anker)> ;; ------------------------------------------------------------------- -;; Repeated key presses for region +;; We have expand region at home -(use-package expand-region - :ensure t - :bind (("M-r" . er/expand-region)) - :config - (setq expand-region-fast-keys-enabled t - expand-region-contract-fast-key "c" - expand-region-reset-fast-key "e" - expand-region-autocopy-register "i")) +(defvar treesit--region-stack '()) + +(defun treesit-node-bounds-match-region-p (node beg end) + "Returns `t' if the bounds of the region marked `beg' and `end' match the bounds of `node'." + (and + (= beg (treesit-node-start node)) + (= end (treesit-node-end node)))) + +(defun treesit-mark-bigger-node () + "Expand selection to the parent of the smallest node containing the region." + (interactive) + (unless mark-active + (set-mark-command nil)) + (unless (or (eq last-command 'treesit-mark-bigger-node) (eq last-command 'treesit-contract-region)) + (setq treesit--region-stack nil)) + (let* ((cur-node (treesit-node-on (region-beginning) (region-end))) + (next-node (if + ;; check if the node containing the selection is already good + (not (treesit-node-bounds-match-region-p cur-node (region-beginning) (region-end))) + cur-node + (treesit-parent-until + cur-node + (lambda (n) + (not (treesit-node-bounds-match-region-p n (region-beginning) (region-end)))))))) + (unless (null next-node) + (push (cons (region-beginning) (region-end)) treesit--region-stack) + (set-mark (treesit-node-end next-node)) + (goto-char (treesit-node-start next-node))))) + +(defun treesit-contract-region () + "Contract a region to the last expansion." + (interactive) + (unless (null treesit--region-stack) + (let ((last-region (pop treesit--region-stack))) + (set-mark (cdr last-region)) + (goto-char (car last-region))))) + +(defun treesit-reset-region () + "Reset region to before the first invocation of `treesit-mark-bigger-node'." + (interactive) + (unless (null treesit--region-stack) + (let ((last-region (car (last treesit--region-stack)))) + (setq treesit--region-stack nil) + (set-mark (cdr last-region)) + (goto-char (car last-region)) + (when (= (car last-region) (cdr last-region)) + (deactivate-mark))))) + +(defvar-keymap treesit-mark-bigger-node-repeat-map + :doc "Repeatedly expand selection up tree sitter nodes." + :repeat (:exit (treesit-reset-region)) + "<return>" #'treesit-mark-bigger-node + "-" #'treesit-contract-region + "C-g" #'treesit-reset-region) + +(global-set-key (kbd "M-r") 'treesit-mark-bigger-node) +(global-set-key (kbd "M-S-r") 'treesit-contract-region) ;; ------------------------------------------------------------------- ;; Window switching @@ -23,29 +72,6 @@ (setq aw-keys '(?a ?r ?s ?t ?c ?e ?n ?i))) ;; ------------------------------------------------------------------- -;; Character jumping - -(use-package avy - :ensure t - :demand - :bind (("C->" . avy-goto-char-timer) - ("C-." . avy-goto-char-in-line) - ("M-g s" . avy-goto-word-or-subword-1) - ("M-g w" . avy-goto-word-1) - ("M-g a" . avy-goto-word-0) - ("M-g C-g" . avy-goto-line)) - :config - (setq avy-keys '(?a ?r ?s ?t ?g ?k ?n ?e ?i ?o ?q ?w ?f ?p) - avy-dispatch-alist '((?w . avy-action-kill-move) - (?W . avy-action-kill-stay) - (?j . avy-action-teleport) - (?m . avy-action-mark) - (?c . avy-action-copy) - (?y . avy-action-yank) - (?i . avy-action-ispell) - (?z . avy-action-zap-to-char)))) - -;; ------------------------------------------------------------------- ;; General stuff ;; (global-set-key (kbd "C-b") 'recenter-top-bottom) diff --git a/emacs/inits/15-project-mgmt.el b/emacs/inits/15-project-mgmt.el index 1136364..f61d75d 100644 --- a/emacs/inits/15-project-mgmt.el +++ b/emacs/inits/15-project-mgmt.el @@ -1,4 +1,4 @@ -;; Time-stamp: <2024-07-13 15h01 CEST (471b3659)> +;; Time-stamp: <2025-02-19 10h42 GMT (anker)> (defun revert-all-file-buffers () "Refresh all open file buffers without confirmation" @@ -14,3 +14,5 @@ (message "Finished reverting buffers containing unmodified files.")) (require 'project) + +(setq project-vc-extra-root-markers '("Cargo.toml")) diff --git a/emacs/inits/20-programming.el b/emacs/inits/20-programming.el index b7838d4..881bfc6 100644 --- a/emacs/inits/20-programming.el +++ b/emacs/inits/20-programming.el @@ -1,4 +1,4 @@ -;; Time-stamp: <2025-06-04 15h38 BST (4b100887)> +;; Time-stamp: <2025-06-25 20h00 BST (anker)> ;; ----------------------------------------------------------------------------- ;; General setup @@ -190,18 +190,10 @@ ;; ----------------------------------------------------------------------------- ;; Python -(use-package python-isort +(use-package lazy-ruff :defer :ensure - :commands python-isort-buffer - ) - -(use-package python-black - :defer - :ensure - :commands python-black-buffer - :config - (setq python-black-extra-args nil)) + :commands lazy-ruff-mode) (use-package highlight-indent-guides :ensure @@ -214,14 +206,10 @@ :hook (python-mode . (lambda () (require 'highlight-indent-guides) (highlight-indent-guides-mode t) + (lazy-ruff-mode) (eglot-ensure) (visual-line-mode))) - :init - (defun my-python-save-hook () - (python-isort-buffer) - (python-black-buffer)) - :hook (before-save-hook . my-python-save-hook) :bind (:map python-mode-map ("C-c C-f" . nil) ("M-/" . hippie-expand))) @@ -272,6 +260,10 @@ :bind (:map json-mode-map ("C-c C-f" . nil))) +(use-package lua-mode + :ensure + :defer) + (use-package zig-mode :ensure t :defer diff --git a/emacs/inits/22-lisp.el b/emacs/inits/22-lisp.el index dcbff69..9c5e6fb 100644 --- a/emacs/inits/22-lisp.el +++ b/emacs/inits/22-lisp.el @@ -1,4 +1,4 @@ -;; Time-stamp: <2025-03-25 20h09 GMT (3238da39)> +;; Time-stamp: <2025-06-25 20h02 BST (anker)> ;; ---------------------------------------------------------------------------- ;; Lisp helpers @@ -59,12 +59,22 @@ (interactive) (avy-goto-char ?\) )) -;; TODO: this doesn't work anymore? (use-package corral :ensure t) + +(use-package expand-region + :ensure + :defer + :config + (setq expand-region-fast-keys-enabled t + expand-region-contract-fast-key "c" + expand-region-reset-fast-key "e" + expand-region-autocopy-register "i")) + (defun make-lisp-bindings () (let ((map (eval (read (format "%s-map" major-mode))))) (progn (require 'corral) + (define-key map (kbd "M-r") 'er/expand-region) (define-key map (kbd "M-e") 'forward-sexp) (define-key map (kbd "M-a") 'backward-sexp) (define-key map (kbd "M-,") 'lh-backward-delim) @@ -90,8 +100,6 @@ ;; ---------------------------------------------------------------------------- ;; Mode configurations -;; (use-package rainbow-blocks :ensure t) - (add-hook 'emacs-lisp-mode-hook (lambda () (eldoc-mode) diff --git a/emacs/inits/24-latex.el b/emacs/inits/24-latex.el index 4f53e9f..8df11c1 100644 --- a/emacs/inits/24-latex.el +++ b/emacs/inits/24-latex.el @@ -1,4 +1,4 @@ -;; Time-stamp: <2025-02-27 12h19 GMT (b2a2dfad)> +;; Time-stamp: <2025-06-25 19h55 BST (anker)> (defvar latex-template-dir (expand-file-name "~/typeset/latex-templates")) (defun prompt-latex-file-template () @@ -22,8 +22,7 @@ populated from the directory *latex-template-dir*" (use-package cdm-mode :load-path "~/.config/emacs/scripts/") -;; TODO: this doesn't work anymore? -;; (use-package unfill :ensure t) +(use-package unfill :ensure t) (use-package latex :ensure auctex |
