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,283 @@
1
+ --- *mini.bufremove* Remove buffers
2
+ ---
3
+ --- MIT License Copyright (c) 2021 Evgeni Chasnovski
4
+
5
+ --- Features:
6
+ --- - Unshow, delete, and wipeout buffer while saving window layout
7
+ --- (opposite to builtin Neovim's commands).
8
+ ---
9
+ --- # Setup ~
10
+ ---
11
+ --- This module doesn't need setup, but it can be done to improve usability.
12
+ --- Setup with `require('mini.bufremove').setup({})` (replace `{}` with your
13
+ --- `config` table). It will create global Lua table `MiniBufremove` which you
14
+ --- can use for scripting or manually (with `:lua MiniBufremove.*`).
15
+ ---
16
+ --- See |MiniBufremove.config| for `config` structure and default values.
17
+ ---
18
+ --- This module doesn't have runtime options, so using `vim.b.minibufremove_config`
19
+ --- will have no effect here.
20
+ ---
21
+ --- To stop module from showing non-error feedback, set `config.silent = true`.
22
+ ---
23
+ --- # Notes ~
24
+ ---
25
+ --- 1. Which buffer to show in window(s) after its current buffer is removed is
26
+ --- decided by the algorithm:
27
+ --- - If alternate buffer (see |CTRL-^|) is listed (see |buflisted()|), use it.
28
+ --- - If previous listed buffer (see |:bprevious|) is different, use it.
29
+ --- - Otherwise create a new one with `nvim_create_buf(true, false)` and use it.
30
+ ---
31
+ --- # Disabling ~
32
+ ---
33
+ --- To disable core functionality, set `vim.g.minibufremove_disable` (globally) or
34
+ --- `vim.b.minibufremove_disable` (for a buffer) to `true`. Considering high
35
+ --- number of different scenarios and customization intentions, writing exact
36
+ --- rules for disabling module's functionality is left to user. See
37
+ --- |mini.nvim-disabling-recipes| for common recipes.
38
+ ---@tag MiniBufremove
39
+
40
+ ---@alias __bufremove_return boolean|nil Whether operation was successful. If `nil`, no operation was done.
41
+ ---@alias __bufremove_buf_id number|nil Buffer identifier (see |bufnr()|) to use.
42
+ --- Default: 0 for current.
43
+ ---@alias __bufremove_force boolean|nil Whether to ignore unsaved changes (using `!` version of
44
+ --- command). If `false`, calling with unsaved changes will prompt confirm dialog.
45
+ --- Default: `false`.
46
+
47
+ -- Module definition ==========================================================
48
+ local MiniBufremove = {}
49
+ local H = {}
50
+
51
+ --- Module setup
52
+ ---
53
+ ---@param config table|nil Module config table. See |MiniBufremove.config|.
54
+ ---
55
+ ---@usage >lua
56
+ --- require('mini.bufremove').setup() -- use default config
57
+ --- -- OR
58
+ --- require('mini.bufremove').setup({}) -- replace {} with your config table
59
+ --- <
60
+ MiniBufremove.setup = function(config)
61
+ -- TODO: Remove after Neovim=0.9 support is dropped
62
+ if vim.fn.has('nvim-0.10') == 0 then
63
+ vim.notify(
64
+ '(mini.bufremove) Neovim<0.10 is soft deprecated (module works but is not supported).'
65
+ .. " It will be deprecated after the next 'mini.nvim' release (module might not work)."
66
+ .. ' Please update your Neovim version.'
67
+ )
68
+ end
69
+
70
+ -- Export module
71
+ _G.MiniBufremove = MiniBufremove
72
+
73
+ -- Setup config
74
+ config = H.setup_config(config)
75
+
76
+ -- Apply config
77
+ H.apply_config(config)
78
+ end
79
+
80
+ --- Defaults ~
81
+ ---@eval return MiniDoc.afterlines_to_code(MiniDoc.current.eval_section)
82
+ MiniBufremove.config = {
83
+ -- Whether to disable showing non-error feedback
84
+ silent = false,
85
+ }
86
+ --minidoc_afterlines_end
87
+
88
+ -- Module functionality =======================================================
89
+ --- Delete buffer `buf_id` with |:bdelete| after unshowing it
90
+ ---
91
+ ---@param buf_id __bufremove_buf_id
92
+ ---@param force __bufremove_force
93
+ ---
94
+ ---@return __bufremove_return
95
+ MiniBufremove.delete = function(buf_id, force)
96
+ if H.is_disabled() then return end
97
+
98
+ return H.unshow_and_cmd(buf_id, force, 'bdelete')
99
+ end
100
+
101
+ --- Wipeout buffer `buf_id` with |:bwipeout| after unshowing it
102
+ ---
103
+ ---@param buf_id __bufremove_buf_id
104
+ ---@param force __bufremove_force
105
+ ---
106
+ ---@return __bufremove_return
107
+ MiniBufremove.wipeout = function(buf_id, force)
108
+ if H.is_disabled() then return end
109
+
110
+ return H.unshow_and_cmd(buf_id, force, 'bwipeout')
111
+ end
112
+
113
+ --- Stop showing buffer `buf_id` in all windows
114
+ ---
115
+ ---@param buf_id __bufremove_buf_id
116
+ ---
117
+ ---@return __bufremove_return
118
+ MiniBufremove.unshow = function(buf_id)
119
+ if H.is_disabled() then return end
120
+
121
+ buf_id = H.normalize_buf_id(buf_id)
122
+
123
+ if not H.is_valid_id(buf_id, 'buffer') then return false end
124
+
125
+ vim.tbl_map(MiniBufremove.unshow_in_window, vim.fn.win_findbuf(buf_id))
126
+
127
+ return true
128
+ end
129
+
130
+ --- Stop showing current buffer of window `win_id`
131
+ ---
132
+ --- Notes:
133
+ --- - If `win_id` represents |cmdline-window|, this function will close it.
134
+ ---
135
+ ---@param win_id number|nil Window identifier (see |win_getid()|) to use.
136
+ --- Default: 0 for current.
137
+ ---
138
+ ---@return __bufremove_return
139
+ MiniBufremove.unshow_in_window = function(win_id)
140
+ if H.is_disabled() then return nil end
141
+
142
+ win_id = (win_id == nil) and 0 or win_id
143
+
144
+ if not H.is_valid_id(win_id, 'window') then return false end
145
+
146
+ local cur_buf = vim.api.nvim_win_get_buf(win_id)
147
+
148
+ -- Temporary use window `win_id` as current to have Vim's functions working
149
+ vim.api.nvim_win_call(win_id, function()
150
+ if vim.fn.getcmdwintype() ~= '' then
151
+ vim.cmd('close!')
152
+ return
153
+ end
154
+
155
+ -- Try using alternate buffer
156
+ local alt_buf = vim.fn.bufnr('#')
157
+ if alt_buf ~= cur_buf and vim.fn.buflisted(alt_buf) == 1 then
158
+ vim.api.nvim_win_set_buf(win_id, alt_buf)
159
+ return
160
+ end
161
+
162
+ -- Try using previous buffer
163
+ local has_previous = pcall(vim.cmd, 'bprevious')
164
+ if has_previous and cur_buf ~= vim.api.nvim_win_get_buf(win_id) then return end
165
+
166
+ -- Create new listed scratch buffer
167
+ -- NOTE: leave it unnamed to allow `:h buffer-reuse`
168
+ local new_buf = vim.api.nvim_create_buf(true, false)
169
+ vim.api.nvim_win_set_buf(win_id, new_buf)
170
+ end)
171
+
172
+ return true
173
+ end
174
+
175
+ -- Helper data ================================================================
176
+ -- Module default config
177
+ H.default_config = vim.deepcopy(MiniBufremove.config)
178
+
179
+ -- Helper functionality =======================================================
180
+ -- Settings -------------------------------------------------------------------
181
+ H.setup_config = function(config)
182
+ H.check_type('config', config, 'table', true)
183
+ config = vim.tbl_deep_extend('force', vim.deepcopy(H.default_config), config or {})
184
+
185
+ H.check_type('silent', config.silent, 'boolean')
186
+
187
+ return config
188
+ end
189
+
190
+ H.apply_config = function(config) MiniBufremove.config = config end
191
+
192
+ H.is_disabled = function() return vim.g.minibufremove_disable == true or vim.b.minibufremove_disable == true end
193
+
194
+ -- Removing implementation ----------------------------------------------------
195
+ H.unshow_and_cmd = function(buf_id, force, cmd)
196
+ buf_id = H.normalize_buf_id(buf_id)
197
+ if not H.is_valid_id(buf_id, 'buffer') then
198
+ H.message(buf_id .. ' is not a valid buffer id.')
199
+ return false
200
+ end
201
+
202
+ if force == nil then force = false end
203
+ if type(force) ~= 'boolean' then
204
+ H.message('`force` should be boolean.')
205
+ return false
206
+ end
207
+
208
+ local fun_name = ({ ['bdelete'] = 'delete', ['bwipeout'] = 'wipeout' })[cmd]
209
+ if not H.can_remove(buf_id, force, fun_name) then return false end
210
+
211
+ -- Unshow buffer from all windows
212
+ MiniBufremove.unshow(buf_id)
213
+
214
+ -- Execute command
215
+ local command = string.format('%s! %d', cmd, buf_id)
216
+ -- Use `pcall` here to take care of case where `unshow()` was enough. This
217
+ -- can happen with 'bufhidden' option values:
218
+ -- - If `delete` then `unshow()` already `bdelete`d buffer. Without `pcall`
219
+ -- it gives E516 for `MiniBufremove.delete()` (`wipeout` works).
220
+ -- - If `wipe` then `unshow()` already `bwipeout`ed buffer. Without `pcall`
221
+ -- it gives E517 for module's `wipeout()` (still E516 for `delete()`).
222
+ --
223
+ -- Also account for executing command in command-line window.
224
+ -- It gives E11 if trying to execute command. The `unshow()` call should
225
+ -- close such window but somehow it doesn't seem to happen immediately.
226
+ local ok, result = pcall(vim.cmd, command)
227
+ if not (ok or result:find('E516%D') or result:find('E517%D') or result:find('E11%D')) then
228
+ H.message(result)
229
+ return false
230
+ end
231
+
232
+ return true
233
+ end
234
+
235
+ -- Utilities ------------------------------------------------------------------
236
+ H.error = function(msg) error('(mini.bufremove) ' .. msg, 0) end
237
+
238
+ H.check_type = function(name, val, ref, allow_nil)
239
+ if type(val) == ref or (ref == 'callable' and vim.is_callable(val)) or (allow_nil and val == nil) then return end
240
+ H.error(string.format('`%s` should be %s, not %s', name, ref, type(val)))
241
+ end
242
+
243
+ H.echo = function(msg, is_important)
244
+ if MiniBufremove.config.silent then return end
245
+
246
+ -- Construct message chunks
247
+ msg = type(msg) == 'string' and { { msg } } or msg
248
+ table.insert(msg, 1, { '(mini.bufremove) ', 'WarningMsg' })
249
+
250
+ -- Echo. Force redraw to ensure that it is effective (`:h echo-redraw`)
251
+ vim.cmd([[echo '' | redraw]])
252
+ vim.api.nvim_echo(msg, is_important, {})
253
+ end
254
+
255
+ H.message = function(msg) H.echo(msg, true) end
256
+
257
+ H.is_valid_id = function(x, type)
258
+ local is_valid = false
259
+ if type == 'buffer' then
260
+ is_valid = vim.api.nvim_buf_is_valid(x)
261
+ elseif type == 'window' then
262
+ is_valid = vim.api.nvim_win_is_valid(x)
263
+ end
264
+
265
+ if not is_valid then H.message(string.format('%s is not a valid %s id.', tostring(x), type)) end
266
+ return is_valid
267
+ end
268
+
269
+ -- Check if buffer can be removed with `MiniBufremove.fun_name` function
270
+ H.can_remove = function(buf_id, force, fun_name)
271
+ if force or not vim.bo[buf_id].modified then return true end
272
+ local msg = string.format('Buffer %d has unsaved changes. Do you want to force %s?', buf_id, fun_name)
273
+ return vim.fn.confirm(msg, '&No\n&Yes', 1, 'Question') == 2
274
+ end
275
+
276
+ -- Compute 'true' buffer id (strictly positive integer). Treat `nil` and 0 as
277
+ -- current buffer.
278
+ H.normalize_buf_id = function(buf_id)
279
+ if buf_id == nil or buf_id == 0 then return vim.api.nvim_get_current_buf() end
280
+ return buf_id
281
+ end
282
+
283
+ return MiniBufremove