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,564 @@
|
|
|
1
|
+
--- *mini.tabline* Tabline
|
|
2
|
+
---
|
|
3
|
+
--- MIT License Copyright (c) 2021 Evgeni Chasnovski
|
|
4
|
+
|
|
5
|
+
--- Key idea: show all listed buffers in readable way with minimal total width.
|
|
6
|
+
---
|
|
7
|
+
--- Features:
|
|
8
|
+
--- - Buffers are listed in the order of their identifier (see |bufnr()|).
|
|
9
|
+
---
|
|
10
|
+
--- - Different highlight groups for "states" of buffer affecting "buffer tabs".
|
|
11
|
+
---
|
|
12
|
+
--- - Buffer names are made unique by extending paths to files or appending
|
|
13
|
+
--- unique identifier to buffers without name.
|
|
14
|
+
---
|
|
15
|
+
--- - Current buffer is displayed "optimally centered" (in center of screen
|
|
16
|
+
--- while maximizing the total number of buffers shown) when there are many
|
|
17
|
+
--- buffers open.
|
|
18
|
+
---
|
|
19
|
+
--- - "Buffer tabs" are clickable if Neovim allows it.
|
|
20
|
+
---
|
|
21
|
+
--- - Extra information section in case of multiple Neovim tabpages.
|
|
22
|
+
---
|
|
23
|
+
--- - Truncation symbols which show if there are tabs to the left and/or right.
|
|
24
|
+
--- Exact characters are taken from |'listchars'| global value (`precedes` and
|
|
25
|
+
--- `extends` fields) and are shown only if |'list'| option is enabled.
|
|
26
|
+
---
|
|
27
|
+
--- What it doesn't do:
|
|
28
|
+
--- - Custom buffer order is not supported.
|
|
29
|
+
---
|
|
30
|
+
--- # Dependencies ~
|
|
31
|
+
---
|
|
32
|
+
--- Suggested dependencies (provide extra functionality, will work without them):
|
|
33
|
+
---
|
|
34
|
+
--- - Enabled |mini.icons| module to show icons near file names.
|
|
35
|
+
--- Falls back to [nvim-tree/nvim-web-devicons](https://github.com/nvim-tree/nvim-web-devicons)
|
|
36
|
+
--- or shows nothing.
|
|
37
|
+
---
|
|
38
|
+
--- # Setup ~
|
|
39
|
+
---
|
|
40
|
+
--- This module needs a setup with `require('mini.tabline').setup({})`
|
|
41
|
+
--- (replace `{}` with your `config` table). It will create global Lua table
|
|
42
|
+
--- `MiniTabline` which you can use for scripting or manually (with
|
|
43
|
+
--- `:lua MiniTabline.*`).
|
|
44
|
+
---
|
|
45
|
+
--- See |MiniTabline.config| for `config` structure and default values.
|
|
46
|
+
---
|
|
47
|
+
--- You can override runtime config settings locally to buffer inside
|
|
48
|
+
--- `vim.b.minitabline_config` which should have same structure as
|
|
49
|
+
--- `MiniTabline.config`. See |mini.nvim-buffer-local-config| for more details.
|
|
50
|
+
---
|
|
51
|
+
--- # Suggested option values ~
|
|
52
|
+
---
|
|
53
|
+
--- Some options are set automatically by |MiniTabline.setup()|:
|
|
54
|
+
--- - |'showtabline'| is set to 2 to always show tabline.
|
|
55
|
+
---
|
|
56
|
+
--- # Highlight groups ~
|
|
57
|
+
--- *MiniTabline-hl-groups*
|
|
58
|
+
---
|
|
59
|
+
--- - `MiniTablineCurrent` - buffer is current (has cursor in it).
|
|
60
|
+
--- - `MiniTablineVisible` - buffer is visible (displayed in some window).
|
|
61
|
+
--- - `MiniTablineHidden` - buffer is hidden (not displayed).
|
|
62
|
+
--- - `MiniTablineModifiedCurrent` - buffer is modified and current.
|
|
63
|
+
--- - `MiniTablineModifiedVisible` - buffer is modified and visible.
|
|
64
|
+
--- - `MiniTablineModifiedHidden` - buffer is modified and hidden.
|
|
65
|
+
--- - `MiniTablineFill` - unused right space of tabline.
|
|
66
|
+
--- - `MiniTablineTabpagesection` - section with tabpage information.
|
|
67
|
+
--- - `MiniTablineTrunc` - truncation symbols indicating more left/right tabs.
|
|
68
|
+
---
|
|
69
|
+
--- To change any highlight group, set it directly with |nvim_set_hl()|.
|
|
70
|
+
---
|
|
71
|
+
--- # Disabling ~
|
|
72
|
+
---
|
|
73
|
+
--- To disable (show empty tabline), set `vim.g.minitabline_disable` (globally) or
|
|
74
|
+
--- `vim.b.minitabline_disable` (for a buffer) to `true`. Considering high number
|
|
75
|
+
--- of different scenarios and customization intentions, writing exact rules
|
|
76
|
+
--- for disabling module's functionality is left to user. See
|
|
77
|
+
--- |mini.nvim-disabling-recipes| for common recipes.
|
|
78
|
+
---@tag MiniTabline
|
|
79
|
+
|
|
80
|
+
-- Module definition ==========================================================
|
|
81
|
+
local MiniTabline = {}
|
|
82
|
+
local H = {}
|
|
83
|
+
|
|
84
|
+
--- Module setup
|
|
85
|
+
---
|
|
86
|
+
---@param config table|nil Module config table. See |MiniTabline.config|.
|
|
87
|
+
---
|
|
88
|
+
---@usage >lua
|
|
89
|
+
--- require('mini.tabline').setup() -- use default config
|
|
90
|
+
--- -- OR
|
|
91
|
+
--- require('mini.tabline').setup({}) -- replace {} with your config table
|
|
92
|
+
--- <
|
|
93
|
+
MiniTabline.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.tabline) 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.MiniTabline = MiniTabline
|
|
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
|
+
|
|
118
|
+
-- Function to make tabs clickable
|
|
119
|
+
vim.api.nvim_exec(
|
|
120
|
+
[[function! MiniTablineSwitchBuffer(buf_id, clicks, button, mod)
|
|
121
|
+
execute 'buffer' a:buf_id
|
|
122
|
+
endfunction]],
|
|
123
|
+
false
|
|
124
|
+
)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
--- Defaults ~
|
|
128
|
+
---@eval return MiniDoc.afterlines_to_code(MiniDoc.current.eval_section)
|
|
129
|
+
---@text # Format ~
|
|
130
|
+
---
|
|
131
|
+
--- `config.format` is a callable that takes buffer identifier and pre-computed
|
|
132
|
+
--- label as arguments and returns a string with formatted label. Output will be
|
|
133
|
+
--- treated strictly as text (i.e. no |'statusline'| like constructs is allowed).
|
|
134
|
+
--- This function will be called for all displayable in tabline buffers.
|
|
135
|
+
--- Default: |MiniTabline.default_format()|.
|
|
136
|
+
---
|
|
137
|
+
--- Example of adding "+" suffix for modified buffers: >lua
|
|
138
|
+
---
|
|
139
|
+
--- function(buf_id, label)
|
|
140
|
+
--- local suffix = vim.bo[buf_id].modified and '+ ' or ''
|
|
141
|
+
--- return MiniTabline.default_format(buf_id, label) .. suffix
|
|
142
|
+
--- end
|
|
143
|
+
--- <
|
|
144
|
+
MiniTabline.config = {
|
|
145
|
+
-- Whether to show file icons (requires 'mini.icons')
|
|
146
|
+
show_icons = true,
|
|
147
|
+
|
|
148
|
+
-- Function which formats the tab label
|
|
149
|
+
-- By default surrounds with space and possibly prepends with icon
|
|
150
|
+
format = nil,
|
|
151
|
+
|
|
152
|
+
-- Where to show tabpage section in case of multiple vim tabpages.
|
|
153
|
+
-- One of 'left', 'right', 'none'.
|
|
154
|
+
tabpage_section = 'left',
|
|
155
|
+
}
|
|
156
|
+
--minidoc_afterlines_end
|
|
157
|
+
|
|
158
|
+
-- Module functionality =======================================================
|
|
159
|
+
--- Make string for |'tabline'|
|
|
160
|
+
MiniTabline.make_tabline_string = function()
|
|
161
|
+
if H.is_disabled() then return '' end
|
|
162
|
+
|
|
163
|
+
H.make_tabpage_section()
|
|
164
|
+
H.list_tabs()
|
|
165
|
+
H.finalize_labels()
|
|
166
|
+
H.fit_width()
|
|
167
|
+
|
|
168
|
+
return H.concat_tabs()
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
--- Default tab format
|
|
172
|
+
---
|
|
173
|
+
--- Used by default as `config.format`.
|
|
174
|
+
--- Prepends label with padded icon based on buffer's name (if `show_icon`
|
|
175
|
+
--- in |MiniTabline.config| is `true`) and surrounds label with single space.
|
|
176
|
+
--- Note: it is meant to be used only as part of `format` in |MiniTabline.config|.
|
|
177
|
+
---
|
|
178
|
+
---@param buf_id number Buffer identifier.
|
|
179
|
+
---@param label string Pre-computed label.
|
|
180
|
+
---
|
|
181
|
+
---@return string Formatted label.
|
|
182
|
+
MiniTabline.default_format = function(buf_id, label)
|
|
183
|
+
if H.get_icon == nil then return string.format(' %s ', label) end
|
|
184
|
+
return string.format(' %s %s ', H.get_icon(vim.api.nvim_buf_get_name(buf_id)), label)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
-- Helper data ================================================================
|
|
188
|
+
-- Module default config
|
|
189
|
+
H.default_config = vim.deepcopy(MiniTabline.config)
|
|
190
|
+
|
|
191
|
+
-- Table to keep track of tabs
|
|
192
|
+
H.tabs = {}
|
|
193
|
+
|
|
194
|
+
-- Keep track of initially unnamed buffers
|
|
195
|
+
H.unnamed_buffers_seq_ids = {}
|
|
196
|
+
|
|
197
|
+
-- Separator of file path
|
|
198
|
+
H.path_sep = package.config:sub(1, 1)
|
|
199
|
+
|
|
200
|
+
-- String with tabpage prefix
|
|
201
|
+
H.tabpage_section = ''
|
|
202
|
+
|
|
203
|
+
-- Data about truncation characters used when there are too much tabs
|
|
204
|
+
H.trunc = { left = '', right = '', needs_left = false, needs_right = false }
|
|
205
|
+
|
|
206
|
+
-- Buffer number of center buffer
|
|
207
|
+
H.center_buf_id = nil
|
|
208
|
+
|
|
209
|
+
-- Helper functionality =======================================================
|
|
210
|
+
-- Settings -------------------------------------------------------------------
|
|
211
|
+
H.setup_config = function(config)
|
|
212
|
+
H.check_type('config', config, 'table', true)
|
|
213
|
+
config = vim.tbl_deep_extend('force', vim.deepcopy(H.default_config), config or {})
|
|
214
|
+
|
|
215
|
+
H.check_type('show_icons', config.show_icons, 'boolean')
|
|
216
|
+
H.check_type('format', config.format, 'function', true)
|
|
217
|
+
H.check_type('tabpage_section', config.tabpage_section, 'string')
|
|
218
|
+
|
|
219
|
+
return config
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
H.apply_config = function(config)
|
|
223
|
+
MiniTabline.config = config
|
|
224
|
+
|
|
225
|
+
-- Make tabline always visible (essential for custom tabline)
|
|
226
|
+
vim.o.showtabline = 2
|
|
227
|
+
|
|
228
|
+
-- Cache truncation characters
|
|
229
|
+
H.cache_trunc_chars()
|
|
230
|
+
|
|
231
|
+
-- Set tabline string
|
|
232
|
+
vim.o.tabline = '%!v:lua.MiniTabline.make_tabline_string()'
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
H.create_autocommands = function()
|
|
236
|
+
local gr = vim.api.nvim_create_augroup('MiniTabline', {})
|
|
237
|
+
vim.api.nvim_create_autocmd('ColorScheme', { group = gr, callback = H.create_default_hl, desc = 'Ensure colors' })
|
|
238
|
+
|
|
239
|
+
local trunc_opts = { group = gr, pattern = { 'list', 'listchars' }, callback = H.cache_trunc_chars }
|
|
240
|
+
trunc_opts.desc = 'Ensure truncation characters'
|
|
241
|
+
vim.api.nvim_create_autocmd('OptionSet', trunc_opts)
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
--stylua: ignore
|
|
245
|
+
H.create_default_hl = function()
|
|
246
|
+
local set_default_hl = function(name, data)
|
|
247
|
+
data.default = true
|
|
248
|
+
vim.api.nvim_set_hl(0, name, data)
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
set_default_hl('MiniTablineCurrent', { link = 'TabLineSel' })
|
|
252
|
+
set_default_hl('MiniTablineVisible', { link = 'TabLineSel' })
|
|
253
|
+
set_default_hl('MiniTablineHidden', { link = 'TabLine' })
|
|
254
|
+
|
|
255
|
+
set_default_hl('MiniTablineModifiedCurrent', { link = 'StatusLine' })
|
|
256
|
+
set_default_hl('MiniTablineModifiedVisible', { link = 'StatusLine' })
|
|
257
|
+
set_default_hl('MiniTablineModifiedHidden', { link = 'StatusLineNC' })
|
|
258
|
+
|
|
259
|
+
set_default_hl('MiniTablineTabpagesection', { link = 'Search' })
|
|
260
|
+
set_default_hl('MiniTablineFill', { link = 'Normal' })
|
|
261
|
+
set_default_hl('MiniTablineTrunc', { link = 'MiniTablineHidden' })
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
H.is_disabled = function() return vim.g.minitabline_disable == true or vim.b.minitabline_disable == true end
|
|
265
|
+
|
|
266
|
+
H.get_config = function(config)
|
|
267
|
+
return vim.tbl_deep_extend('force', MiniTabline.config, vim.b.minitabline_config or {}, config or {})
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
-- Work with tabpages ---------------------------------------------------------
|
|
271
|
+
H.make_tabpage_section = function()
|
|
272
|
+
local n_tabpages = vim.fn.tabpagenr('$')
|
|
273
|
+
if n_tabpages == 1 or H.get_config().tabpage_section == 'none' then
|
|
274
|
+
H.tabpage_section = ''
|
|
275
|
+
return
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
local cur_tabpagenr = vim.fn.tabpagenr()
|
|
279
|
+
H.tabpage_section = string.format(' Tab %s/%s ', cur_tabpagenr, n_tabpages)
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
-- Work with tabs -------------------------------------------------------------
|
|
283
|
+
-- List tabs
|
|
284
|
+
H.list_tabs = function()
|
|
285
|
+
local tabs = {}
|
|
286
|
+
for _, buf_id in ipairs(vim.api.nvim_list_bufs()) do
|
|
287
|
+
if vim.bo[buf_id].buflisted then
|
|
288
|
+
local tab = { buf_id = buf_id }
|
|
289
|
+
tab['hl'] = H.construct_highlight(buf_id)
|
|
290
|
+
tab['tabfunc'] = '%' .. buf_id .. '@MiniTablineSwitchBuffer@'
|
|
291
|
+
tab['label'], tab['label_extender'] = H.construct_label_data(buf_id)
|
|
292
|
+
|
|
293
|
+
table.insert(tabs, tab)
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
H.tabs = tabs
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
-- Tab's highlight group
|
|
301
|
+
H.construct_highlight = function(buf_id)
|
|
302
|
+
local hl_type = buf_id == vim.api.nvim_get_current_buf() and 'Current'
|
|
303
|
+
or (vim.fn.bufwinnr(buf_id) > 0 and 'Visible' or 'Hidden')
|
|
304
|
+
if vim.bo[buf_id].modified then hl_type = 'Modified' .. hl_type end
|
|
305
|
+
|
|
306
|
+
return '%#MiniTabline' .. hl_type .. '#'
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
-- Tab's label and label extender
|
|
310
|
+
H.construct_label_data = function(buf_id)
|
|
311
|
+
local label, label_extender
|
|
312
|
+
|
|
313
|
+
local bufpath = vim.api.nvim_buf_get_name(buf_id)
|
|
314
|
+
if bufpath ~= '' then
|
|
315
|
+
-- Process path buffer
|
|
316
|
+
label = vim.fn.fnamemodify(bufpath, ':t')
|
|
317
|
+
label_extender = H.make_path_extender(buf_id)
|
|
318
|
+
else
|
|
319
|
+
-- Process unnamed buffer
|
|
320
|
+
label = H.make_unnamed_label(buf_id)
|
|
321
|
+
label_extender = function(x) return x end
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
return label, label_extender
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
H.make_path_extender = function(buf_id)
|
|
328
|
+
-- Add parent to current label (if possible)
|
|
329
|
+
return function(label)
|
|
330
|
+
local full_path = vim.api.nvim_buf_get_name(buf_id)
|
|
331
|
+
-- Using `vim.pesc` prevents effect of problematic characters (like '.')
|
|
332
|
+
local pattern = string.format('[^%s]+%s%s$', H.path_sep, H.path_sep, vim.pesc(label))
|
|
333
|
+
return string.match(full_path, pattern) or label
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
-- Work with unnamed buffers --------------------------------------------------
|
|
338
|
+
-- Unnamed buffers are tracked in `H.unnamed_buffers_seq_ids` for
|
|
339
|
+
-- disambiguation. This table is designed to store 'sequential' buffer
|
|
340
|
+
-- identifier. This approach allows to have the following behavior:
|
|
341
|
+
-- - Create three unnamed buffers.
|
|
342
|
+
-- - Delete second one.
|
|
343
|
+
-- - Tab label for third one remains the same.
|
|
344
|
+
H.make_unnamed_label = function(buf_id)
|
|
345
|
+
local buftype = vim.bo[buf_id].buftype
|
|
346
|
+
-- Differentiate quickfix/location lists and scratch/other unnamed buffers
|
|
347
|
+
local label = buftype == 'quickfix'
|
|
348
|
+
-- There can be only one quickfix buffer and many location buffers
|
|
349
|
+
and (vim.fn.getqflist({ qfbufnr = true }).qfbufnr == buf_id and '*quickfix*' or '*location*')
|
|
350
|
+
or ((buftype == 'nofile' or buftype == 'acwrite') and '!' or '*')
|
|
351
|
+
|
|
352
|
+
-- Possibly add tracking id
|
|
353
|
+
local unnamed_id = H.get_unnamed_id(buf_id)
|
|
354
|
+
if unnamed_id > 1 then label = string.format('%s(%d)', label, unnamed_id) end
|
|
355
|
+
|
|
356
|
+
return label
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
H.get_unnamed_id = function(buf_id)
|
|
360
|
+
-- Use existing sequential id if possible
|
|
361
|
+
local seq_id = H.unnamed_buffers_seq_ids[buf_id]
|
|
362
|
+
if seq_id ~= nil then return seq_id end
|
|
363
|
+
|
|
364
|
+
-- Cache sequential id for currently unnamed buffer `buf_id`
|
|
365
|
+
H.unnamed_buffers_seq_ids[buf_id] = vim.tbl_count(H.unnamed_buffers_seq_ids) + 1
|
|
366
|
+
return H.unnamed_buffers_seq_ids[buf_id]
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
-- Work with labels -----------------------------------------------------------
|
|
370
|
+
H.finalize_labels = function()
|
|
371
|
+
if #H.tabs == 0 then return end
|
|
372
|
+
|
|
373
|
+
-- Deduplicate
|
|
374
|
+
local nonunique_buf_ids = H.get_nonunique_buf_ids()
|
|
375
|
+
while #nonunique_buf_ids > 0 do
|
|
376
|
+
local nothing_changed = true
|
|
377
|
+
|
|
378
|
+
-- Extend labels
|
|
379
|
+
for _, buf_id in ipairs(nonunique_buf_ids) do
|
|
380
|
+
local tab = H.tabs[buf_id]
|
|
381
|
+
local old_label = tab.label
|
|
382
|
+
tab.label = tab.label_extender(tab.label)
|
|
383
|
+
if old_label ~= tab.label then nothing_changed = false end
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
if nothing_changed then break end
|
|
387
|
+
|
|
388
|
+
nonunique_buf_ids = H.get_nonunique_buf_ids()
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
-- Format labels
|
|
392
|
+
local config = H.get_config()
|
|
393
|
+
|
|
394
|
+
-- - Ensure cached `get_icon` for `default_format` (for better performance)
|
|
395
|
+
H.ensure_get_icon(config)
|
|
396
|
+
|
|
397
|
+
-- - Apply formatting
|
|
398
|
+
local format = config.format or MiniTabline.default_format
|
|
399
|
+
for _, tab in pairs(H.tabs) do
|
|
400
|
+
tab.label = format(tab.buf_id, tab.label)
|
|
401
|
+
end
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
H.get_nonunique_buf_ids = function()
|
|
405
|
+
local label_counts = {}
|
|
406
|
+
for _, tab in ipairs(H.tabs) do
|
|
407
|
+
label_counts[tab.label] = (label_counts[tab.label] or 0) + 1
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
local res = {}
|
|
411
|
+
for i, tab in ipairs(H.tabs) do
|
|
412
|
+
if label_counts[tab.label] > 1 then table.insert(res, i) end
|
|
413
|
+
end
|
|
414
|
+
return res
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
-- Fit tabline to maximum displayed width -------------------------------------
|
|
418
|
+
H.fit_width = function()
|
|
419
|
+
if #H.tabs == 0 then return end
|
|
420
|
+
|
|
421
|
+
local cur_buf = vim.api.nvim_get_current_buf()
|
|
422
|
+
if vim.bo[cur_buf].buflisted then H.center_buf_id = cur_buf end
|
|
423
|
+
|
|
424
|
+
-- Compute label width data
|
|
425
|
+
local center_offset = 1
|
|
426
|
+
local tot_width = 0
|
|
427
|
+
for _, tab in pairs(H.tabs) do
|
|
428
|
+
tab.label_width = H.strwidth(tab.label)
|
|
429
|
+
tab.chars_on_left = tot_width
|
|
430
|
+
|
|
431
|
+
tot_width = tot_width + tab.label_width
|
|
432
|
+
|
|
433
|
+
if tab.buf_id == H.center_buf_id then
|
|
434
|
+
-- Make right end of 'center tab' to be always displayed in center in
|
|
435
|
+
-- case of truncation
|
|
436
|
+
center_offset = tot_width
|
|
437
|
+
end
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
local display_interval = H.compute_display_interval(center_offset, tot_width)
|
|
441
|
+
|
|
442
|
+
H.truncate_tabs_display(display_interval)
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
H.compute_display_interval = function(center_offset, tabline_width)
|
|
446
|
+
-- left - first character to be displayed (starts with 1)
|
|
447
|
+
-- right - last character to be displayed
|
|
448
|
+
-- Conditions to be satisfied:
|
|
449
|
+
-- 1) right - left + 1 = math.min(tot_width, tabline_width)
|
|
450
|
+
-- 2) 1 <= left <= tabline_width; 1 <= right <= tabline_width
|
|
451
|
+
|
|
452
|
+
local tot_width = vim.o.columns - H.strwidth(H.tabpage_section)
|
|
453
|
+
|
|
454
|
+
-- Usage of `math.floor` is crucial to avoid non-integer values which might
|
|
455
|
+
-- affect total width of output tabline string.
|
|
456
|
+
-- Using `floor` instead of `ceil` has effect when `tot_width` is odd:
|
|
457
|
+
-- - `floor` makes "true center" to be between second to last and last label
|
|
458
|
+
-- character (usually non-space and space).
|
|
459
|
+
-- - `ceil` - between last character of center label and first character of
|
|
460
|
+
-- next label (both whitespaces).
|
|
461
|
+
local right = math.min(tabline_width, math.floor(center_offset + 0.5 * tot_width))
|
|
462
|
+
local left = math.max(1, right - tot_width + 1)
|
|
463
|
+
right = left + math.min(tot_width, tabline_width) - 1
|
|
464
|
+
|
|
465
|
+
return { left, right }
|
|
466
|
+
end
|
|
467
|
+
|
|
468
|
+
H.truncate_tabs_display = function(display_interval)
|
|
469
|
+
local display_left, display_right = display_interval[1], display_interval[2]
|
|
470
|
+
|
|
471
|
+
local tabs, first, last = {}, nil, nil
|
|
472
|
+
for i, tab in ipairs(H.tabs) do
|
|
473
|
+
local tab_left = tab.chars_on_left + 1
|
|
474
|
+
local tab_right = tab.chars_on_left + tab.label_width
|
|
475
|
+
if (display_left <= tab_right) and (tab_left <= display_right) then
|
|
476
|
+
-- Process tab that should be displayed (even partially)
|
|
477
|
+
local n_trunc_left = math.max(0, display_left - tab_left)
|
|
478
|
+
local n_trunc_right = math.max(0, tab_right - display_right)
|
|
479
|
+
|
|
480
|
+
-- Take desired amount of characters starting from `n_trunc_left`
|
|
481
|
+
tab.label = vim.fn.strcharpart(tab.label, n_trunc_left, tab.label_width - n_trunc_right)
|
|
482
|
+
|
|
483
|
+
table.insert(tabs, tab)
|
|
484
|
+
|
|
485
|
+
-- Keep track of the shown tab range for truncation characters
|
|
486
|
+
first, last = first or i, i
|
|
487
|
+
end
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
-- Truncate first and/or last tabs if there is anything to the left/right
|
|
491
|
+
H.trunc.needs_left = H.trunc.left ~= '' and (first > 1 or H.strwidth(tabs[1].label) < tabs[1].label_width)
|
|
492
|
+
if H.trunc.needs_left then tabs[1].label = vim.fn.strcharpart(tabs[1].label, 1) end
|
|
493
|
+
|
|
494
|
+
local n = #tabs
|
|
495
|
+
H.trunc.needs_right = H.trunc.right ~= '' and (last < #H.tabs or H.strwidth(tabs[n].label) < tabs[n].label_width)
|
|
496
|
+
if H.trunc.needs_right then tabs[n].label = vim.fn.strcharpart(tabs[n].label, 0, H.strwidth(tabs[n].label) - 1) end
|
|
497
|
+
|
|
498
|
+
H.tabs = tabs
|
|
499
|
+
end
|
|
500
|
+
|
|
501
|
+
H.cache_trunc_chars = function()
|
|
502
|
+
local trunc_chars = { left = '', right = '' }
|
|
503
|
+
if vim.go.list then
|
|
504
|
+
local listchars = vim.go.listchars
|
|
505
|
+
trunc_chars.left = listchars:match('precedes:(.[^,]*)') or ''
|
|
506
|
+
trunc_chars.right = listchars:match('extends:(.[^,]*)') or ''
|
|
507
|
+
end
|
|
508
|
+
H.trunc = trunc_chars
|
|
509
|
+
end
|
|
510
|
+
|
|
511
|
+
-- Concatenate tabs into single tablien string --------------------------------
|
|
512
|
+
H.concat_tabs = function()
|
|
513
|
+
-- NOTE: it is assumed that all padding is incorporated into labels
|
|
514
|
+
local t = {}
|
|
515
|
+
if H.trunc.needs_left then table.insert(t, '%#MiniTablineTrunc#' .. H.trunc.left:gsub('%%', '%%%%')) end
|
|
516
|
+
for _, tab in ipairs(H.tabs) do
|
|
517
|
+
-- Escape '%' in labels
|
|
518
|
+
table.insert(t, tab.hl .. tab.tabfunc .. tab.label:gsub('%%', '%%%%'))
|
|
519
|
+
end
|
|
520
|
+
if H.trunc.needs_right then table.insert(t, '%#MiniTablineTrunc#' .. H.trunc.right:gsub('%%', '%%%%')) end
|
|
521
|
+
|
|
522
|
+
-- Usage of `%X` makes filled space to the right "non-clickable"
|
|
523
|
+
local res = table.concat(t, '') .. '%X%#MiniTablineFill#'
|
|
524
|
+
|
|
525
|
+
-- Add tabpage section
|
|
526
|
+
if H.tabpage_section ~= '' then
|
|
527
|
+
local position = H.get_config().tabpage_section
|
|
528
|
+
if position == 'left' then res = '%#MiniTablineTabpagesection#' .. H.tabpage_section .. res end
|
|
529
|
+
if position == 'right' then res = res .. '%=%#MiniTablineTabpagesection#' .. H.tabpage_section end
|
|
530
|
+
end
|
|
531
|
+
|
|
532
|
+
return res
|
|
533
|
+
end
|
|
534
|
+
|
|
535
|
+
-- Utilities ------------------------------------------------------------------
|
|
536
|
+
H.error = function(msg) error('(mini.tabline) ' .. msg, 0) end
|
|
537
|
+
|
|
538
|
+
H.check_type = function(name, val, ref, allow_nil)
|
|
539
|
+
if type(val) == ref or (ref == 'callable' and vim.is_callable(val)) or (allow_nil and val == nil) then return end
|
|
540
|
+
H.error(string.format('`%s` should be %s, not %s', name, ref, type(val)))
|
|
541
|
+
end
|
|
542
|
+
|
|
543
|
+
H.strwidth = function(x) return vim.api.nvim_strwidth(x) end
|
|
544
|
+
|
|
545
|
+
H.ensure_get_icon = function(config)
|
|
546
|
+
if not config.show_icons then
|
|
547
|
+
-- Show no icon
|
|
548
|
+
H.get_icon = nil
|
|
549
|
+
elseif H.get_icon ~= nil then
|
|
550
|
+
-- Cache only once
|
|
551
|
+
return
|
|
552
|
+
elseif _G.MiniIcons ~= nil then
|
|
553
|
+
-- Prefer 'mini.icons'
|
|
554
|
+
H.get_icon = function(name) return (_G.MiniIcons.get('file', name)) end
|
|
555
|
+
else
|
|
556
|
+
-- Try falling back to 'nvim-web-devicons'
|
|
557
|
+
local has_devicons, devicons = pcall(require, 'nvim-web-devicons')
|
|
558
|
+
if not has_devicons then return end
|
|
559
|
+
-- Use basename because it makes exact file name matching work
|
|
560
|
+
H.get_icon = function(name) return (devicons.get_icon(vim.fn.fnamemodify(name, ':t'), nil, { default = true })) end
|
|
561
|
+
end
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
return MiniTabline
|