Mercurial > dotfiles
changeset 783:335b1f5c242d
feat: add winbar with navic (LSP based location breadcrumbs)
author | zegervdv <zegervdv@me.com> |
---|---|
date | Fri, 28 Apr 2023 08:18:06 +0200 |
parents | 31605398117a |
children | be8b6ef385d5 |
files | .chezmoitemplates/init.lua .chezmoitemplates/lazy-lock.json |
diffstat | 2 files changed, 83 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/.chezmoitemplates/init.lua Fri Apr 28 07:12:49 2023 +0200 +++ b/.chezmoitemplates/init.lua Fri Apr 28 08:18:06 2023 +0200 @@ -92,7 +92,7 @@ fold_open = '-', done = '✓', }, - hg_cmd = { 'chg' }, + hg_cmd = { 'rhg' }, view = { merge_tool = { layout = 'diff4_mixed', @@ -426,6 +426,11 @@ }, { + 'SmiteshP/nvim-navic', + dependencies = { 'neovim/nvim-lspconfig' }, + }, + + { 'ThePrimeagen/refactoring.nvim', dependencies = { 'nvim-lua/plenary.nvim', @@ -666,7 +671,61 @@ statusline_default, } - require('heirline').setup { statusline = statusline } + local navic = require 'nvim-navic' + local winbar = { + fallthrough = false, + condition = function() return navic.is_available() end, + static = { + -- bit operation dark magic, see below... + enc = function(line, col, winnr) return bit.bor(bit.lshift(line, 16), bit.lshift(col, 6), winnr) end, + -- line: 16 bit (65535); col: 10 bit (1023); winnr: 6 bit (63) + dec = function(c) + local line = bit.rshift(c, 16) + local col = bit.band(bit.rshift(c, 6), 1023) + local winnr = bit.band(c, 63) + return line, col, winnr + end, + }, + init = function(self) + local data = navic.get_data() or {} + local children = {} + for i, loc in ipairs(data) do + local pos = self.enc(loc.scope.start.line, loc.scope.start.character, self.winnr) + local child = { + { + provider = loc.name, + on_click = { + minwid = pos, + callback = function(_, minwid) + local line, col, winnr = self.dec(minwid) + vim.api.nvim_win_set_cursor(vim.fn.win_getid(winnr), { line, col }) + end, + name = 'heirline_navic', + }, + }, + } + + if #data > 1 and i < #data then table.insert(child, { provider = ' > ' }) end + table.insert(children, child) + end + + self.child = self:new(children, 1) + end, + provider = function(self) return self.child:eval() end, + update = 'CursorMoved', + } + + require('heirline').setup { + statusline = statusline, + winbar = winbar, + opts = { + disable_winbar_cb = function(args) + return not conditions.buffer_matches { filetype = { 'python', 'verilog', 'systemverilog', 'cpp', 'c' } } + -- TODO: If LSP is not attached when opening the window, this does not work + -- return not navic.is_available(args.bufnr) + end, + }, + } end, }, @@ -1191,6 +1250,11 @@ client.server_capabilities.documentRangeFormattingProvider = false end + if client.server_capabilities.documentSymbolProvider then + local navic = require 'nvim-navic' + navic.attach(client, bufnr) + end + if client.supports_method 'textDocument/rangeFormatting' then local root = vim.fs.find({ '.git', '.hg' }, { path = client.config.root_dir }) local vcs = 'git'
--- a/.chezmoitemplates/lazy-lock.json Fri Apr 28 07:12:49 2023 +0200 +++ b/.chezmoitemplates/lazy-lock.json Fri Apr 28 08:18:06 2023 +0200 @@ -1,45 +1,44 @@ { - "Comment.nvim": { "branch": "master", "commit": "a89339ffbee677ab0521a483b6dac7e2e67c907e" }, - "catppuccin": { "branch": "main", "commit": "939be5f7fcbc15abeaad9214bb253a4551f6f6e6" }, + "Comment.nvim": { "branch": "master", "commit": "8d3aa5c22c2d45e788c7a5fe13ad77368b783c20" }, + "catppuccin": { "branch": "main", "commit": "73587f9c454da81679202f1668c30fea6cdafd5e" }, "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, - "cmp-cmdline": { "branch": "main", "commit": "af88e700417c6449719fc77f6f3745f88e42d5da" }, + "cmp-cmdline": { "branch": "main", "commit": "8fcc934a52af96120fe26358985c10c035984b53" }, "cmp-nvim-lsp": { "branch": "main", "commit": "0e6b2ed705ddcff9738ec4ea838141654f12eeef" }, "cmp-nvim-lsp-signature-help": { "branch": "main", "commit": "3d8912ebeb56e5ae08ef0906e3a54de1c66b92f1" }, "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, "cmp_luasnip": { "branch": "master", "commit": "18095520391186d634a0045dacaa346291096566" }, - "diffview.nvim": { "branch": "main", "commit": "f9ddbe798cb92854a383e2377482a49139a52c3d" }, "dirbuf.nvim": { "branch": "main", "commit": "ac7ad3c8e61630d15af1f6266441984f54f54fd2" }, - "espresso-tutti-colori.nvim": { "branch": "master", "commit": "3615bbd1baef650b70772a6d30895cc9edddc6bf" }, "firenvim": { "branch": "master", "commit": "ee4ef314bd990b2b05b7fbd95b857159e444a2fe" }, - "fzf-lua": { "branch": "main", "commit": "9deb70453cb9f1400b7c70a20d15d06ee15b6068" }, + "fzf-lua": { "branch": "main", "commit": "04d5a528a4159901607c11d46a398f45db2ed43f" }, "gitignore": { "branch": "master", "commit": "061c5c756713f42b92b6b69b0a081075319a60d0" }, "goto-preview": { "branch": "main", "commit": "82ce83ae589be7a59e4ec5cfbbf82d9f5eb8bded" }, "heirline.nvim": { "branch": "master", "commit": "2aed06a3a04c877dc64834e9b9dabf6ad3491bc8" }, "inc-rename.nvim": { "branch": "main", "commit": "fb1b7468f27d874feb209eac46be5205e20b7fd3" }, "indent-blankline.nvim": { "branch": "master", "commit": "018bd04d80c9a73d399c1061fa0c3b14a7614399" }, - "lazy.nvim": { "branch": "main", "commit": "903f0fe542fc35b74f3c09494f9c175346dfa76d" }, + "lazy.nvim": { "branch": "main", "commit": "57cce98dfdb2f2dd05a0567d89811e6d0505e13b" }, "lsp-format-modifications.nvim": { "branch": "main", "commit": "9c17f34c0ddd15c56c575a8a187d6a566ce9939b" }, - "luasnip": { "branch": "master", "commit": "e77fa9ad0b1f4fc6cddf54e51047e17e90c7d7ed" }, + "luasnip": { "branch": "master", "commit": "bc8ec05022743d3f08bda7a76c6bb5e9a9024581" }, "navigator.nvim": { "branch": "master", "commit": "91d86506ac2a039504d5205d32a1d4bc7aa57072" }, "neodev.nvim": { "branch": "main", "commit": "da1562e1e3df0e994ddc52cb4ba22376a5d7f2fc" }, "neoscroll.nvim": { "branch": "master", "commit": "d7601c26c8a183fa8994ed339e70c2d841253e93" }, "notifier.nvim": { "branch": "master", "commit": "afc9bf7ef8c31cfc716a2b849c34943a9788508b" }, "nrpattern.nvim": { "branch": "lua", "commit": "d9f692b4be3e41a3c25ba4651c2e595bac71b234" }, - "null-ls.nvim": { "branch": "main", "commit": "920947793ce6e59616644cb4766d442121508bf3" }, - "nvim-autopairs": { "branch": "master", "commit": "7566a86f44bb72ba2b1a609f528a27d93241502d" }, - "nvim-cmp": { "branch": "main", "commit": "e28fb7a730b1bd425fdddfdbd3d36bb84bd77611" }, - "nvim-lspconfig": { "branch": "master", "commit": "591d5038552c6cdf6cfc595bc351ccdbb8e62045" }, + "null-ls.nvim": { "branch": "main", "commit": "5855128178fa78293acdfb5b4e41ef046779240b" }, + "nvim-autopairs": { "branch": "master", "commit": "0fd6519d44eac3a6736aafdb3fe9da916c3701d4" }, + "nvim-cmp": { "branch": "main", "commit": "777450fd0ae289463a14481673e26246b5e38bf2" }, + "nvim-lspconfig": { "branch": "master", "commit": "e683951a35ade60f9e1768ef770bb42ffcc1d2b7" }, + "nvim-navic": { "branch": "master", "commit": "83dc174da915f9dbc9b51169e9b62a2e0d42b527" }, "nvim-osc52": { "branch": "main", "commit": "47ce7ee2396fa3ee4fb6b0e0ef14ba06f9c9bd31" }, "nvim-surround": { "branch": "main", "commit": "e6047128e57c1aff1566fb9f627521d2887fc77a" }, - "nvim-treesitter": { "branch": "master", "commit": "77ffc7edbe19db9dc2a71081005e2961c8940096" }, + "nvim-treesitter": { "branch": "master", "commit": "584ccea56e2d37b31ba292da2b539e1a4bb411ca" }, "nvim-treesitter-refactor": { "branch": "master", "commit": "65ad2eca822dfaec2a3603119ec3cc8826a7859e" }, - "nvim-treesitter-textobjects": { "branch": "master", "commit": "8673926519ea61069f9c1366d1ad1949316d250e" }, + "nvim-treesitter-textobjects": { "branch": "master", "commit": "b55fe6175f0001347a433c9df358c8cbf8a4e90f" }, "persistence.nvim": { "branch": "main", "commit": "c814fae5c37aa0aba9cd9da05df6e52b88d612c3" }, - "playground": { "branch": "master", "commit": "2b81a018a49f8e476341dfcb228b7b808baba68b" }, - "plenary.nvim": { "branch": "master", "commit": "9ac3e9541bbabd9d73663d757e4fe48a675bb054" }, + "playground": { "branch": "master", "commit": "db54848c7d878965bc31237059841f4e91e9de93" }, + "plenary.nvim": { "branch": "master", "commit": "253d34830709d690f013daf2853a9d21ad7accab" }, "refactoring.nvim": { "branch": "master", "commit": "e7c40818b2995016ede93c5620055206b1aba44f" }, "targets.vim": { "branch": "master", "commit": "642d3a4ce306264b05ea3219920b13ea80931767" }, - "vim-abolish": { "branch": "master", "commit": "cb3dcb220262777082f63972298d57ef9e9455ec" }, + "vim-abolish": { "branch": "master", "commit": "e5f0c592bc54bb8e3d6acc964a9db9f4037cbbf9" }, "vim-editorconfig": { "branch": "master", "commit": "5c3a5b4e7830a6885ec3e70fa5151c59afde2ad5" }, "vim-eunuch": { "branch": "master", "commit": "291ef1f8c8996ca7715df1032a35a27b12d7b5cf" }, "vim-fetch": { "branch": "master", "commit": "0a6ab17e84c7f4808bf05ec380121bce40b40d21" }, @@ -48,5 +47,5 @@ "vim-repeat": { "branch": "master", "commit": "24afe922e6a05891756ecf331f39a1f6743d3d5a" }, "vim-rsi": { "branch": "master", "commit": "4c673fb6c70652a09682c50a0e308184731ca70b" }, "vim-sensible": { "branch": "master", "commit": "3e878abfd6ddc6fb5dba48b41f2b72c3a2f8249f" }, - "which-key.nvim": { "branch": "main", "commit": "94cb020ff33a1e0e22fac1c41663d2c439741f17" } + "which-key.nvim": { "branch": "main", "commit": "4b73390eec680b4c061ea175eb32c0ff3412271d" } } \ No newline at end of file