z_mirror/kak-mark

git clone https://git.raiguard.me/z_mirror/kak-mark

Caleb HeuerRelocate source to rc directorycbfd8ed

trunk
5.2 KiB129 linesraw
1# Mark
2
3# Options ──────────────────────────────────────────────────────────────────────
4
5# Internal variables
6declare-option -hidden range-specs mark_ranges
7
8# Faces
9set-face global MarkedPrimaryCursor '+ub'
10set-face global MarkedPrimarySelection '+ub'
11set-face global MarkedSecondaryCursor '+u'
12set-face global MarkedSecondarySelection '+u'
13
14# Mappings ─────────────────────────────────────────────────────────────────────
15
16map -docstring 'restore register' global normal z ': restore-register %val{register}<ret>'
17map -docstring 'consume register' global normal Z ': consume-register %val{register}<ret>'
18
19map -docstring 'clear register' global normal D ': clear-register %val{register}<ret>'
20
21map -docstring 'add selections' global normal Y ': add-selections %val{register}<ret>'
22map -docstring 'consume selections' global normal <a-Y> ': consume-selections %val{register}<ret>'
23
24map -docstring 'iterate next selection' global normal <c-n> ': iterate-next-selection %val{register}<ret>'
25map -docstring 'iterate previous selection' global normal <c-p> ': iterate-previous-selection %val{register}<ret>'
26
27# Commands ─────────────────────────────────────────────────────────────────────
28
29define-command -override restore-register -params 1 -docstring 'restore-register <register>: restore register (default: ^)' %{
30  try %[ execute-keys """%arg{1}z" ]
31}
32
33define-command -override consume-register -params 1 -docstring 'consume-register <register>: consume register (default: ^)' %{
34  restore-register %arg{1}
35  clear-register %arg{1}
36}
37
38define-command -override clear-register -params 1 -docstring 'clear-register <register>: clear register (default: ^)' %{
39  # Handle null named register.
40  try %{
41    set-register %arg{1}
42    echo -markup "{Information}cleared register '%arg{1}'{Default}"
43  } catch %{
44    set-register '^'
45    echo -markup "{Information}cleared register '^'{Default}"
46  }
47}
48
49define-command -override restore-selections -params 1 -docstring 'restore-selections <register>: restore selections (default: ^)' %{
50  try %[ execute-keys """%arg{1}<a-z>a" ]
51}
52
53define-command -override save-selections -params 1 -docstring 'save-selections <register>: save selections (default: ^)' %{
54  execute-keys -save-regs '' """%arg{1}Z"
55}
56
57define-command -override add-selections -params 1 -docstring 'add-selections <register>: add selections (default: ^)' %{
58  evaluate-commands -draft consume-selections %arg{1}
59  # Display saved selections:
60  # Handle null named register.
61  try %{
62    execute-keys -save-regs %arg{1} """%arg{1}Z"
63  } catch %{
64    execute-keys Z
65  }
66}
67
68define-command -override consume-selections -params 1 -docstring 'consume-selections <register>: consume selections (default: ^)' %{
69  restore-selections %arg{1}
70  save-selections %arg{1}
71  execute-keys ','
72}
73
74define-command -override iterate-next-selection -params 1 -docstring 'iterate-next-selection <register>: iterate next selection (default: ^)' %{
75  restore-register %arg{1}
76  execute-keys ')'
77  consume-selections %arg{1}
78}
79
80define-command -override iterate-previous-selection -params 1 -docstring 'iterate-previous-selection <register>: iterate previous selection (default: ^)' %{
81  restore-register %arg{1}
82  execute-keys '('
83  consume-selections %arg{1}
84}
85
86# Highlighters ─────────────────────────────────────────────────────────────────
87
88define-command -override -hidden update-mark-ranges %{
89  # Reset ranges
90  evaluate-commands -buffer '*' unset-option buffer mark_ranges
91  try %{
92    evaluate-commands -draft %{
93      # Jump to the buffer
94      execute-keys 'z'
95      # Initialize ranges
96      set-option buffer mark_ranges %val{timestamp}
97      # Mark the main selection
98      evaluate-commands -draft %{
99        execute-keys ','
100        set-option -add buffer mark_ranges "%val{selection_desc}|MarkedPrimarySelection"
101        execute-keys ';'
102        set-option -add buffer mark_ranges "%val{selection_desc}|MarkedPrimaryCursor"
103      }
104      # Mark other selections
105      execute-keys '<a-,>'
106      evaluate-commands -draft -itersel %{
107        set-option -add buffer mark_ranges "%val{selection_desc}|MarkedSecondarySelection"
108        execute-keys ';'
109        set-option -add buffer mark_ranges "%val{selection_desc}|MarkedSecondaryCursor"
110      }
111    }
112  }
113}
114
115define-command -override show-marks -docstring 'show marks' %{
116  add-highlighter -override global/marks ranges mark_ranges
117  remove-hooks global show-marks
118  hook -group show-marks -always global RegisterModified '\^' update-mark-ranges
119  update-mark-ranges
120}
121
122define-command -override hide-marks -docstring 'hide marks' %{
123  remove-hooks global show-marks
124  remove-highlighter global/marks
125  evaluate-commands -buffer '*' unset-option buffer mark_ranges
126}
127
128# Initialization
129show-marks