54 lines
1.9 KiB
EmacsLisp
54 lines
1.9 KiB
EmacsLisp
(eval-when-compile
|
|
(require 'cl-lib))
|
|
(require 'hi-lock)
|
|
|
|
(defvar-local agent-skill-highlight--overlays nil)
|
|
(defvar-local agent-skill-highlight--was-read-only nil)
|
|
|
|
(defun agent-skill-highlight--remove-overlays ()
|
|
(mapc #'delete-overlay agent-skill-highlight--overlays)
|
|
(setq agent-skill-highlight--overlays nil))
|
|
|
|
(defun agent-skill-highlight-exit ()
|
|
(interactive)
|
|
(agent-skill-highlight-mode -1))
|
|
|
|
(define-minor-mode agent-skill-highlight-mode
|
|
"Temporary read-only mode with highlighted regions. Press q to exit."
|
|
:lighter " Highlight"
|
|
:keymap (let ((map (make-sparse-keymap)))
|
|
(define-key map (kbd "q") #'agent-skill-highlight-exit)
|
|
map)
|
|
(if agent-skill-highlight-mode
|
|
(progn
|
|
(setq agent-skill-highlight--was-read-only buffer-read-only)
|
|
(read-only-mode 1)
|
|
(message "Press q to exit highlights"))
|
|
(agent-skill-highlight--remove-overlays)
|
|
(unless agent-skill-highlight--was-read-only
|
|
(read-only-mode -1))))
|
|
|
|
(cl-defun agent-skill-highlight (&key files)
|
|
"Highlight regions in FILES.
|
|
|
|
FILES is a list of (FILE-PATH :regions REGIONS) where REGIONS is
|
|
a list of (:start LINE :lines COUNT)."
|
|
(dolist (file-spec files)
|
|
(let ((file-path (car file-spec))
|
|
(regions (plist-get (cdr file-spec) :regions)))
|
|
(find-file file-path)
|
|
(dolist (region regions)
|
|
(let* ((start-line (plist-get region :start))
|
|
(num-lines (plist-get region :lines))
|
|
(ov (make-overlay
|
|
(progn (goto-char (point-min))
|
|
(forward-line (1- start-line))
|
|
(point))
|
|
(progn (forward-line num-lines)
|
|
(point)))))
|
|
(overlay-put ov 'face 'hi-yellow)
|
|
(push ov agent-skill-highlight--overlays)))
|
|
(agent-skill-highlight-mode 1))))
|
|
|
|
(provide 'agent-skill-highlight)
|