retrovim 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/.conda/retrovim.yaml +259 -0
  2. package/.conda/terax.icns +0 -0
  3. package/.conda/terax.ico +0 -0
  4. package/.conda/terax.png +0 -0
  5. package/.github/workflows/release.yml +95 -0
  6. package/.gitmodules +3 -0
  7. package/.npm/kanata_touchcursor.js +28 -0
  8. package/.npm/nvim.js +26 -0
  9. package/.npm/yazi.js +26 -0
  10. package/.npm/zsh.js +17 -0
  11. package/.pip/kanata_touchcursor/__init__.py +28 -0
  12. package/.pip/nvim/__init__.py +31 -0
  13. package/.pip/yazi/__init__.py +31 -0
  14. package/.pip/zsh/__init__.py +22 -0
  15. package/CHANGELOG.md +26 -0
  16. package/LICENSE +674 -0
  17. package/README.md +336 -0
  18. package/kanata/touchcursor.kbd +164 -0
  19. package/nvim/init.lua +813 -0
  20. package/nvim/plugins/mini.nvim/.github/DISCUSSION_TEMPLATE/q-a.yml +72 -0
  21. package/nvim/plugins/mini.nvim/.github/ISSUE_TEMPLATE/bug-report.yml +136 -0
  22. package/nvim/plugins/mini.nvim/.github/ISSUE_TEMPLATE/config.yml +5 -0
  23. package/nvim/plugins/mini.nvim/.github/ISSUE_TEMPLATE/feature-request.yml +75 -0
  24. package/nvim/plugins/mini.nvim/.github/PULL_REQUEST_TEMPLATE.md +2 -0
  25. package/nvim/plugins/mini.nvim/.github/workflows/quality-control.yml +150 -0
  26. package/nvim/plugins/mini.nvim/.pre-commit-config.yaml +20 -0
  27. package/nvim/plugins/mini.nvim/.stylua.toml +7 -0
  28. package/nvim/plugins/mini.nvim/.styluaignore +1 -0
  29. package/nvim/plugins/mini.nvim/CHANGELOG.md +1894 -0
  30. package/nvim/plugins/mini.nvim/CODE_OF_CONDUCT.md +132 -0
  31. package/nvim/plugins/mini.nvim/CONTRIBUTING.md +331 -0
  32. package/nvim/plugins/mini.nvim/LICENSE +21 -0
  33. package/nvim/plugins/mini.nvim/MAINTAINING.md +330 -0
  34. package/nvim/plugins/mini.nvim/Makefile +51 -0
  35. package/nvim/plugins/mini.nvim/README.md +261 -0
  36. package/nvim/plugins/mini.nvim/TESTING.md +1011 -0
  37. package/nvim/plugins/mini.nvim/benchmarks/starter/README.md +35 -0
  38. package/nvim/plugins/mini.nvim/benchmarks/starter/benchmark.sh +56 -0
  39. package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_dashboard-alpha.lua +21 -0
  40. package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_dashboard-original.lua +17 -0
  41. package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_dashboard-starter.lua +18 -0
  42. package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_empty.lua +4 -0
  43. package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_starter-default.lua +7 -0
  44. package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_startify-alpha.lua +10 -0
  45. package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_startify-original.lua +7 -0
  46. package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_startify-starter.lua +20 -0
  47. package/nvim/plugins/mini.nvim/benchmarks/starter/install.sh +10 -0
  48. package/nvim/plugins/mini.nvim/benchmarks/starter/make_summary.py +68 -0
  49. package/nvim/plugins/mini.nvim/benchmarks/starter/startup-summary.md +10 -0
  50. package/nvim/plugins/mini.nvim/colors/miniautumn.lua +55 -0
  51. package/nvim/plugins/mini.nvim/colors/minicyan.lua +95 -0
  52. package/nvim/plugins/mini.nvim/colors/minischeme.lua +95 -0
  53. package/nvim/plugins/mini.nvim/colors/minispring.lua +53 -0
  54. package/nvim/plugins/mini.nvim/colors/minisummer.lua +49 -0
  55. package/nvim/plugins/mini.nvim/colors/miniwinter.lua +51 -0
  56. package/nvim/plugins/mini.nvim/colors/randomhue.lua +16 -0
  57. package/nvim/plugins/mini.nvim/doc/mini-ai.txt +889 -0
  58. package/nvim/plugins/mini.nvim/doc/mini-align.txt +923 -0
  59. package/nvim/plugins/mini.nvim/doc/mini-animate.txt +937 -0
  60. package/nvim/plugins/mini.nvim/doc/mini-base16.txt +285 -0
  61. package/nvim/plugins/mini.nvim/doc/mini-basics.txt +359 -0
  62. package/nvim/plugins/mini.nvim/doc/mini-bracketed.txt +622 -0
  63. package/nvim/plugins/mini.nvim/doc/mini-bufremove.txt +123 -0
  64. package/nvim/plugins/mini.nvim/doc/mini-clue.txt +760 -0
  65. package/nvim/plugins/mini.nvim/doc/mini-cmdline.txt +392 -0
  66. package/nvim/plugins/mini.nvim/doc/mini-colors.txt +880 -0
  67. package/nvim/plugins/mini.nvim/doc/mini-comment.txt +230 -0
  68. package/nvim/plugins/mini.nvim/doc/mini-completion.txt +477 -0
  69. package/nvim/plugins/mini.nvim/doc/mini-cursorword.txt +105 -0
  70. package/nvim/plugins/mini.nvim/doc/mini-deps.txt +590 -0
  71. package/nvim/plugins/mini.nvim/doc/mini-diff.txt +661 -0
  72. package/nvim/plugins/mini.nvim/doc/mini-doc.txt +434 -0
  73. package/nvim/plugins/mini.nvim/doc/mini-extra.txt +856 -0
  74. package/nvim/plugins/mini.nvim/doc/mini-files.txt +1018 -0
  75. package/nvim/plugins/mini.nvim/doc/mini-fuzzy.txt +160 -0
  76. package/nvim/plugins/mini.nvim/doc/mini-git.txt +425 -0
  77. package/nvim/plugins/mini.nvim/doc/mini-hipatterns.txt +489 -0
  78. package/nvim/plugins/mini.nvim/doc/mini-hues.txt +420 -0
  79. package/nvim/plugins/mini.nvim/doc/mini-icons.txt +508 -0
  80. package/nvim/plugins/mini.nvim/doc/mini-indentscope.txt +485 -0
  81. package/nvim/plugins/mini.nvim/doc/mini-input.txt +932 -0
  82. package/nvim/plugins/mini.nvim/doc/mini-jump.txt +202 -0
  83. package/nvim/plugins/mini.nvim/doc/mini-jump2d.txt +525 -0
  84. package/nvim/plugins/mini.nvim/doc/mini-keymap.txt +449 -0
  85. package/nvim/plugins/mini.nvim/doc/mini-map.txt +717 -0
  86. package/nvim/plugins/mini.nvim/doc/mini-misc.txt +431 -0
  87. package/nvim/plugins/mini.nvim/doc/mini-move.txt +181 -0
  88. package/nvim/plugins/mini.nvim/doc/mini-notify.txt +434 -0
  89. package/nvim/plugins/mini.nvim/doc/mini-nvim.txt +431 -0
  90. package/nvim/plugins/mini.nvim/doc/mini-operators.txt +472 -0
  91. package/nvim/plugins/mini.nvim/doc/mini-pairs.txt +346 -0
  92. package/nvim/plugins/mini.nvim/doc/mini-pick.txt +1535 -0
  93. package/nvim/plugins/mini.nvim/doc/mini-sessions.txt +239 -0
  94. package/nvim/plugins/mini.nvim/doc/mini-snippets.txt +1291 -0
  95. package/nvim/plugins/mini.nvim/doc/mini-splitjoin.txt +536 -0
  96. package/nvim/plugins/mini.nvim/doc/mini-starter.txt +618 -0
  97. package/nvim/plugins/mini.nvim/doc/mini-statusline.txt +361 -0
  98. package/nvim/plugins/mini.nvim/doc/mini-surround.txt +863 -0
  99. package/nvim/plugins/mini.nvim/doc/mini-tabline.txt +151 -0
  100. package/nvim/plugins/mini.nvim/doc/mini-test.txt +966 -0
  101. package/nvim/plugins/mini.nvim/doc/mini-trailspace.txt +91 -0
  102. package/nvim/plugins/mini.nvim/doc/mini-visits.txt +937 -0
  103. package/nvim/plugins/mini.nvim/logo.png +0 -0
  104. package/nvim/plugins/mini.nvim/lua/mini/ai.lua +2244 -0
  105. package/nvim/plugins/mini.nvim/lua/mini/align.lua +2076 -0
  106. package/nvim/plugins/mini.nvim/lua/mini/animate.lua +2127 -0
  107. package/nvim/plugins/mini.nvim/lua/mini/base16.lua +1752 -0
  108. package/nvim/plugins/mini.nvim/lua/mini/basics.lua +772 -0
  109. package/nvim/plugins/mini.nvim/lua/mini/bracketed.lua +2013 -0
  110. package/nvim/plugins/mini.nvim/lua/mini/bufremove.lua +283 -0
  111. package/nvim/plugins/mini.nvim/lua/mini/clue.lua +2096 -0
  112. package/nvim/plugins/mini.nvim/lua/mini/cmdline.lua +1182 -0
  113. package/nvim/plugins/mini.nvim/lua/mini/colors.lua +2483 -0
  114. package/nvim/plugins/mini.nvim/lua/mini/comment.lua +586 -0
  115. package/nvim/plugins/mini.nvim/lua/mini/completion.lua +2094 -0
  116. package/nvim/plugins/mini.nvim/lua/mini/cursorword.lua +311 -0
  117. package/nvim/plugins/mini.nvim/lua/mini/deps.lua +1660 -0
  118. package/nvim/plugins/mini.nvim/lua/mini/diff.lua +1938 -0
  119. package/nvim/plugins/mini.nvim/lua/mini/doc.lua +1371 -0
  120. package/nvim/plugins/mini.nvim/lua/mini/extra.lua +2290 -0
  121. package/nvim/plugins/mini.nvim/lua/mini/files.lua +3145 -0
  122. package/nvim/plugins/mini.nvim/lua/mini/fuzzy.lua +356 -0
  123. package/nvim/plugins/mini.nvim/lua/mini/git.lua +1737 -0
  124. package/nvim/plugins/mini.nvim/lua/mini/hipatterns.lua +1042 -0
  125. package/nvim/plugins/mini.nvim/lua/mini/hues.lua +2088 -0
  126. package/nvim/plugins/mini.nvim/lua/mini/icons.lua +2254 -0
  127. package/nvim/plugins/mini.nvim/lua/mini/indentscope.lua +1158 -0
  128. package/nvim/plugins/mini.nvim/lua/mini/init.lua +427 -0
  129. package/nvim/plugins/mini.nvim/lua/mini/input.lua +2183 -0
  130. package/nvim/plugins/mini.nvim/lua/mini/jump.lua +609 -0
  131. package/nvim/plugins/mini.nvim/lua/mini/jump2d.lua +1244 -0
  132. package/nvim/plugins/mini.nvim/lua/mini/keymap.lua +880 -0
  133. package/nvim/plugins/mini.nvim/lua/mini/map.lua +1709 -0
  134. package/nvim/plugins/mini.nvim/lua/mini/misc.lua +969 -0
  135. package/nvim/plugins/mini.nvim/lua/mini/move.lua +509 -0
  136. package/nvim/plugins/mini.nvim/lua/mini/notify.lua +938 -0
  137. package/nvim/plugins/mini.nvim/lua/mini/operators.lua +1349 -0
  138. package/nvim/plugins/mini.nvim/lua/mini/pairs.lua +657 -0
  139. package/nvim/plugins/mini.nvim/lua/mini/pick.lua +3876 -0
  140. package/nvim/plugins/mini.nvim/lua/mini/sessions.lua +689 -0
  141. package/nvim/plugins/mini.nvim/lua/mini/snippets.lua +2828 -0
  142. package/nvim/plugins/mini.nvim/lua/mini/splitjoin.lua +1132 -0
  143. package/nvim/plugins/mini.nvim/lua/mini/starter.lua +1599 -0
  144. package/nvim/plugins/mini.nvim/lua/mini/statusline.lua +686 -0
  145. package/nvim/plugins/mini.nvim/lua/mini/surround.lua +2388 -0
  146. package/nvim/plugins/mini.nvim/lua/mini/tabline.lua +564 -0
  147. package/nvim/plugins/mini.nvim/lua/mini/test.lua +2516 -0
  148. package/nvim/plugins/mini.nvim/lua/mini/trailspace.lua +215 -0
  149. package/nvim/plugins/mini.nvim/lua/mini/visits.lua +1577 -0
  150. package/nvim/plugins/mini.nvim/readmes/mini-ai.md +190 -0
  151. package/nvim/plugins/mini.nvim/readmes/mini-align.md +203 -0
  152. package/nvim/plugins/mini.nvim/readmes/mini-animate.md +214 -0
  153. package/nvim/plugins/mini.nvim/readmes/mini-base16.md +198 -0
  154. package/nvim/plugins/mini.nvim/readmes/mini-basics.md +184 -0
  155. package/nvim/plugins/mini.nvim/readmes/mini-bracketed.md +193 -0
  156. package/nvim/plugins/mini.nvim/readmes/mini-bufremove.md +139 -0
  157. package/nvim/plugins/mini.nvim/readmes/mini-clue.md +260 -0
  158. package/nvim/plugins/mini.nvim/readmes/mini-cmdline.md +183 -0
  159. package/nvim/plugins/mini.nvim/readmes/mini-colors.md +169 -0
  160. package/nvim/plugins/mini.nvim/readmes/mini-comment.md +183 -0
  161. package/nvim/plugins/mini.nvim/readmes/mini-completion.md +217 -0
  162. package/nvim/plugins/mini.nvim/readmes/mini-cursorword.md +137 -0
  163. package/nvim/plugins/mini.nvim/readmes/mini-deps.md +271 -0
  164. package/nvim/plugins/mini.nvim/readmes/mini-diff.md +289 -0
  165. package/nvim/plugins/mini.nvim/readmes/mini-doc.md +198 -0
  166. package/nvim/plugins/mini.nvim/readmes/mini-extra.md +158 -0
  167. package/nvim/plugins/mini.nvim/readmes/mini-files.md +247 -0
  168. package/nvim/plugins/mini.nvim/readmes/mini-fuzzy.md +134 -0
  169. package/nvim/plugins/mini.nvim/readmes/mini-git.md +168 -0
  170. package/nvim/plugins/mini.nvim/readmes/mini-hipatterns.md +176 -0
  171. package/nvim/plugins/mini.nvim/readmes/mini-hues.md +285 -0
  172. package/nvim/plugins/mini.nvim/readmes/mini-icons.md +183 -0
  173. package/nvim/plugins/mini.nvim/readmes/mini-indentscope.md +191 -0
  174. package/nvim/plugins/mini.nvim/readmes/mini-input.md +163 -0
  175. package/nvim/plugins/mini.nvim/readmes/mini-jump.md +161 -0
  176. package/nvim/plugins/mini.nvim/readmes/mini-jump2d.md +197 -0
  177. package/nvim/plugins/mini.nvim/readmes/mini-keymap.md +205 -0
  178. package/nvim/plugins/mini.nvim/readmes/mini-map.md +191 -0
  179. package/nvim/plugins/mini.nvim/readmes/mini-misc.md +145 -0
  180. package/nvim/plugins/mini.nvim/readmes/mini-move.md +163 -0
  181. package/nvim/plugins/mini.nvim/readmes/mini-notify.md +175 -0
  182. package/nvim/plugins/mini.nvim/readmes/mini-operators.md +193 -0
  183. package/nvim/plugins/mini.nvim/readmes/mini-pairs.md +158 -0
  184. package/nvim/plugins/mini.nvim/readmes/mini-pick.md +340 -0
  185. package/nvim/plugins/mini.nvim/readmes/mini-sessions.md +164 -0
  186. package/nvim/plugins/mini.nvim/readmes/mini-snippets.md +373 -0
  187. package/nvim/plugins/mini.nvim/readmes/mini-splitjoin.md +194 -0
  188. package/nvim/plugins/mini.nvim/readmes/mini-starter.md +176 -0
  189. package/nvim/plugins/mini.nvim/readmes/mini-statusline.md +155 -0
  190. package/nvim/plugins/mini.nvim/readmes/mini-surround.md +190 -0
  191. package/nvim/plugins/mini.nvim/readmes/mini-tabline.md +156 -0
  192. package/nvim/plugins/mini.nvim/readmes/mini-test.md +175 -0
  193. package/nvim/plugins/mini.nvim/readmes/mini-trailspace.md +137 -0
  194. package/nvim/plugins/mini.nvim/readmes/mini-visits.md +243 -0
  195. package/nvim/plugins/mini.nvim/scripts/dual_log.sh +13 -0
  196. package/nvim/plugins/mini.nvim/scripts/dual_push.sh +15 -0
  197. package/nvim/plugins/mini.nvim/scripts/dual_release.sh +102 -0
  198. package/nvim/plugins/mini.nvim/scripts/dual_sync.sh +115 -0
  199. package/nvim/plugins/mini.nvim/scripts/init-deps-example.lua +59 -0
  200. package/nvim/plugins/mini.nvim/scripts/lint-filename-length.sh +16 -0
  201. package/nvim/plugins/mini.nvim/scripts/lintcommit-ci.sh +18 -0
  202. package/nvim/plugins/mini.nvim/scripts/lintcommit.lua +393 -0
  203. package/nvim/plugins/mini.nvim/scripts/minidoc.lua +57 -0
  204. package/nvim/plugins/mini.nvim/scripts/minimal_init.lua +28 -0
  205. package/nvim/plugins/mini.nvim/scripts/minitest.lua +4 -0
  206. package/package.json +16 -0
  207. package/pyproject.toml +43 -0
  208. package/yazi/init.lua +12 -0
  209. package/yazi/keymap.toml +114 -0
  210. package/yazi/lesskey +5 -0
  211. package/yazi/plugins/bookmarks.yazi/main.lua +86 -0
  212. package/yazi/plugins/cd-git-root.yazi/main.lua +31 -0
  213. package/yazi/plugins/smart-enter.yazi/main.lua +11 -0
  214. package/yazi/theme.toml +26 -0
  215. package/yazi/yazi.toml +15 -0
  216. package/zsh/.zshrc +145 -0
  217. package/zsh/starship.toml +20 -0
  218. package/zsh/zsh-patina.toml +2 -0
