0
0
mirror of https://github.com/vim/vim.git synced 2025-10-25 09:04:09 -04:00

patch 9.1.1660: popups without decoration are positioned wrong at bottom of screen

Problem:  Popups without border/padding/title don't flip position when
          cursor is near bottom of screen, while decorated popups do
          flip correctly.
Solution: Use original height instead of truncated height for position
          inversion check, except for info popups to preserve existing
          behavior (glepnir).

fixes: #12546
closes: #18054

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
glepnir
2025-08-20 21:43:15 +02:00
committed by Christian Brabandt
parent bb1233d328
commit 38315295ef
4 changed files with 76 additions and 6 deletions

View File

@@ -0,0 +1,20 @@
| +0&#ffffff0@74
@75
@75
@75
@75
@75
@1|═+0#0000001#ffd7ff255@3| +0#0000000#ffffff0@4| +0#0000001#ffd7ff255|t|i|t|l|e| | +0#0000000#ffffff0@12| +0#0000001#ffd7ff255@3| +0#0000000#ffffff0@40
@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
@75
> @74
|:|c|a|l@1| |C|r|e|a|t|e|P|o|p|u|p|(|)| @37|1|9|,|0|-|1| @7|A|l@1|

View File

@@ -4570,4 +4570,53 @@ func Test_popupwin_firstline_after_scroll()
call StopVimInTerminal(buf)
endfunc
func Test_popupwin_bottom_position_without_decoration()
CheckScreendump
let lines =<< trim END
function! CreatePopup()
call popup_create(repeat(['asdf'], 10), {
\ 'pos': 'topleft',
\ 'col': 'cursor+1',
\ 'line': 'cursor',
\ 'border': [1, 0, 0, 0],
\ 'padding': [0, 0, 0, 0],
\ 'title': '',
\ })
call popup_create(repeat(['asdf'], 10), {
\ 'pos': 'topleft',
\ 'col': 'cursor+10',
\ 'line': 'cursor',
\ 'border': [0, 0, 0, 0],
\ 'padding': [0, 0, 0, 0],
\ 'title': 'title',
\ })
call popup_create(repeat(['asdf'], 10), {
\ 'pos': 'topleft',
\ 'col': 'cursor+20',
\ 'line': 'cursor',
\ 'border': [0, 0, 0, 0],
\ 'padding': [0, 0, 0, 0],
\ 'title': '',
\ })
call popup_create(repeat(['asdf'], 10), {
\ 'pos': 'topleft',
\ 'col': 'cursor+30',
\ 'line': 'cursor',
\ 'border': [0, 0, 0, 0],
\ 'padding': [1, 0, 0, 0],
\ 'title': '',
\ })
endfunction
END
call writefile(lines, 'XtestPopupBottomPostion', 'D')
let buf = RunVimInTerminal('-S XtestPopupBottomPostion', #{rows: 20})
call term_sendkeys(buf, 'a')
call term_sendkeys(buf, repeat("\<CR>", 18))
call TermWait(buf, 50)
call term_sendkeys(buf, "\<ESC>:call CreatePopup()\<CR>")
call TermWait(buf, 50)
call VerifyScreenDump(buf, 'Test_popupwin_bottom_position_without_decoration', {})
call StopVimInTerminal(buf)
endfunc
" vim: shiftwidth=2 sts=2