summaryrefslogtreecommitdiff
path: root/emacs
diff options
context:
space:
mode:
authortslil clingman <tslil@posteo.de>2025-06-25 20:04:30 +0100
committertslil clingman <tslil@posteo.de>2025-06-25 20:04:30 +0100
commitae6b5a35f4ed8c44cc2e19e8e60b91eae79d6eb9 (patch)
tree2c7a6c4b04341cca54054563daf86cc032aa8ed7 /emacs
parent1805d8ddfc1b929101a02160938699ee239437cd (diff)
[emacs] use treesitter for expand-region, -avy, +ruff,lua-mode
Diffstat (limited to 'emacs')
-rw-r--r--emacs/inits/01-basic.el3
-rw-r--r--emacs/inits/14-movement.el92
-rw-r--r--emacs/inits/15-project-mgmt.el4
-rw-r--r--emacs/inits/20-programming.el24
-rw-r--r--emacs/inits/22-lisp.el16
-rw-r--r--emacs/inits/24-latex.el5
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