blob: f39cad4ba6a03b7524968f544ac5aa72c2a00d2d (
plain) (
blame)
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
|
(require 'hi-lock)
(require 'seq)
(defun marker-mark ()
(interactive)
(marker-mark-region (if (use-region-p)
(region-bounds)
`((,(pos-bol) . ,(pos-eol)))))
(when (region-active-p)
(deactivate-mark)))
(defun marker-mark-region (bounds)
(dolist (x bounds) (marker--mark-region (car x) (cdr x))))
(defun marker--mark-region (beg end)
(let ((ov (make-overlay beg end nil :front-advance)))
(overlay-put ov 'priority 1)
(overlay-put ov 'face 'hi-yellow)
(overlay-put ov 'evaporate t)
(overlay-put ov 'marker--mark-p t)))
(defun marker-unmark ()
(interactive)
(if (use-region-p)
(marker-unmark-region (region-bounds))
(marker-clear))
(when (region-active-p)
(deactivate-mark)))
(defun marker-unmark-region (bounds)
(dolist (x bounds) (marker--unmark-region (car x) (cdr x))))
(defun marker--unmark-region (beg end)
(dolist (ov (seq-filter (lambda (ov) (overlay-get ov 'marker--mark-p))
(overlays-in beg end)))
(cond ((< (overlay-start ov) beg)
(move-overlay ov (overlay-start ov) beg))
((> (overlay-end ov) end)
(move-overlay ov end (overlay-end ov)))
(:else
(delete-overlay ov)))))
(defun marker-clear ()
(interactive)
(remove-overlays nil nil 'marker--mark-p t))
(provide 'marker)
|