@@ -0,0 +1,311 @@
1
+ --- *mini.cursorword* Autohighlight word under cursor
2
+ ---
3
+ --- MIT License Copyright (c) 2021 Evgeni Chasnovski
4
+
5
+ --- Features:
6
+ --- - Autohighlight word under cursor with customizable delay.
7
+ ---
8
+ --- - Current word under cursor can be highlighted differently.
9
+ ---
10
+ --- - Highlighting is triggered only if current cursor character is a |[:keyword:]|.
11
+ ---
12
+ --- - Highlighting stops in insert and terminal modes.
13
+ ---
14
+ --- - "Word under cursor" is meant as in Vim's |<cword>|: something user would
15
+ --- get as |iw| text object.
16
+ ---
17
+ --- # Setup ~
18
+ ---
19
+ --- This module needs a setup with `require('mini.cursorword').setup({})`
20
+ --- (replace `{}` with your `config` table). It will create global Lua table
21
+ --- `MiniCursorword` which you can use for scripting or manually (with
22
+ --- `:lua MiniCursorword.*`).
23
+ ---
24
+ --- See |MiniCursorword.config| for `config` structure and default values.
25
+ ---
26
+ --- You can override runtime config settings locally to buffer inside
27
+ --- `vim.b.minicursorword_config` which should have same structure as
28
+ --- `MiniCursorword.config`. See |mini.nvim-buffer-local-config| for more details.
29
+ ---
30
+ --- # Highlight groups ~
31
+ --- *MiniCursorword-hl-groups*
32
+ ---
33
+ --- - `MiniCursorword` - highlight group of a non-current cursor word.
34
+ --- Default: plain underline.
35
+ ---
36
+ --- - `MiniCursorwordCurrent` - highlight group of a current word under cursor.
37
+ --- Default: links to `MiniCursorword` (so `:hi clear MiniCursorwordCurrent`
38
+ --- will lead to showing `MiniCursorword` highlight group).
39
+ --- Note: To not highlight it, use the following Lua code: >lua
40
+ ---
41
+ --- vim.api.nvim_set_hl(0, 'MiniCursorwordCurrent', {})
42
+ --- <
43
+ --- To change any highlight group, set it directly with |nvim_set_hl()|.
44
+ ---
45
+ --- # Disabling ~
46
+ ---
47
+ --- To disable core functionality, set `vim.g.minicursorword_disable` (globally) or
48
+ --- `vim.b.minicursorword_disable` (for a buffer) to `true`. Considering high
49
+ --- number of different scenarios and customization intentions, writing exact
50
+ --- rules for disabling module's functionality is left to user. See
51
+ --- |mini.nvim-disabling-recipes| for common recipes. Note: after disabling
52
+ --- there might be highlighting left; it will be removed after next
53
+ --- highlighting update.
54
+ ---
55
+ --- Module-specific disabling:
56
+ --- - Don't show highlighting if cursor is on the word that is in a blocklist
57
+ --- of current filetype. In this example, blocklist for "lua" is "local" and
58
+ --- "require" words, for "javascript" - "import": >lua
59
+ ---
60
+ --- _G.cursorword_blocklist = function()
61
+ --- local curword = vim.fn.expand('<cword>')
62
+ --- local filetype = vim.bo.filetype
63
+ ---
64
+ --- -- Add any disabling global or filetype-specific logic here
65
+ --- local blocklist = {}
66
+ --- if filetype == 'lua' then
67
+ --- blocklist = { 'local', 'require' }
68
+ --- elseif filetype == 'javascript' then
69
+ --- blocklist = { 'import' }
70
+ --- end
71
+ ---
72
+ --- vim.b.minicursorword_disable = vim.tbl_contains(blocklist, curword)
73
+ --- end
74
+ ---
75
+ --- -- Make sure to add this autocommand *before* calling module's `setup()`.
76
+ --- vim.cmd('au CursorMoved * lua _G.cursorword_blocklist()')
77
+ --- <
78
+ ---@tag MiniCursorword
79
+
80
+ -- Module definition ==========================================================
81
+ local MiniCursorword = {}
82
+ local H = {}
83
+
84
+ --- Module setup
85
+ ---
86
+ ---@param config table|nil Module config table. See |MiniCursorword.config|.
87
+ ---
88
+ ---@usage >lua
89
+ --- require('mini.cursorword').setup() -- use default config
90
+ --- -- OR
91
+ --- require('mini.cursorword').setup({}) -- replace {} with your config table
92
+ --- <
93
+ MiniCursorword.setup = function(config)
94
+ -- TODO: Remove after Neovim=0.9 support is dropped
95
+ if vim.fn.has('nvim-0.10') == 0 then
96
+ vim.notify(
97
+ '(mini.cursorword) Neovim<0.10 is soft deprecated (module works but is not supported).'
98
+ .. " It will be deprecated after the next 'mini.nvim' release (module might not work)."
99
+ .. ' Please update your Neovim version.'
100
+ )
101
+ end
102
+
103
+ -- Export module
104
+ _G.MiniCursorword = MiniCursorword
105
+
106
+ -- Setup config
107
+ config = H.setup_config(config)
108
+
109
+ -- Apply config
110
+ H.apply_config(config)
111
+
112
+ -- Define behavior
113
+ H.create_autocommands()
114
+
115
+ -- Create default highlighting
116
+ H.create_default_hl()
117
+ end
118
+
119
+ --- Defaults ~
120
+ ---@eval return MiniDoc.afterlines_to_code(MiniDoc.current.eval_section)
121
+ MiniCursorword.config = {
122
+ -- Delay (in ms) between when cursor moved and when highlighting appeared
123
+ delay = 100,
124
+ }
125
+ --minidoc_afterlines_end
126
+
127
+ -- Module functionality =======================================================
128
+
129
+ -- Helper data ================================================================
130
+ -- Module default config
131
+ H.default_config = vim.deepcopy(MiniCursorword.config)
132
+
133
+ -- Delay timer
134
+ H.timer = vim.loop.new_timer()
135
+
136
+ -- Information about last match highlighting (stored *per window*):
137
+ -- - Key: windows' unique buffer identifiers.
138
+ -- - Value: table with:
139
+ -- - `id` field for match id (from `vim.fn.matchadd()`).
140
+ -- - `word` field for matched word.
141
+ H.window_matches = {}
142
+
143
+ -- Helper functionality =======================================================
144
+ -- Settings -------------------------------------------------------------------
145
+ H.setup_config = function(config)
146
+ H.check_type('config', config, 'table', true)
147
+ config = vim.tbl_deep_extend('force', vim.deepcopy(H.default_config), config or {})
148
+
149
+ H.check_type('delay', config.delay, 'number')
150
+
151
+ return config
152
+ end
153
+
154
+ H.apply_config = function(config)
155
+ MiniCursorword.config = config
156
+
157
+ -- Make `setup()` to proper reset module
158
+ for _, m in ipairs(vim.fn.getmatches()) do
159
+ if vim.startswith(m.group, 'MiniCursorword') then vim.fn.matchdelete(m.id) end
160
+ end
161
+ end
162
+
163
+ H.create_autocommands = function()
164
+ local gr = vim.api.nvim_create_augroup('MiniCursorword', {})
165
+
166
+ local au = function(event, pattern, callback, desc)
167
+ vim.api.nvim_create_autocmd(event, { group = gr, pattern = pattern, callback = callback, desc = desc })
168
+ end
169
+
170
+ au('CursorMoved', '*', H.auto_highlight, 'Auto highlight cursorword')
171
+ au({ 'InsertEnter', 'TermEnter', 'QuitPre' }, '*', H.auto_unhighlight, 'Auto unhighlight cursorword')
172
+ au('ModeChanged', '*:[^i]', H.auto_highlight, 'Auto highlight cursorword')
173
+
174
+ au('ColorScheme', '*', H.create_default_hl, 'Ensure colors')
175
+ au('FileType', 'TelescopePrompt', function() vim.b.minicursorword_disable = true end, 'Disable locally')
176
+ end
177
+
178
+ --stylua: ignore
179
+ H.create_default_hl = function()
180
+ vim.api.nvim_set_hl(0, 'MiniCursorword', { default = true, underline = true })
181
+ vim.api.nvim_set_hl(0, 'MiniCursorwordCurrent', { default = true, link = 'MiniCursorword' })
182
+ end
183
+
184
+ H.is_disabled = function() return vim.g.minicursorword_disable == true or vim.b.minicursorword_disable == true end
185
+
186
+ H.get_config = function(config)
187
+ return vim.tbl_deep_extend('force', MiniCursorword.config, vim.b.minicursorword_config or {}, config or {})
188
+ end
189
+
190
+ -- Autocommands ---------------------------------------------------------------
191
+ H.auto_highlight = function()
192
+ -- Stop any possible previous delayed highlighting
193
+ H.timer:stop()
194
+
195
+ -- Stop highlighting immediately if module is disabled when cursor is not on
196
+ -- 'keyword'
197
+ if not H.should_highlight() then return H.unhighlight() end
198
+
199
+ -- Get current information
200
+ local win_id = vim.api.nvim_get_current_win()
201
+ local win_match = H.window_matches[win_id] or {}
202
+ local curword = H.get_cursor_word()
203
+
204
+ -- Only immediately update highlighting of current word under cursor if
205
+ -- currently highlighted word equals one under cursor
206
+ if win_match.word == curword then
207
+ H.unhighlight(true)
208
+ H.highlight(true)
209
+ return
210
+ end
211
+
212
+ -- Stop highlighting previous match (if it exists)
213
+ H.unhighlight()
214
+
215
+ -- Delay highlighting
216
+ H.timer:start(
217
+ H.get_config().delay,
218
+ 0,
219
+ vim.schedule_wrap(function()
220
+ -- Ensure that always only one word is highlighted
221
+ H.unhighlight()
222
+ H.highlight()
223
+ end)
224
+ )
225
+ end
226
+
227
+ H.auto_unhighlight = function()
228
+ -- Stop any possible previous delayed highlighting
229
+ H.timer:stop()
230
+ H.unhighlight()
231
+ end
232
+
233
+ -- Highlighting ---------------------------------------------------------------
234
+ ---@param only_current boolean|nil Whether to forcefully highlight only current word
235
+ --- under cursor.
236
+ ---@private
237
+ H.highlight = function(only_current)
238
+ -- A modified version of https://stackoverflow.com/a/25233145
239
+ -- Using `matchadd()` instead of a simpler `:match` to tweak priority of
240
+ -- 'current word' highlighting: with `:match` it is higher than for
241
+ -- `incsearch` which is not convenient.
242
+ local win_id = vim.api.nvim_get_current_win()
243
+ if not vim.api.nvim_win_is_valid(win_id) then return end
244
+
245
+ if not H.should_highlight() then return end
246
+
247
+ H.window_matches[win_id] = H.window_matches[win_id] or {}
248
+
249
+ -- Add match highlight for current word under cursor
250
+ local current_word_pattern = [[\k*\%#\k*]]
251
+ local match_id_current = vim.fn.matchadd('MiniCursorwordCurrent', current_word_pattern, -1)
252
+ H.window_matches[win_id].id_current = match_id_current
253
+
254
+ -- Don't add main match id if not needed or if one is already present
255
+ if only_current or H.window_matches[win_id].id ~= nil then return end
256
+
257
+ -- Add match highlight for non-current word under cursor. NOTEs:
258
+ -- - Using `\(...\)\@!` allows to not match current word.
259
+ -- - Using 'very nomagic' ('\V') allows not escaping.
260
+ -- - Using `\<` and `\>` matches whole word (and not as part).
261
+ local curword = H.get_cursor_word()
262
+ local pattern = string.format([[\(%s\)\@!\&\V\<%s\>]], current_word_pattern, curword)
263
+ local match_id = vim.fn.matchadd('MiniCursorword', pattern, -1)
264
+
265
+ -- Store information about highlight
266
+ H.window_matches[win_id].id = match_id
267
+ H.window_matches[win_id].word = curword
268
+ end
269
+
270
+ ---@param only_current boolean|nil Whether to remove highlighting only of current
271
+ --- word under cursor.
272
+ ---@private
273
+ H.unhighlight = function(only_current)
274
+ -- Don't do anything if there is no valid information to act upon
275
+ local win_id = vim.api.nvim_get_current_win()
276
+ local win_match = H.window_matches[win_id]
277
+ if not vim.api.nvim_win_is_valid(win_id) or win_match == nil then return end
278
+
279
+ -- Use `pcall` because there is an error if match id is not present. It can
280
+ -- happen if something else called `clearmatches`.
281
+ pcall(vim.fn.matchdelete, win_match.id_current)
282
+ H.window_matches[win_id].id_current = nil
283
+
284
+ if not only_current then
285
+ pcall(vim.fn.matchdelete, win_match.id)
286
+ H.window_matches[win_id] = nil
287
+ end
288
+ end
289
+
290
+ H.should_highlight = function() return not H.is_disabled() and H.is_cursor_on_keyword() end
291
+
292
+ -- Utilities ------------------------------------------------------------------
293
+ H.error = function(msg) error('(mini.cursorword) ' .. msg, 0) end
294
+
295
+ H.check_type = function(name, val, ref, allow_nil)
296
+ if type(val) == ref or (ref == 'callable' and vim.is_callable(val)) or (allow_nil and val == nil) then return end
297
+ H.error(string.format('`%s` should be %s, not %s', name, ref, type(val)))
298
+ end
299
+
300
+ H.is_cursor_on_keyword = function()
301
+ local col = vim.fn.col('.')
302
+ local curchar = vim.api.nvim_get_current_line():sub(col, col)
303
+
304
+ -- Use `pcall()` to catch `E5108` (can happen in binary files, see #112)
305
+ local ok, match_res = pcall(vim.fn.match, curchar, '[[:keyword:]]')
306
+ return ok and match_res >= 0
307
+ end
308
+
309
+ H.get_cursor_word = function() return vim.fn.escape(vim.fn.expand('<cword>'), [[\/]]) end
310
+
311
+ return MiniCursorword