]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1707: Cannot wrap around in popup_filter_menu() v9.0.1707
authorChristian Brabandt <cb@256bit.org>
Sun, 13 Aug 2023 17:25:28 +0000 (19:25 +0200)
committerChristian Brabandt <cb@256bit.org>
Sun, 13 Aug 2023 17:27:46 +0000 (19:27 +0200)
Problem: Cannot wrap around in popup_filter_menu()
Solution: Allow to wrap around by default

Currently, it is not possible, to wrap around at the end of the list
using e.g. down (and go back to the top) or up at the beginning of the
list and go directly to the last item. This is not consistent behaviour
with e.g. how the pum-menu currently works, so let's just allow this.

Also adjust tests about it.

closes: #12689
closes: #12693

Signed-off-by: Christian Brabandt <cb@256bit.org>
src/popupwin.c
src/testdir/dumps/Test_popupwin_menu_scroll_3.dump
src/testdir/dumps/Test_popupwin_menu_scroll_3a.dump [new file with mode: 0644]
src/testdir/dumps/Test_popupwin_menu_scroll_6.dump
src/testdir/dumps/Test_popupwin_menu_scroll_6a.dump [new file with mode: 0644]
src/testdir/test_popupwin.vim
src/version.c

index 9f76cb16b68371bfa7beadb4bcd8fca1bda045e0..4f72d072030d1a18feb106e32cf839ce3b1d5819 100644 (file)
@@ -2583,12 +2583,20 @@ f_popup_filter_menu(typval_T *argvars, typval_T *rettv)
     res.v_type = VAR_NUMBER;
 
     old_lnum = wp->w_cursor.lnum;
