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