diff options
Diffstat (limited to 'nvim/lua/config/statusline.lua')
| -rw-r--r-- | nvim/lua/config/statusline.lua | 55 |
1 files changed, 6 insertions, 49 deletions
diff --git a/nvim/lua/config/statusline.lua b/nvim/lua/config/statusline.lua index 8a9c75a..01339d0 100644 --- a/nvim/lua/config/statusline.lua +++ b/nvim/lua/config/statusline.lua | |||
| @@ -17,60 +17,17 @@ local function mode() | |||
| 17 | end | 17 | end |
| 18 | 18 | ||
| 19 | ---------------------------------------------------------------------- | 19 | ---------------------------------------------------------------------- |
| 20 | -- Git branch (buffer-lokal, gecached, kein redraw-spam) | ||
| 21 | ---------------------------------------------------------------------- | ||
| 22 | |||
| 23 | -- /dev/null gibt es unter Windows nicht (cmd.exe versteht das nicht als | ||
| 24 | -- Pfad und meldet "Das System kann den angegebenen Pfad nicht finden"). | ||
| 25 | local devnull = vim.fn.has("win32") == 1 and "NUL" or "/dev/null" | ||
| 26 | |||
| 27 | local function update_git_branch(bufnr) | ||
| 28 | bufnr = bufnr or 0 | ||
| 29 | |||
| 30 | -- nur in echten Dateien | ||
| 31 | if vim.bo[bufnr].buftype ~= "" then | ||
| 32 | vim.b[bufnr].git_branch = "" | ||
| 33 | return | ||
| 34 | end | ||
| 35 | |||
| 36 | -- kein Git → nichts tun | ||
| 37 | if vim.fn.executable("git") ~= 1 then | ||
| 38 | vim.b[bufnr].git_branch = "" | ||
| 39 | return | ||
| 40 | end | ||
| 41 | |||
| 42 | local branch = vim.fn.systemlist("git rev-parse --abbrev-ref HEAD 2>" .. devnull)[1] | ||
| 43 | if branch then | ||
| 44 | -- unter Windows bleibt an systemlist()-Zeilen mitunter ein | ||
| 45 | -- trailing \r haengen (^M in der Statuszeile sichtbar) | ||
| 46 | branch = branch:gsub("\r$", "") | ||
| 47 | end | ||
| 48 | |||
| 49 | if branch and branch ~= "" then | ||
| 50 | vim.b[bufnr].git_branch = " " .. branch .. " " | ||
| 51 | else | ||
| 52 | vim.b[bufnr].git_branch = "" | ||
| 53 | end | ||
| 54 | end | ||
| 55 | |||
| 56 | ---------------------------------------------------------------------- | ||
| 57 | -- Autocmd: Git nur bei Bedarf aktualisieren | ||
| 58 | ---------------------------------------------------------------------- | ||
| 59 | |||
| 60 | vim.api.nvim_create_autocmd({ "BufEnter", "FocusGained" }, { | ||
| 61 | callback = function(args) | ||
| 62 | update_git_branch(args.buf) | ||
| 63 | end, | ||
| 64 | }) | ||
| 65 | |||
| 66 | ---------------------------------------------------------------------- | ||
| 67 | -- Statusline-Sektionen (reine Darstellung, keine IO) | 20 | -- Statusline-Sektionen (reine Darstellung, keine IO) |
| 68 | ---------------------------------------------------------------------- | 21 | ---------------------------------------------------------------------- |
| 69 | 22 | ||
| 70 | -- Git-Branch (buffer-lokal, gecached, kein redraw-spam) | 23 | -- Git-Branch (gitsigns setzt vim.b.gitsigns_head asynchron pro Buffer) |
| 71 | 24 | ||
| 72 | local function git() | 25 | local function git() |
| 73 | return vim.b.git_branch or "" | 26 | local head = vim.b.gitsigns_head |
| 27 | |||
| 28 | if not head or head == "" then return "" end | ||
| 29 | |||
| 30 | return " " .. head .. " " | ||
| 74 | end | 31 | end |
| 75 | 32 | ||
| 76 | -- Git-Diff (buffer-lokal, kein redraw-spam) | 33 | -- Git-Diff (buffer-lokal, kein redraw-spam) |
