blob: 4011c54097587be88920f741b31f8b8da4e08a4f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
;;; -*- lexical-binding: t -*-
;; Time-stamp: <2026-03-24 11h04 GMT (1fa9dc52)>
;; -------------------------------------------------------------------
;; We have expand region at home
(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
(use-package ace-window
:ensure t
:bind (("C-," . ace-window)
("C-x o" . ace-window))
:config
(setq aw-keys '(?n ?r ?s ?t ?h ?e ?a ?i)))
;; -------------------------------------------------------------------
;; General stuff
;; (global-set-key (kbd "C-b") 'recenter-top-bottom)
;; (global-set-key (kbd "M-b") 'downcase-word)
;; (global-set-key (kbd "C-l") 'backward-char)
;; (global-set-key (kbd "M-l") 'backward-word)
(global-set-key (kbd "C-M-e") 'end-of-buffer)
(global-set-key (kbd "C-M-a") 'beginning-of-buffer)
(global-set-key (kbd "M-z") 'zap-up-to-char)
;; Fast movement
(global-set-key (kbd "C-S-n")
(lambda () (interactive) (ignore-errors (forward-line 5))))
(global-set-key (kbd "C-S-p")
(lambda () (interactive) (ignore-errors (forward-line -5))))
(global-set-key (kbd "C-S-f")
(lambda () (interactive) (ignore-errors (forward-char 5))))
(global-set-key (kbd "C-S-b")
(lambda () (interactive) (ignore-errors (backward-char 5))))
;; Hardcore mode
(defconst hardcore-nav-mode t)
(when hardcore-nav-mode
(global-set-key (kbd "<XF86Back>") nil)
(global-set-key (kbd "<XF86Forward>") nil)
;; (global-set-key (kbd "<right>") nil)
;; (global-set-key (kbd "<left>") nil)
;; (global-set-key (kbd "<up>") nil)
;; (global-set-key (kbd "<down>") nil)
(global-set-key (kbd "S-<right>") nil)
(global-set-key (kbd "S-<left>") nil)
(global-set-key (kbd "S-<up>") nil)
(global-set-key (kbd "C-<down>") nil)
(global-set-key (kbd "C-<right>") nil)
(global-set-key (kbd "C-<left>") nil)
(global-set-key (kbd "C-<up>") nil)
(global-set-key (kbd "C-<down>") nil)
(global-set-key (kbd "<Home>") nil)
(global-set-key (kbd "<End>") nil))
|