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.
- package/.conda/retrovim.yaml +259 -0
- package/.conda/terax.icns +0 -0
- package/.conda/terax.ico +0 -0
- package/.conda/terax.png +0 -0
- package/.github/workflows/release.yml +95 -0
- package/.gitmodules +3 -0
- package/.npm/kanata_touchcursor.js +28 -0
- package/.npm/nvim.js +26 -0
- package/.npm/yazi.js +26 -0
- package/.npm/zsh.js +17 -0
- package/.pip/kanata_touchcursor/__init__.py +28 -0
- package/.pip/nvim/__init__.py +31 -0
- package/.pip/yazi/__init__.py +31 -0
- package/.pip/zsh/__init__.py +22 -0
- package/CHANGELOG.md +26 -0
- package/LICENSE +674 -0
- package/README.md +336 -0
- package/kanata/touchcursor.kbd +164 -0
- package/nvim/init.lua +813 -0
- package/nvim/plugins/mini.nvim/.github/DISCUSSION_TEMPLATE/q-a.yml +72 -0
- package/nvim/plugins/mini.nvim/.github/ISSUE_TEMPLATE/bug-report.yml +136 -0
- package/nvim/plugins/mini.nvim/.github/ISSUE_TEMPLATE/config.yml +5 -0
- package/nvim/plugins/mini.nvim/.github/ISSUE_TEMPLATE/feature-request.yml +75 -0
- package/nvim/plugins/mini.nvim/.github/PULL_REQUEST_TEMPLATE.md +2 -0
- package/nvim/plugins/mini.nvim/.github/workflows/quality-control.yml +150 -0
- package/nvim/plugins/mini.nvim/.pre-commit-config.yaml +20 -0
- package/nvim/plugins/mini.nvim/.stylua.toml +7 -0
- package/nvim/plugins/mini.nvim/.styluaignore +1 -0
- package/nvim/plugins/mini.nvim/CHANGELOG.md +1894 -0
- package/nvim/plugins/mini.nvim/CODE_OF_CONDUCT.md +132 -0
- package/nvim/plugins/mini.nvim/CONTRIBUTING.md +331 -0
- package/nvim/plugins/mini.nvim/LICENSE +21 -0
- package/nvim/plugins/mini.nvim/MAINTAINING.md +330 -0
- package/nvim/plugins/mini.nvim/Makefile +51 -0
- package/nvim/plugins/mini.nvim/README.md +261 -0
- package/nvim/plugins/mini.nvim/TESTING.md +1011 -0
- package/nvim/plugins/mini.nvim/benchmarks/starter/README.md +35 -0
- package/nvim/plugins/mini.nvim/benchmarks/starter/benchmark.sh +56 -0
- package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_dashboard-alpha.lua +21 -0
- package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_dashboard-original.lua +17 -0
- package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_dashboard-starter.lua +18 -0
- package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_empty.lua +4 -0
- package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_starter-default.lua +7 -0
- package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_startify-alpha.lua +10 -0
- package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_startify-original.lua +7 -0
- package/nvim/plugins/mini.nvim/benchmarks/starter/init-files/init_startify-starter.lua +20 -0
- package/nvim/plugins/mini.nvim/benchmarks/starter/install.sh +10 -0
- package/nvim/plugins/mini.nvim/benchmarks/starter/make_summary.py +68 -0
- package/nvim/plugins/mini.nvim/benchmarks/starter/startup-summary.md +10 -0
- package/nvim/plugins/mini.nvim/colors/miniautumn.lua +55 -0
- package/nvim/plugins/mini.nvim/colors/minicyan.lua +95 -0
- package/nvim/plugins/mini.nvim/colors/minischeme.lua +95 -0
- package/nvim/plugins/mini.nvim/colors/minispring.lua +53 -0
- package/nvim/plugins/mini.nvim/colors/minisummer.lua +49 -0
- package/nvim/plugins/mini.nvim/colors/miniwinter.lua +51 -0
- package/nvim/plugins/mini.nvim/colors/randomhue.lua +16 -0
- package/nvim/plugins/mini.nvim/doc/mini-ai.txt +889 -0
- package/nvim/plugins/mini.nvim/doc/mini-align.txt +923 -0
- package/nvim/plugins/mini.nvim/doc/mini-animate.txt +937 -0
- package/nvim/plugins/mini.nvim/doc/mini-base16.txt +285 -0
- package/nvim/plugins/mini.nvim/doc/mini-basics.txt +359 -0
- package/nvim/plugins/mini.nvim/doc/mini-bracketed.txt +622 -0
- package/nvim/plugins/mini.nvim/doc/mini-bufremove.txt +123 -0
- package/nvim/plugins/mini.nvim/doc/mini-clue.txt +760 -0
- package/nvim/plugins/mini.nvim/doc/mini-cmdline.txt +392 -0
- package/nvim/plugins/mini.nvim/doc/mini-colors.txt +880 -0
- package/nvim/plugins/mini.nvim/doc/mini-comment.txt +230 -0
- package/nvim/plugins/mini.nvim/doc/mini-completion.txt +477 -0
- package/nvim/plugins/mini.nvim/doc/mini-cursorword.txt +105 -0
- package/nvim/plugins/mini.nvim/doc/mini-deps.txt +590 -0
- package/nvim/plugins/mini.nvim/doc/mini-diff.txt +661 -0
- package/nvim/plugins/mini.nvim/doc/mini-doc.txt +434 -0
- package/nvim/plugins/mini.nvim/doc/mini-extra.txt +856 -0
- package/nvim/plugins/mini.nvim/doc/mini-files.txt +1018 -0
- package/nvim/plugins/mini.nvim/doc/mini-fuzzy.txt +160 -0
- package/nvim/plugins/mini.nvim/doc/mini-git.txt +425 -0
- package/nvim/plugins/mini.nvim/doc/mini-hipatterns.txt +489 -0
- package/nvim/plugins/mini.nvim/doc/mini-hues.txt +420 -0
- package/nvim/plugins/mini.nvim/doc/mini-icons.txt +508 -0
- package/nvim/plugins/mini.nvim/doc/mini-indentscope.txt +485 -0
- package/nvim/plugins/mini.nvim/doc/mini-input.txt +932 -0
- package/nvim/plugins/mini.nvim/doc/mini-jump.txt +202 -0
- package/nvim/plugins/mini.nvim/doc/mini-jump2d.txt +525 -0
- package/nvim/plugins/mini.nvim/doc/mini-keymap.txt +449 -0
- package/nvim/plugins/mini.nvim/doc/mini-map.txt +717 -0
- package/nvim/plugins/mini.nvim/doc/mini-misc.txt +431 -0
- package/nvim/plugins/mini.nvim/doc/mini-move.txt +181 -0
- package/nvim/plugins/mini.nvim/doc/mini-notify.txt +434 -0
- package/nvim/plugins/mini.nvim/doc/mini-nvim.txt +431 -0
- package/nvim/plugins/mini.nvim/doc/mini-operators.txt +472 -0
- package/nvim/plugins/mini.nvim/doc/mini-pairs.txt +346 -0
- package/nvim/plugins/mini.nvim/doc/mini-pick.txt +1535 -0
- package/nvim/plugins/mini.nvim/doc/mini-sessions.txt +239 -0
- package/nvim/plugins/mini.nvim/doc/mini-snippets.txt +1291 -0
- package/nvim/plugins/mini.nvim/doc/mini-splitjoin.txt +536 -0
- package/nvim/plugins/mini.nvim/doc/mini-starter.txt +618 -0
- package/nvim/plugins/mini.nvim/doc/mini-statusline.txt +361 -0
- package/nvim/plugins/mini.nvim/doc/mini-surround.txt +863 -0
- package/nvim/plugins/mini.nvim/doc/mini-tabline.txt +151 -0
- package/nvim/plugins/mini.nvim/doc/mini-test.txt +966 -0
- package/nvim/plugins/mini.nvim/doc/mini-trailspace.txt +91 -0
- package/nvim/plugins/mini.nvim/doc/mini-visits.txt +937 -0
- package/nvim/plugins/mini.nvim/logo.png +0 -0
- package/nvim/plugins/mini.nvim/lua/mini/ai.lua +2244 -0
- package/nvim/plugins/mini.nvim/lua/mini/align.lua +2076 -0
- package/nvim/plugins/mini.nvim/lua/mini/animate.lua +2127 -0
- package/nvim/plugins/mini.nvim/lua/mini/base16.lua +1752 -0
- package/nvim/plugins/mini.nvim/lua/mini/basics.lua +772 -0
- package/nvim/plugins/mini.nvim/lua/mini/bracketed.lua +2013 -0
- package/nvim/plugins/mini.nvim/lua/mini/bufremove.lua +283 -0
- package/nvim/plugins/mini.nvim/lua/mini/clue.lua +2096 -0
- package/nvim/plugins/mini.nvim/lua/mini/cmdline.lua +1182 -0
- package/nvim/plugins/mini.nvim/lua/mini/colors.lua +2483 -0
- package/nvim/plugins/mini.nvim/lua/mini/comment.lua +586 -0
- package/nvim/plugins/mini.nvim/lua/mini/completion.lua +2094 -0
- package/nvim/plugins/mini.nvim/lua/mini/cursorword.lua +311 -0
- package/nvim/plugins/mini.nvim/lua/mini/deps.lua +1660 -0
- package/nvim/plugins/mini.nvim/lua/mini/diff.lua +1938 -0
- package/nvim/plugins/mini.nvim/lua/mini/doc.lua +1371 -0
- package/nvim/plugins/mini.nvim/lua/mini/extra.lua +2290 -0
- package/nvim/plugins/mini.nvim/lua/mini/files.lua +3145 -0
- package/nvim/plugins/mini.nvim/lua/mini/fuzzy.lua +356 -0
- package/nvim/plugins/mini.nvim/lua/mini/git.lua +1737 -0
- package/nvim/plugins/mini.nvim/lua/mini/hipatterns.lua +1042 -0
- package/nvim/plugins/mini.nvim/lua/mini/hues.lua +2088 -0
- package/nvim/plugins/mini.nvim/lua/mini/icons.lua +2254 -0
- package/nvim/plugins/mini.nvim/lua/mini/indentscope.lua +1158 -0
- package/nvim/plugins/mini.nvim/lua/mini/init.lua +427 -0
- package/nvim/plugins/mini.nvim/lua/mini/input.lua +2183 -0
- package/nvim/plugins/mini.nvim/lua/mini/jump.lua +609 -0
- package/nvim/plugins/mini.nvim/lua/mini/jump2d.lua +1244 -0
- package/nvim/plugins/mini.nvim/lua/mini/keymap.lua +880 -0
- package/nvim/plugins/mini.nvim/lua/mini/map.lua +1709 -0
- package/nvim/plugins/mini.nvim/lua/mini/misc.lua +969 -0
- package/nvim/plugins/mini.nvim/lua/mini/move.lua +509 -0
- package/nvim/plugins/mini.nvim/lua/mini/notify.lua +938 -0
- package/nvim/plugins/mini.nvim/lua/mini/operators.lua +1349 -0
- package/nvim/plugins/mini.nvim/lua/mini/pairs.lua +657 -0
- package/nvim/plugins/mini.nvim/lua/mini/pick.lua +3876 -0
- package/nvim/plugins/mini.nvim/lua/mini/sessions.lua +689 -0
- package/nvim/plugins/mini.nvim/lua/mini/snippets.lua +2828 -0
- package/nvim/plugins/mini.nvim/lua/mini/splitjoin.lua +1132 -0
- package/nvim/plugins/mini.nvim/lua/mini/starter.lua +1599 -0
- package/nvim/plugins/mini.nvim/lua/mini/statusline.lua +686 -0
- package/nvim/plugins/mini.nvim/lua/mini/surround.lua +2388 -0
- package/nvim/plugins/mini.nvim/lua/mini/tabline.lua +564 -0
- package/nvim/plugins/mini.nvim/lua/mini/test.lua +2516 -0
- package/nvim/plugins/mini.nvim/lua/mini/trailspace.lua +215 -0
- package/nvim/plugins/mini.nvim/lua/mini/visits.lua +1577 -0
- package/nvim/plugins/mini.nvim/readmes/mini-ai.md +190 -0
- package/nvim/plugins/mini.nvim/readmes/mini-align.md +203 -0
- package/nvim/plugins/mini.nvim/readmes/mini-animate.md +214 -0
- package/nvim/plugins/mini.nvim/readmes/mini-base16.md +198 -0
- package/nvim/plugins/mini.nvim/readmes/mini-basics.md +184 -0
- package/nvim/plugins/mini.nvim/readmes/mini-bracketed.md +193 -0
- package/nvim/plugins/mini.nvim/readmes/mini-bufremove.md +139 -0
- package/nvim/plugins/mini.nvim/readmes/mini-clue.md +260 -0
- package/nvim/plugins/mini.nvim/readmes/mini-cmdline.md +183 -0
- package/nvim/plugins/mini.nvim/readmes/mini-colors.md +169 -0
- package/nvim/plugins/mini.nvim/readmes/mini-comment.md +183 -0
- package/nvim/plugins/mini.nvim/readmes/mini-completion.md +217 -0
- package/nvim/plugins/mini.nvim/readmes/mini-cursorword.md +137 -0
- package/nvim/plugins/mini.nvim/readmes/mini-deps.md +271 -0
- package/nvim/plugins/mini.nvim/readmes/mini-diff.md +289 -0
- package/nvim/plugins/mini.nvim/readmes/mini-doc.md +198 -0
- package/nvim/plugins/mini.nvim/readmes/mini-extra.md +158 -0
- package/nvim/plugins/mini.nvim/readmes/mini-files.md +247 -0
- package/nvim/plugins/mini.nvim/readmes/mini-fuzzy.md +134 -0
- package/nvim/plugins/mini.nvim/readmes/mini-git.md +168 -0
- package/nvim/plugins/mini.nvim/readmes/mini-hipatterns.md +176 -0
- package/nvim/plugins/mini.nvim/readmes/mini-hues.md +285 -0
- package/nvim/plugins/mini.nvim/readmes/mini-icons.md +183 -0
- package/nvim/plugins/mini.nvim/readmes/mini-indentscope.md +191 -0
- package/nvim/plugins/mini.nvim/readmes/mini-input.md +163 -0
- package/nvim/plugins/mini.nvim/readmes/mini-jump.md +161 -0
- package/nvim/plugins/mini.nvim/readmes/mini-jump2d.md +197 -0
- package/nvim/plugins/mini.nvim/readmes/mini-keymap.md +205 -0
- package/nvim/plugins/mini.nvim/readmes/mini-map.md +191 -0
- package/nvim/plugins/mini.nvim/readmes/mini-misc.md +145 -0
- package/nvim/plugins/mini.nvim/readmes/mini-move.md +163 -0
- package/nvim/plugins/mini.nvim/readmes/mini-notify.md +175 -0
- package/nvim/plugins/mini.nvim/readmes/mini-operators.md +193 -0
- package/nvim/plugins/mini.nvim/readmes/mini-pairs.md +158 -0
- package/nvim/plugins/mini.nvim/readmes/mini-pick.md +340 -0
- package/nvim/plugins/mini.nvim/readmes/mini-sessions.md +164 -0
- package/nvim/plugins/mini.nvim/readmes/mini-snippets.md +373 -0
- package/nvim/plugins/mini.nvim/readmes/mini-splitjoin.md +194 -0
- package/nvim/plugins/mini.nvim/readmes/mini-starter.md +176 -0
- package/nvim/plugins/mini.nvim/readmes/mini-statusline.md +155 -0
- package/nvim/plugins/mini.nvim/readmes/mini-surround.md +190 -0
- package/nvim/plugins/mini.nvim/readmes/mini-tabline.md +156 -0
- package/nvim/plugins/mini.nvim/readmes/mini-test.md +175 -0
- package/nvim/plugins/mini.nvim/readmes/mini-trailspace.md +137 -0
- package/nvim/plugins/mini.nvim/readmes/mini-visits.md +243 -0
- package/nvim/plugins/mini.nvim/scripts/dual_log.sh +13 -0
- package/nvim/plugins/mini.nvim/scripts/dual_push.sh +15 -0
- package/nvim/plugins/mini.nvim/scripts/dual_release.sh +102 -0
- package/nvim/plugins/mini.nvim/scripts/dual_sync.sh +115 -0
- package/nvim/plugins/mini.nvim/scripts/init-deps-example.lua +59 -0
- package/nvim/plugins/mini.nvim/scripts/lint-filename-length.sh +16 -0
- package/nvim/plugins/mini.nvim/scripts/lintcommit-ci.sh +18 -0
- package/nvim/plugins/mini.nvim/scripts/lintcommit.lua +393 -0
- package/nvim/plugins/mini.nvim/scripts/minidoc.lua +57 -0
- package/nvim/plugins/mini.nvim/scripts/minimal_init.lua +28 -0
- package/nvim/plugins/mini.nvim/scripts/minitest.lua +4 -0
- package/package.json +16 -0
- package/pyproject.toml +43 -0
- package/yazi/init.lua +12 -0
- package/yazi/keymap.toml +114 -0
- package/yazi/lesskey +5 -0
- package/yazi/plugins/bookmarks.yazi/main.lua +86 -0
- package/yazi/plugins/cd-git-root.yazi/main.lua +31 -0
- package/yazi/plugins/smart-enter.yazi/main.lua +11 -0
- package/yazi/theme.toml +26 -0
- package/yazi/yazi.toml +15 -0
- package/zsh/.zshrc +145 -0
- package/zsh/starship.toml +20 -0
- 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
|