z_mirror/kak-mark
git clone https://git.raiguard.me/z_mirror/kak-mark
cbfd8ed
trunk
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