diff --git a/init.lua b/init.lua index c80d8938..94951fb3 100644 --- a/init.lua +++ b/init.lua @@ -548,6 +548,7 @@ require('lazy').setup({ -- That is to say, every time a new file is opened that is associated with -- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this -- function will be executed to configure the current buffer + -- vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }), callback = function(event) @@ -617,6 +618,11 @@ require('lazy').setup({ -- -- When you move your cursor, the highlights will be cleared (the second autocommand). local client = vim.lsp.get_client_by_id(event.data.client_id) + + if client and client.server_capabilities.documentSymbolProvider then + require('nvim-navic').attach(client, event.buf) + end + if client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_documentHighlight, event.buf) then local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false }) vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { @@ -1046,3 +1052,7 @@ vim.o.foldexpr = "nvim_treesitter#foldexpr()" -- keep folds open by default vim.o.foldlevel = 99 vim.o.foldenable = true + +-- winbar setup +require('custom.winbar').setup() +vim.o.winbar = "%{%v:lua.require('custom.winbar').setup()%}" diff --git a/lazy-lock.json b/lazy-lock.json index fd8da0dc..fb20fe2f 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -1,30 +1,31 @@ { "LuaSnip": { "branch": "master", "commit": "458560534a73f7f8d7a11a146c801db00b081df0" }, - "blink.cmp": { "branch": "main", "commit": "bae4bae0eedd1fa55f34b685862e94a222d5c6f8" }, - "conform.nvim": { "branch": "master", "commit": "973f3cb73887d510321653044791d7937c7ec0fa" }, - "fidget.nvim": { "branch": "main", "commit": "2cb5edb2dd6700a958a446b20bb2be04d318da9d" }, - "gitsigns.nvim": { "branch": "main", "commit": "6e3c66548035e50db7bd8e360a29aec6620c3641" }, + "blink.cmp": { "branch": "main", "commit": "327fff91fe6af358e990be7be1ec8b78037d2138" }, + "conform.nvim": { "branch": "master", "commit": "fbcb4fa7f34bfea9be702ffff481a8e336ebf6ed" }, + "fidget.nvim": { "branch": "main", "commit": "3f5475949679953af6d78654db29b944fa826e6a" }, + "gitsigns.nvim": { "branch": "main", "commit": "1ee5c1fd068c81f9dd06483e639c2aa4587dc197" }, "guess-indent.nvim": { "branch": "main", "commit": "84a4987ff36798c2fc1169cbaff67960aed9776f" }, "harpoon": { "branch": "harpoon2", "commit": "ed1f853847ffd04b2b61c314865665e1dadf22c7" }, - "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, - "lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "7f0bf635082bb9b7d2b37766054526a6ccafdb85" }, + "lazy.nvim": { "branch": "main", "commit": "1ea3c4085785f460fb0e46d2fe1ee895f5f9e7c1" }, + "lazydev.nvim": { "branch": "main", "commit": "e28ce52fc7ff79fcb76f0e79ee6fb6182fca90b9" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "6bdb14f230de0904229ec367b410fb817e59b072" }, "mason-tool-installer.nvim": { "branch": "main", "commit": "517ef5994ef9d6b738322664d5fdd948f0fdeb46" }, - "mason.nvim": { "branch": "main", "commit": "7dc4facca9702f95353d5a1f87daf23d78e31c2a" }, - "mini.nvim": { "branch": "main", "commit": "0e9d1f972a91acf5a0513319099ba41f7c09c30a" }, - "neo-tree.nvim": { "branch": "main", "commit": "cea666ef965884414b1b71f6b39a537f9238bdb2" }, + "mason.nvim": { "branch": "main", "commit": "ad7146aa61dcaeb54fa900144d768f040090bff0" }, + "mini.nvim": { "branch": "main", "commit": "8a7cf7eee8d89bd1b83f6d72f7f3b5598e7ae2cb" }, + "neo-tree.nvim": { "branch": "main", "commit": "c4c168e459395275c552179a1baf9c3d885d6a74" }, "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, - "nvim-lint": { "branch": "master", "commit": "7ef127aaede2a4d5ad8df8321e2eb4e567f29594" }, - "nvim-lspconfig": { "branch": "master", "commit": "45ff1914044de7dbd4cd85053dc09f47312a2f4d" }, + "nvim-lint": { "branch": "master", "commit": "9da1fb942dd0668d5182f9c8dee801b9c190e2bb" }, + "nvim-lspconfig": { "branch": "master", "commit": "ac98db2f9f06a56498ec890a96928774eae412c3" }, + "nvim-navic": { "branch": "master", "commit": "f5eba192f39b453675d115351808bd51276d9de5" }, "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, - "nvim-web-devicons": { "branch": "master", "commit": "c2599a81ecabaae07c49ff9b45dcd032a8d90f1a" }, + "nvim-web-devicons": { "branch": "master", "commit": "b8221e42cf7287c4dcde81f232f58d7b947c210d" }, "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, "supermaven-nvim": { "branch": "main", "commit": "07d20fce48a5629686aefb0a7cd4b25e33947d50" }, "telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" }, "telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" }, "telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" }, - "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" }, - "tokyonight.nvim": { "branch": "main", "commit": "057ef5d260c1931f1dffd0f052c685dcd14100a3" }, + "todo-comments.nvim": { "branch": "main", "commit": "19d461ddd543e938eb22505fb03fa878800270b6" }, + "tokyonight.nvim": { "branch": "main", "commit": "d14614cbfc63b6037bfccd48bb982d2ad2003352" }, "vim-fugitive": { "branch": "master", "commit": "61b51c09b7c9ce04e821f6cf76ea4f6f903e3cf4" }, - "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" } + "which-key.nvim": { "branch": "main", "commit": "b4177e3eaf15fe5eb8357ebac2286d488be1ed00" } } diff --git a/lua/custom/plugins/init.lua b/lua/custom/plugins/init.lua index 871c8d3d..711783f1 100644 --- a/lua/custom/plugins/init.lua +++ b/lua/custom/plugins/init.lua @@ -63,5 +63,11 @@ return { harpoon:extend(harpoon_extensions.builtins.highlight_current_file()) end, }, + + -- Breadcrumbs + { + "SmiteshP/nvim-navic", + dependencies = 'neovim/nvim-lspconfig', + }, } -- vim: ts=2 sts=2 sw=2 et diff --git a/lua/custom/winbar.lua b/lua/custom/winbar.lua new file mode 100644 index 00000000..56dc6c1b --- /dev/null +++ b/lua/custom/winbar.lua @@ -0,0 +1,66 @@ +M = {} + +M.setup = function() + local function winbar_indent() + local indent = 0 + + -- line numbers + if vim.wo.number or vim.wo.relativenumber then + local numberwidth = vim.wo.numberwidth + if numberwidth == 0 then + -- auto width: digits in max line number + local max_lnum = vim.api.nvim_buf_line_count(0) + indent = indent + tostring(max_lnum):len() + else + indent = indent + numberwidth + end + end + + -- space between number + text + indent = indent + 2 + + -- signcolumn + if vim.wo.signcolumn ~= 'no' then + indent = indent + 1 + end + + return string.rep(' ', indent) + end + + local function winbar_icon(filepath) + if filepath == 'Filesystem' then + return ' ' + elseif filepath == 'Git' then + return ' ' + elseif filepath == 'Nvim' then + return ' ' + end + return ' ' + end + + -- file path + local filepath = vim.fn.expand('%:~:.') + -- override neo-tree default buffer name + if filepath == 'neo-tree filesystem [1]' then + filepath = 'Filesystem' + -- override fugitive default buffer name + elseif filepath:match('^fugitive://') then + filepath = 'Git' + elseif filepath == '' then + filepath = 'Nvim' + end + + local navic = require('nvim-navic') + local location = navic.is_available() and navic.get_location() or '' + + local indent = winbar_indent() + local icon = winbar_icon(filepath) + + if location ~= '' then + return indent .. icon .. filepath .. ' > ' .. location + end + + return indent .. icon .. filepath +end + +return M