-    if ((c == 'k' || c == 'K' || c == K_UP || c == Ctrl_P)
-                                                     && wp->w_cursor.lnum > 1)
-       --wp->w_cursor.lnum;
-    if ((c == 'j' || c == 'J' || c == K_DOWN || c == Ctrl_N)
-                      && wp->w_cursor.lnum < wp->w_buffer->b_ml.ml_line_count)
-       ++wp->w_cursor.lnum;
+    if (c == 'k' || c == 'K' || c == K_UP || c == Ctrl_P)
+    {
+       if (wp->w_cursor.lnum > 1)
+           --wp->w_cursor.lnum;
+       else
+           wp->w_cursor.lnum = wp->w_buffer->b_ml.ml_line_count;
+    }
+    if (c == 'j' || c == 'J' || c == K_DOWN || c == Ctrl_N)
+    {
+       if (wp->w_cursor.lnum < wp->w_buffer->b_ml.ml_line_count)
+           ++wp->w_cursor.lnum;
+       else
+           wp->w_cursor.lnum = 1;
+    }
     if (old_lnum != wp->w_cursor.lnum)
     {
        // caller will call popup_highlight_curline()
index 00fe0c816a016301c7b6074595151e1ef76f00ad..26bb3f913f8c87a4eb982ed05fe1c47a88fb1408 100644 (file)
@@ -1,9 +1,9 @@
 >1+0&#ffffff0| @73
 |2| @73
 |3| @29|╔+0#0000001#ffd7ff255|═@10|╗| +0#0000000#ffffff0@30
-|4| @29|║+0#0000001#ffd7ff255| |s|e|v|e|n| @3| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
-|5| @29|║+0#0000001#ffd7ff255| |e|i|g|h|t| @3| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
-|6| @29|║+0#0000001#ffd7ff255| |n+0&#e0e0e08|i|n|e| @3| +0&#ffd7ff255| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
+|4| @29|║+0#0000001#ffd7ff255| |f|i|v|e| @4| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
+|5| @29|║+0#0000001#ffd7ff255| |s|i|x| @5| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
+|6| @29|║+0#0000001#ffd7ff255| |s+0&#e0e0e08|e|v|e|n| @2| +0&#ffd7ff255| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
 |7| @29|╚+0#0000001#ffd7ff255|═@10|╝| +0#0000000#ffffff0@30
 |8| @73
 |9| @73
diff --git a/src/testdir/dumps/Test_popupwin_menu_scroll_3a.dump b/src/testdir/dumps/Test_popupwin_menu_scroll_3a.dump
new file mode 100644 (file)
index 0000000..00fe0c8
--- /dev/null
@@ -0,0 +1,10 @@
+>1+0&#ffffff0| @73
+|2| @73
+|3| @29|╔+0#0000001#ffd7ff255|═@10|╗| +0#0000000#ffffff0@30
+|4| @29|║+0#0000001#ffd7ff255| |s|e|v|e|n| @3| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
+|5| @29|║+0#0000001#ffd7ff255| |e|i|g|h|t| @3| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
+|6| @29|║+0#0000001#ffd7ff255| |n+0&#e0e0e08|i|n|e| @3| +0&#ffd7ff255| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
+|7| @29|╚+0#0000001#ffd7ff255|═@10|╝| +0#0000000#ffffff0@30
+|8| @73
+|9| @73
+@57|1|,|1| @10|T|o|p| 
index 6718bb37b0d4c379422fbf099d25d68a355e772f..f4272aff2631057eec5e77604cfa7583b28ea973 100644 (file)
@@ -1,9 +1,9 @@
 >1+0&#ffffff0| @73
 |2| @73
 |3| @29|╔+0#0000001#ffd7ff255|═@10|╗| +0#0000000#ffffff0@30
-|4| @29|║+0#0000001#ffd7ff255| |o+0&#e0e0e08|n|e| @4| +0&#ffd7ff255| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
-|5| @29|║+0#0000001#ffd7ff255| |t|w|o| @5| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
-|6| @29|║+0#0000001#ffd7ff255| |t|h|r|e@1| @3| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
+|4| @29|║+0#0000001#ffd7ff255| |f+0&#e0e0e08|o|u|r| @3| +0&#ffd7ff255| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
+|5| @29|║+0#0000001#ffd7ff255| |f|i|v|e| @4| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
+|6| @29|║+0#0000001#ffd7ff255| |s|i|x| @5| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
 |7| @29|╚+0#0000001#ffd7ff255|═@10|╝| +0#0000000#ffffff0@30
 |8| @73
 |9| @73
diff --git a/src/testdir/dumps/Test_popupwin_menu_scroll_6a.dump b/src/testdir/dumps/Test_popupwin_menu_scroll_6a.dump
new file mode 100644 (file)
index 0000000..6718bb3
--- /dev/null
@@ -0,0 +1,10 @@
+>1+0&#ffffff0| @73
+|2| @73
+|3| @29|╔+0#0000001#ffd7ff255|═@10|╗| +0#0000000#ffffff0@30
+|4| @29|║+0#0000001#ffd7ff255| |o+0&#e0e0e08|n|e| @4| +0&#ffd7ff255| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
+|5| @29|║+0#0000001#ffd7ff255| |t|w|o| @5| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
+|6| @29|║+0#0000001#ffd7ff255| |t|h|r|e@1| @3| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@30
+|7| @29|╚+0#0000001#ffd7ff255|═@10|╝| +0#0000000#ffffff0@30
+|8| @73
+|9| @73
+@57|1|,|1| @10|T|o|p| 
index c0842f45a240e72b9c6fbd1457c1d901de109ae8..60dc5d9b99a13da3e2dc79dd6fca385935e4079b 100644 (file)
@@ -1794,7 +1794,8 @@ func Test_popup_menu()
   let winid = ShowMenu(" ", 1)
   let winid = ShowMenu("j \<CR>", 2)
   let winid = ShowMenu("JjK \<CR>", 2)
-  let winid = ShowMenu("jjjjjj ", 3)
+  " wraps around
+  let winid = ShowMenu("jjjjjj ", 1)
   let winid = ShowMenu("kkk ", 1)
   let winid = ShowMenu("x", -1)
   let winid = ShowMenu("X", -1)
@@ -3053,20 +3054,28 @@ func Test_popup_menu_with_scrollbar()
   call term_sendkeys(buf, "jjj")
   call VerifyScreenDump(buf, 'Test_popupwin_menu_scroll_2', {})
 
-  " if the cursor is the bottom line, it stays at the bottom line.
+  " the cursor wraps around at the bottom
   call term_sendkeys(buf, repeat("j", 20))
   call VerifyScreenDump(buf, 'Test_popupwin_menu_scroll_3', {})
 
+  " if the cursor is again at the bottom line
+  call term_sendkeys(buf, repeat("j", 2))
+  call VerifyScreenDump(buf, 'Test_popupwin_menu_scroll_3a', {})
+
   call term_sendkeys(buf, "kk")
   call VerifyScreenDump(buf, 'Test_popupwin_menu_scroll_4', {})
 
   call term_sendkeys(buf, "k")
   call VerifyScreenDump(buf, 'Test_popupwin_menu_scroll_5', {})
 
-  " if the cursor is in the top line, it stays in the top line.
+  " the cursor wraps around at the top
   call term_sendkeys(buf, repeat("k", 20))
   call VerifyScreenDump(buf, 'Test_popupwin_menu_scroll_6', {})
 
+  " the cursor at the top of the window again
+  call term_sendkeys(buf, repeat("k", 3))
+  call VerifyScreenDump(buf, 'Test_popupwin_menu_scroll_6a', {})
+
   " close the menu popupwin.
   call term_sendkeys(buf, " ")
 
index ea360458cb6cb89ebd7225568f2ba2df7655f457..edc013b757dba15fa42c41e09326bf6a15d69400 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1707,
 /**/
     1706,
 /**/