nvim-lualine / lualine.nvim

A blazing fast and easy to configure neovim statusline plugin written in pure lua.
MIT License
5.72k stars 455 forks source link

Bug: Status line filled with `^^^^^^` #1165

Closed carlesba closed 1 month ago

carlesba commented 7 months ago

Self Checks

How to reproduce the problem

Setup lualine with a theme (see minimal config).

After a few interactions in the editor, lualine feels all the gaps in the status line with ^^^^^^^^^^^^^^^^^^^^^^

Expected behaviour

Status line should not show ^^^^^^^^^^^^^

Actual behaviour

Status line shows ^^^^^^^^^^^^^^^^^^^

Minimal config to reproduce the issue

referencing the theme like this shows the bug

local evergreen =  {fg = "#7A8478",  bg = "#343F44"}

local theme = evergreen

lualine.setup({
        options = {
          theme = {
            normal = {a = theme, b = theme, c = theme},
            insert = {a = theme, b = theme},
            visual = {a = theme, b = theme},
            command = {a = theme, b = theme},
            replace = {a = theme, b = theme},
            inactive = {a = theme, b = theme, c = theme}
          },
        },
})

If you define a theme without referencing other table works fine

local theme =  {fg = "#7A8478",  bg = "#343F44"}

lualine.setup({
        options = {
          theme = {
            normal = {a = theme, b = theme, c = theme},
            insert = {a = theme, b = theme},
            visual = {a = theme, b = theme},
            command = {a = theme, b = theme},
            replace = {a = theme, b = theme},
            inactive = {a = theme, b = theme, c = theme}
          },
        },
})

Additional information

carlesba commented 7 months ago

After some more debugging. Doesn't seem related to the theme. Still, I'm getting that ^^^^^^^^^^^^^^^^ all the time. I'm only using lualine plugins:

require("lualine").setup(
      {
        options = {
          theme = {
            normal = {a = theme, b = theme, c = theme},
            insert = {a = theme, b = theme},
            visual = {a = theme, b = theme},
            command = {a = theme, b = theme},
            replace = {a = theme, b = theme},
            inactive = {a = theme, b = theme, c = theme}
          },
          section_separators = {"", ""},
          component_separators = {"", ""}
        },
        sections = {
          lualine_a = {
            -- {"branch", color = {fg = theme.statusline_2}}
          },
          lualine_b = {
            {
              "filename",
              file_status = true, -- Displays file status (readonly status, modified status)
              newfile_status = false, -- Display new file status (new file means no write after created)
              path = 3, -- 0: Just the filename
              -- 1: Relative path
              -- 2: Absolute path
              -- 3: Absolute path, with tilde as the home directory
              -- 4: Filename and parent dir, with tilde as the home directory

              shorting_target = 40, -- Shortens path to leave 40 spaces in the window
              -- for other components. (terrible name, any suggestions?)
              symbols = {
                modified = "[+]", -- Text to show when the file is modified.
                readonly = "[-]", -- Text to show when the file is non-modifiable or readonly.
                unnamed = "[No Name]", -- Text to show for unnamed buffers.
                newfile = "[New]" -- Text to show for newly created file before first write
              }
            },
            "diff"
          },
          lualine_c = {
            -- {
            --   require("noice").api.status.search.get,
            --   cond = require("noice").api.status.search.has,
            --   color = {fg = "#ff9e64"}
            -- }
          },
          -- lualine_x = {"branch"},
          lualine_x = {
            "searchcount"
          },
          lualine_y = {
            {
              "diagnostics",
              sources = {"nvim_lsp"},
              -- Displays diagnostics for the defined severity types
              sections = {"error", "warn", "info", "hint"},
              symbols = {error = "", warn = "", info = "", hint = ""},
              -- icons_enabled = true,
              colored = true, -- Displays diagnostics status in color if set to true.
              update_in_insert = false, -- Update diagnostics in insert mode.
              always_visible = true -- Show diagnostics even if there are none.
            }
          },
          lualine_z = {"location", "progress"}
        }
      }
    )
gzbd commented 6 months ago

I'm having the same problem, but the ^ chars appear only when the floating window is displayed (cmp completion, hovers etc).

carlesba commented 6 months ago

Here's a screenshot with the issue

Screenshot 2023-12-18 at 12 59 13

There must be some exception happening somewhere. This looks like the kind of output Lua would output when an error happens. I couldn't identify the source.

Saecki commented 6 months ago

I've had this bug for a few months now. I've yet to create a minimal reproducible example, but finally narrowed it down to this at least this combination that triggers it for me:

  1. require('lualine').setup() is called a second time
  2. There are separators set for the outer most sections on the outside, so either
    • lualine_a = { { <component> , separator = { left = "<anything in here>" }
    • lualine_z = { { <component> , separator = { right = "<anything in here>" }
  3. nvim-treesitter-context is open, guessing from the others probably other floating windows do the trick too.
gzbd commented 6 months ago

Today, I did a check with the latest version of nvim (compiled from source) and there bug is no longer there. I guess that the problem was somewhere in the nvim.

Saecki commented 6 months ago

Can confirm neovim 0.10 seems to fix the issue, so maybe close this?

carlesba commented 6 months ago

thanks!

carlesba commented 5 months ago

I'm still having the issue. I'm aware 0.10 is coming but latest stable version is yet 0.9.5. Keeping this opened until I can verify it's fixed.