summaryrefslogtreecommitdiff
path: root/emacs/site-lisp/maze.el
diff options
context:
space:
mode:
authorTCCQ <thomasmulmer02@gmail.com>2025-02-14 15:40:29 -0800
committerTCCQ <thomasmulmer02@gmail.com>2025-02-14 15:40:29 -0800
commit2576f016153baa11c6e62deeb329dd72f0aa89c8 (patch)
treeafd9e5c4cd42a67a4cacd82fc4f63622c1a26990 /emacs/site-lisp/maze.el
parent5b23587f638dde8faf821edd50d72cb988af5387 (diff)
emacs full rework from laptop
Diffstat (limited to 'emacs/site-lisp/maze.el')
-rw-r--r--emacs/site-lisp/maze.el64
1 files changed, 64 insertions, 0 deletions
diff --git a/emacs/site-lisp/maze.el b/emacs/site-lisp/maze.el
new file mode 100644
index 0000000..784049f
--- /dev/null
+++ b/emacs/site-lisp/maze.el
@@ -0,0 +1,64 @@
+;; [adj] movement and editing for lisp
+
+(provide 'maze-lisp)
+
+(defun maze--cur-end ()
+ (push-mark)
+ (thing-at-point--end-of-sexp)
+ (let ((cur (point)))
+ (goto-char (mark))
+ (pop-mark)
+ cur))
+
+(defun maze--hl (beg end &optional buffer)
+ (let ((overlay (make-overlay beg end (or buffer (current-buffer)))))
+ (overlay-put overlay 'face 'highlight)
+ (setq maze-overlay overlay)
+ overlay))
+
+(defun maze--unhl ()
+ (if maze-overlay
+ (delete-overlay maze-overlay)))
+
+(defun maze--update-hl (beg end)
+ (if maze-overlay
+ (move-overlay maze-overlay beg end)
+ (maze--hl beg end)))
+
+(defun maze-forward (n)
+ (interactive "p")
+ (goto-char (or (scan-sexps (point) 2) (buffer-end 1)))
+ (thing-at-point--beginning-of-sexp)
+ (maze--update-hl (point) (maze--cur-end)))
+
+(defun maze-backward (n)
+ (interactive "p")
+ (let ((n (or n 1)))
+ (backward-sexp n))
+ (maze--update-hl (point) (maze--cur-end)))
+
+(defun maze-inward (n)
+ (interactive "p")
+ (down-list n)
+ (maze--update-hl (point) (maze--cur-end)))
+
+(defun maze-outward (n)
+ (interactive "p")
+ (backward-up-list n)
+ (maze--update-hl (point) (maze--cur-end)))
+
+(defvar-keymap maze-mode-map
+ (kbd "j") 'maze-forward
+ (kbd "k") 'maze-backward
+ (kbd "l") 'maze-inward
+ (kbd "h") 'maze-outward)
+
+
+(define-minor-mode maze-mode
+ "doc"
+ :keymap maze-mode-map
+ :init-value nil
+ :after-hook (progn
+ (setq-local parse-sexp-ignore-comments t)
+ (setq-local maze-overlay nil)
+ (font-lock-mode 1)))