forked from aniani/vim
patch 9.1.0949: popups inconsistently shifted to the left
Problem: popups inconsistently shifted to the left Solution: always shift non-fixed popups to the left when the text would be truncated (no matter whether 'wrap' is set or not) (Boris Staletic) fixes: #16231 closes: #16247 Signed-off-by: Boris Staletic <boris.staletic@protonmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
parent
83029a354e
commit
13c1153eef
@ -1,4 +1,4 @@
|
|||||||
*popup.txt* For Vim version 9.1. Last change: 2024 Jun 16
|
*popup.txt* For Vim version 9.1. Last change: 2024 Dec 19
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@ -705,7 +705,6 @@ The second argument of |popup_create()| is a dictionary with options:
|
|||||||
present. Use zero to reset.
|
present. Use zero to reset.
|
||||||
fixed When FALSE (the default), and:
|
fixed When FALSE (the default), and:
|
||||||
- "pos" is "botleft" or "topleft", and
|
- "pos" is "botleft" or "topleft", and
|
||||||
- "wrap" is off, and
|
|
||||||
- the popup would be truncated at the right edge of
|
- the popup would be truncated at the right edge of
|
||||||
the screen, then
|
the screen, then
|
||||||
the popup is moved to the left so as to fit the
|
the popup is moved to the left so as to fit the
|
||||||
|
@ -1434,17 +1434,7 @@ popup_adjust_position(win_T *wp)
|
|||||||
len = linetabsize(wp, lnum);
|
len = linetabsize(wp, lnum);
|
||||||
wp->w_width = w_width;
|
wp->w_width = w_width;
|
||||||
|
|
||||||
if (wp->w_p_wrap)
|
if (len + margin_width > maxwidth
|
||||||
{
|
|
||||||
while (len + margin_width > maxwidth)
|
|
||||||
{
|
|
||||||
++wrapped;
|
|
||||||
len -= maxwidth - margin_width;
|
|
||||||
wp->w_width = maxwidth;
|
|
||||||
used_maxwidth = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (len + margin_width > maxwidth
|
|
||||||
&& allow_adjust_left
|
&& allow_adjust_left
|
||||||
&& (wp->w_popup_pos == POPPOS_TOPLEFT
|
&& (wp->w_popup_pos == POPPOS_TOPLEFT
|
||||||
|| wp->w_popup_pos == POPPOS_BOTLEFT))
|
|| wp->w_popup_pos == POPPOS_BOTLEFT))
|
||||||
@ -1456,7 +1446,6 @@ popup_adjust_position(win_T *wp)
|
|||||||
{
|
{
|
||||||
int truncate_shift = shift_by - wp->w_wincol;
|
int truncate_shift = shift_by - wp->w_wincol;
|
||||||
|
|
||||||
len -= truncate_shift;
|
|
||||||
shift_by -= truncate_shift;
|
shift_by -= truncate_shift;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1464,6 +1453,16 @@ popup_adjust_position(win_T *wp)
|
|||||||
maxwidth += shift_by;
|
maxwidth += shift_by;
|
||||||
wp->w_width = maxwidth;
|
wp->w_width = maxwidth;
|
||||||
}
|
}
|
||||||
|
if (wp->w_p_wrap)
|
||||||
|
{
|
||||||
|
while (len + margin_width > maxwidth)
|
||||||
|
{
|
||||||
|
++wrapped;
|
||||||
|
len -= maxwidth - margin_width;
|
||||||
|
wp->w_width = maxwidth;
|
||||||
|
used_maxwidth = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (wp->w_width < len + margin_width)
|
if (wp->w_width < len + margin_width)
|
||||||
{
|
{
|
||||||
wp->w_width = len + margin_width;
|
wp->w_width = len + margin_width;
|
||||||
|
@ -31,7 +31,7 @@ func Test_simple_popup()
|
|||||||
\ .. "#{text: 'a comment line', props: [#{"
|
\ .. "#{text: 'a comment line', props: [#{"
|
||||||
\ .. "col: 3, length: 7, minwidth: 20, type: 'comment'"
|
\ .. "col: 3, length: 7, minwidth: 20, type: 'comment'"
|
||||||
\ .. "}]},"
|
\ .. "}]},"
|
||||||
\ .. "], #{line: 4, col: 9, minwidth: 20})\<CR>")
|
\ .. "], #{line: 4, col: 9, minwidth: 20, fixed: v:true})\<CR>")
|
||||||
call VerifyScreenDump(buf, 'Test_popupwin_02', {})
|
call VerifyScreenDump(buf, 'Test_popupwin_02', {})
|
||||||
|
|
||||||
" switch back to first tabpage
|
" switch back to first tabpage
|
||||||
@ -87,7 +87,7 @@ func Test_popup_with_border_and_padding()
|
|||||||
call popup_create('hello both', #{line: 2, col: 43, border: [], padding: [], highlight: 'Normal'})
|
call popup_create('hello both', #{line: 2, col: 43, border: [], padding: [], highlight: 'Normal'})
|
||||||
call popup_create('border TL', #{line: 6, col: 3, border: [1, 0, 0, 4]})
|
call popup_create('border TL', #{line: 6, col: 3, border: [1, 0, 0, 4]})
|
||||||
call popup_create('paddings', #{line: 6, col: 23, padding: range(1, 4)})
|
call popup_create('paddings', #{line: 6, col: 23, padding: range(1, 4)})
|
||||||
call popup_create('wrapped longer text', #{line: 8, col: 55, padding: [0, 3, 0, 3], border: [0, 1, 0, 1]})
|
call popup_create('wrapped longer text', #{line: 8, col: 55, padding: [0, 3, 0, 3], border: [0, 1, 0, 1], fixed: v:true})
|
||||||
call popup_create('right aligned text', #{line: 11, col: 56, wrap: 0, padding: [0, 3, 0, 3], border: [0, 1, 0, 1]})
|
call popup_create('right aligned text', #{line: 11, col: 56, wrap: 0, padding: [0, 3, 0, 3], border: [0, 1, 0, 1]})
|
||||||
call popup_create('X', #{line: 2, col: 73})
|
call popup_create('X', #{line: 2, col: 73})
|
||||||
call popup_create('X', #{line: 3, col: 74})
|
call popup_create('X', #{line: 3, col: 74})
|
||||||
@ -1970,7 +1970,7 @@ func Test_popup_position_adjust()
|
|||||||
" Anything placed past the last cell on the right of the screen is moved to
|
" Anything placed past the last cell on the right of the screen is moved to
|
||||||
" the left.
|
" the left.
|
||||||
"
|
"
|
||||||
" When wrapping is disabled, we also shift to the left to display on the
|
" We also shift to the left to display on the
|
||||||
" screen, unless fixed is set.
|
" screen, unless fixed is set.
|
||||||
|
|
||||||
" Entries for cases which don't vary based on wrapping.
|
" Entries for cases which don't vary based on wrapping.
|
||||||
@ -1995,9 +1995,10 @@ func Test_popup_position_adjust()
|
|||||||
" - expected height
|
" - expected height
|
||||||
let tests = [
|
let tests = [
|
||||||
\ #{
|
\ #{
|
||||||
\ comment: 'left-aligned with wrapping',
|
\ comment: 'left aligned with wrapping, fixed position',
|
||||||
\ options: #{
|
\ options: #{
|
||||||
\ wrap: 1,
|
\ wrap: 1,
|
||||||
|
\ fixed: v:true,
|
||||||
\ pos: 'botleft',
|
\ pos: 'botleft',
|
||||||
\ },
|
\ },
|
||||||
\ tests: both_wrap_tests + [
|
\ tests: both_wrap_tests + [
|
||||||
@ -2022,9 +2023,22 @@ func Test_popup_position_adjust()
|
|||||||
\ ],
|
\ ],
|
||||||
\ },
|
\ },
|
||||||
\ #{
|
\ #{
|
||||||
\ comment: 'left aligned without wrapping',
|
\ comment: 'left aligned with wrapping, no fixed position',
|
||||||
|
\ options: #{
|
||||||
|
\ wrap: 1,
|
||||||
|
\ fixed: v:false,
|
||||||
|
\ pos: 'botleft',
|
||||||
|
\ },
|
||||||
|
\ tests: both_wrap_tests + [
|
||||||
|
\ [ repeat('a', &columns*3), 5, &columns, 3, 1, &columns, 3],
|
||||||
|
\ [ repeat('a', 50), 5, &columns, 5, &columns - 50 + 1, 50, 1],
|
||||||
|
\ ],
|
||||||
|
\ },
|
||||||
|
\ #{
|
||||||
|
\ comment: 'left aligned without wrapping, no fixed position',
|
||||||
\ options: #{
|
\ options: #{
|
||||||
\ wrap: 0,
|
\ wrap: 0,
|
||||||
|
\ fixed: v:false,
|
||||||
\ pos: 'botleft',
|
\ pos: 'botleft',
|
||||||
\ },
|
\ },
|
||||||
\ tests: both_wrap_tests + [
|
\ tests: both_wrap_tests + [
|
||||||
@ -2048,7 +2062,7 @@ func Test_popup_position_adjust()
|
|||||||
\ ],
|
\ ],
|
||||||
\ },
|
\ },
|
||||||
\ #{
|
\ #{
|
||||||
\ comment: 'left aligned with fixed position',
|
\ comment: 'left aligned without wrapping, fixed position',
|
||||||
\ options: #{
|
\ options: #{
|
||||||
\ wrap: 0,
|
\ wrap: 0,
|
||||||
\ fixed: 1,
|
\ fixed: 1,
|
||||||
|
@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
949,
|
||||||
/**/
|
/**/
|
||||||
948,
|
948,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user