ray-x / lsp_signature.nvim

LSP signature hint as you type
Apache License 2.0
1.98k stars 53 forks source link

Hint keeps re-appearing after pressing toggle key #326

Closed drusmanbashir closed 1 month ago

drusmanbashir commented 1 month ago

Hi, I am using the default config with toggle_key set to "C-k". I only want the hint to appear when i press toggle key and to disappear when i press the key again. However, hint appears automatically in insert mode. It disappears momentarily when i press toggle key but reappears immediately (screecast attached).

My full config is below:

local M = {
    "ray-x/lsp_signature.nvim",
    event = "VeryLazy",
    -- opts = {},
    -- config = function(_, opts) require'lsp_signature'.setup(opts) end
}

local cfg = {
  debug = false, -- set to true to enable debug logging
  log_path = vim.fn.stdpath("cache") .. "/lsp_signature.log", -- log dir when debug is on
  -- default is  ~/.cache/nvim/lsp_signature.log
  verbose = false, -- show debug line number

  bind = true, -- This is mandatory, otherwise border config won't get registered.
               -- If you want to hook lspsaga or other signature handler, pls set to false
  doc_lines = 10, -- will show two lines of comment/doc(if there are more than two lines in doc, will be truncated);
                 -- set to 0 if you DO NOT want any API comments be shown
                 -- This setting only take effect in insert mode, it does not affect signature help in normal
                 -- mode, 10 by default

  max_height = 12, -- max height of signature floating_window
  max_width = 80, -- max_width of signature floating_window, line will be wrapped if exceed max_width
                  -- the value need >= 40
  wrap = true, -- allow doc/signature text wrap inside floating_window, useful if your lsp return doc/sig is too long
  floating_window = true, -- show hint in a floating window, set to false for virtual text only mode

  floating_window_above_cur_line = true, -- try to place the floating above the current line when possible Note:
  -- will set to true when fully tested, set to false will use whichever side has more space
  -- this setting will be helpful if you do not want the PUM and floating win overlap

  floating_window_off_x = 1, -- adjust float windows x position.
                             -- can be either a number or function
  floating_window_off_y = 0, -- adjust float windows y position. e.g -2 move window up 2 lines; 2 move down 2 lines
                              -- can be either number or function, see examples

  close_timeout = 4000, -- close floating window after ms when laster parameter is entered
  fix_pos = false,  -- set to true, the floating window will not auto-close until finish all parameters
  hint_enable = false, -- virtual hint enable
  -- hint_prefix = "🐼 ",  -- Panda for parameter, NOTE: for the terminal not support emoji, might crash
  -- hint_scheme = "String",
  -- hint_inline = function() return false end,  -- should the hint be inline(nvim 0.10 only)?  default false
  -- return true | 'inline' to show hint inline, return 'eol' to show hint at end of line, return false to disable
  -- return 'right_align' to display hint right aligned in the current line
  hi_parameter = "LspSignatureActiveParameter", -- how your parameter will be highlight
  handler_opts = {
    border = "rounded"   -- double, rounded, single, shadow, none, or a table of borders
  },

  always_trigger = false, -- sometime show signature on new line or in middle of parameter can be confusing, set it to false for #58

  auto_close_after = nil, -- autoclose signature float win after x sec, disabled if nil.
  extra_trigger_chars = {}, -- Array of extra characters that will trigger signature completion, e.g., {"(", ","}
  zindex = 200, -- by default it will be on top of all floating windows, set to <= 50 send it to bottom

  padding = '', -- character to pad on left and right of signature can be ' ', or '|'  etc

  transparency = nil, -- disabled by default, allow floating win transparent value 1~100
  shadow_blend = 36, -- if you using shadow as border use this set the opacity
  shadow_guibg = 'Black', -- if you using shadow as border use this set the color e.g. 'Green' or '#121315'
  timer_interval = 200, -- default timer check interval set to lower value if you want to reduce latency

  toggle_key = "<C-k>",
  toggle_key_flip_floatwin_setting = false, -- true: toggle floating_windows: true|false setting after toggle key pressed
     -- false: floating_windows setup will not change, toggle_key will pop up signature helper, but signature
     -- may not popup when typing depends on floating_window setting

  select_signature_key = nil, -- cycle to next signature, e.g. '<M-n>' function overloading
  move_cursor_key = nil, -- imap, use nvim_set_current_win to move cursor between current win and floating window
  -- e.g. move_cursor_key = '<M-p>',
  -- once moved to floating window, you can use <M-d>, <M-u> to move cursor up and down
  keymaps = {}  -- relate to move_cursor_key; the keymaps inside floating window
  -- e.g. keymaps = { 'j', '<C-o>j' } this map j to <C-o>j in floating window
  -- <M-d> and <M-u> are default keymaps to move cursor up and down
}

-- recommended:
function M.config()
  require'lsp_signature'.setup(cfg)
end
return M
![signature](https://github.com/ray-x/lsp_signature.nvim/assets/5282314/d5dbb5e8-511e-40ed-972e-ae159cd0a168)
drusmanbashir commented 1 month ago

Screencast: signature

Amleto commented 1 month ago

I am experiencing the same (nvim 0.10 )

ray-x commented 1 month ago

Mostly likely, you want to toggle_key_flip_floatwin_setting=true as well Or disable cursorhold by cursorhold_update = false

Amleto commented 1 month ago

Neither of those fix for me.

drusmanbashir commented 1 month ago

Thanks. toggle_key_flip_floatwin_setting=true seems to do the trick for me.

Amleto commented 1 month ago

My mistake, toggle_key_flip_floatwin_setting does work for me... (I mistakenly quoted true in my initial test)

ray-x commented 1 month ago

I will re-visit the experience of using the toggle key. But will close this for now.

Amleto commented 1 month ago

@ray-x actually I've found that with toggle_key_flip_floatwin_setting set true, if I hide the window with e.g. M-h, then after leaving insert mode and entering again, the float window does not appear.

After reading the doc for toggle_key_flip_floatwin_setting several times I finally think I understand this setting - I think it is doing the right thing for its purpose. But it doesn't match what I want, namely a way to hide the window just for this time in insert mode.

It seems to me that I truly want toggle_key=..., and toggle_key_flip_floatwin_setting=false.

So I think this should be an open bug

drusmanbashir commented 1 month ago

It automatically triggers every time I enter a function. Before it would only appear if i pressed the toggle key. How can we achieve that?

Amleto commented 1 week ago

@ray-x have you seen the last two comments?