rcarriga / nvim-notify

A fancy, configurable, notification manager for NeoVim
MIT License
3.09k stars 83 forks source link

Avoid collision with the global status line #189

Open sassanh opened 1 year ago

sassanh commented 1 year ago

Similar issue: https://github.com/rcarriga/nvim-notify/issues/4

image

I'm using bottom up layout, and the notifications cover the status line. The value of these options in my setup may be relevant:

vim.opt.cmdheight = 0
vim.opt.laststatus = 3

Not sure if this is considered an issue with the plugin or if I just need to improve my setup.

ranomier commented 1 year ago

I have the same problem, i want to move the notification one row up.

Also it is visually displeasing, because it feels like it blinks. The status bar has a different color and that color suddenly changes two times.

ranomier commented 1 year ago

@sassanh This is a dirty fix:

diff --git a/lua/notify/stages/util.lua b/lua/notify/stages/util.lua
index cc68974..d20c6ae 100644
--- a/lua/notify/stages/util.lua
+++ b/lua/notify/stages/util.lua
@@ -88,6 +88,7 @@ function M.get_slot_range(direction)
   local top = vim.opt.tabline:get() == "" and 0 or 1
   local bottom = vim.opt.lines:get()
     - (vim.opt.cmdheight:get() + (vim.opt.laststatus:get() > 0 and 1 or 0))
+  local bottom = bottom - 1
   local left = 1
   local right = vim.opt.columns:get()
   if M.DIRECTION.TOP_DOWN == direction then
dasupradyumna commented 1 year ago

I also have the same issue, @rcarriga. Is it possible to include this change into the plugin? I'll be happy to open a PR for this minor change.

dasupradyumna commented 1 year ago

Hey guys, check out my PR and let me know if it fixes things for you.

Comment on the PR so Ronan can merge it sooner.

nullromo commented 9 months ago

For me, using fade_in_slide_out positions the notification correctly, while fade, slide, and static position it over the statusline.

Position with fade_in_slide_out 😄

Screenshot 2024-01-31 095455

Position with fade, slide, or static 😞

Screenshot 2024-01-31 095441

Not sure why the stages option affects the positioning of the notification.

tom-gora commented 4 months ago

This override works perfectly fine for me:

  {
    "rcarriga/nvim-notify",
    config = vim.schedule(function()
      local override = function(direction)
        local top = 0
        local bottom = vim.opt.lines:get()
            - (vim.opt.cmdheight:get() + (vim.opt.laststatus:get() > 0 and 1 or 0))
        if vim.wo.winbar then
          bottom = bottom - 1
        end
        local left = 1
        local right = vim.opt.columns:get()
        if direction == "top_down" then
          return top, bottom
        elseif direction == "bottom_up" then
          return bottom, top
        elseif direction == "left_right" then
          return left, right
        elseif direction == "right_left" then
          return right, left
        end
        error(string.format("Invalid direction: %s", direction))
      end
      local util = require("notify.stages.util")
      util.get_slot_range = override
    end),
-- ...
chardskarth commented 3 months ago

@tom-gora how are you setting the direction? In the docs, top_down is only a boolean config.

tom-gora commented 3 months ago

@chardskarth Have a look at my dots: LINK. Essentially I stole some code from some places and cobbled together a nice solution. direction is not a key here - it is a parameter passed into override function that returns values for notify.stages.util.get_slot_range

https://github.com/user-attachments/assets/79459fac-50f9-4f9d-837b-3ed1c7469113