To: vim_dev@googlegroups.com Subject: Patch 8.0.1491 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.0.1491 Problem: The minimum width of the popup menu is hard coded. Solution: Add the 'pumwidth' option. (Christian Brabandt, James McCoy, closes #2314) Files: runtime/doc/options.txt, src/option.c, src/option.h, src/popupmnu.c *** ../vim-8.0.1490/runtime/doc/options.txt 2018-02-03 15:14:10.014778315 +0100 --- runtime/doc/options.txt 2018-02-10 14:22:37.338325773 +0100 *************** *** 5851,5856 **** --- 5955,5970 ---- Insert mode completion. When zero as much space as available is used. |ins-completion-menu|. + *'pumwidth'* *'pw'* + 'pumwidth' 'pw' number (default 0) + global + {not available when compiled without the + |+insert_expand| feature} + {not in Vi} + Determines the minium width to use for the popup menu for Insert mode + completion. When zero the default of 15 screen cells is used. + |ins-completion-menu|. + *'pythondll'* 'pythondll' string (default depends on the build) global *** ../vim-8.0.1490/src/option.c 2018-02-03 15:14:10.010778342 +0100 --- src/option.c 2018-02-10 14:19:14.975639938 +0100 *************** *** 2239,2244 **** --- 2239,2251 ---- (char_u *)NULL, PV_NONE, #endif {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"pumwidth", "pw", P_NUM|P_VI_DEF, + #ifdef FEAT_INS_EXPAND + (char_u *)&p_pw, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif + {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, {"pythonthreedll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, #if defined(DYNAMIC_PYTHON3) (char_u *)&p_py3dll, PV_NONE, *** ../vim-8.0.1490/src/option.h 2018-01-31 21:48:25.228668790 +0100 --- src/option.h 2018-02-10 14:19:14.975639938 +0100 *************** *** 424,429 **** --- 424,430 ---- #ifdef FEAT_INS_EXPAND EXTERN char_u *p_cot; /* 'completeopt' */ EXTERN long p_ph; /* 'pumheight' */ + EXTERN long p_pw; /* 'pumwidth' */ #endif EXTERN char_u *p_cpo; /* 'cpoptions' */ #ifdef FEAT_CSCOPE *** ../vim-8.0.1490/src/popupmnu.c 2017-11-26 16:53:12.323475402 +0100 --- src/popupmnu.c 2018-02-10 15:12:14.356780917 +0100 *************** *** 67,72 **** --- 67,81 ---- } /* + * Return the minimum width of the popup menu. + */ + static int + pum_get_width(void) + { + return p_pw == 0 ? PUM_DEF_WIDTH : p_pw; + } + + /* * Show the popup menu with items "array[size]". * "array" must remain valid until pum_undisplay() is called! * When possible the leftmost character is aligned with screen column "col". *************** *** 93,99 **** do { ! def_width = PUM_DEF_WIDTH; above_row = 0; below_row = cmdline_row; --- 102,108 ---- do { ! def_width = pum_get_width(); above_row = 0; below_row = cmdline_row; *************** *** 216,231 **** if (def_width < max_width) def_width = max_width; ! if (((col < Columns - PUM_DEF_WIDTH || col < Columns - max_width) #ifdef FEAT_RIGHTLEFT && !curwin->w_p_rl) ! || (curwin->w_p_rl && (col > PUM_DEF_WIDTH || col > max_width) #endif )) { /* align pum column with "col" */ pum_col = col; #ifdef FEAT_RIGHTLEFT if (curwin->w_p_rl) pum_width = pum_col - pum_scrollbar + 1; --- 225,241 ---- if (def_width < max_width) def_width = max_width; ! if (((col < Columns - pum_get_width() || col < Columns - max_width) #ifdef FEAT_RIGHTLEFT && !curwin->w_p_rl) ! || (curwin->w_p_rl && (col > pum_get_width() || col > max_width) #endif )) { /* align pum column with "col" */ pum_col = col; + /* start with the maximum space available */ #ifdef FEAT_RIGHTLEFT if (curwin->w_p_rl) pum_width = pum_col - pum_scrollbar + 1; *************** *** 234,245 **** pum_width = Columns - pum_col - pum_scrollbar; if (pum_width > max_width + pum_kind_width + pum_extra_width + 1 ! && pum_width > PUM_DEF_WIDTH) { pum_width = max_width + pum_kind_width + pum_extra_width + 1; ! if (pum_width < PUM_DEF_WIDTH) ! pum_width = PUM_DEF_WIDTH; } } else if (Columns < def_width) { --- 244,314 ---- pum_width = Columns - pum_col - pum_scrollbar; if (pum_width > max_width + pum_kind_width + pum_extra_width + 1 ! && pum_width > pum_get_width()) { + /* the width is too much, make it narrower */ pum_width = max_width + pum_kind_width + pum_extra_width + 1; ! if (pum_width < pum_get_width()) ! pum_width = pum_get_width(); } + else if (((col > pum_get_width() || col > max_width) + #ifdef FEAT_RIGHTLEFT + && !curwin->w_p_rl) + || (curwin->w_p_rl && (col < Columns - pum_get_width() + || col < Columns - max_width) + #endif + )) + { + /* align right pum edge with "col" */ + #ifdef FEAT_RIGHTLEFT + if (curwin->w_p_rl) + { + pum_col = col + max_width + pum_scrollbar + 1; + if (pum_col >= Columns) + pum_col = Columns - 1; + } + else + #endif + { + pum_col = col - max_width - pum_scrollbar; + if (pum_col < 0) + pum_col = 0; + } + + #ifdef FEAT_RIGHTLEFT + if (curwin->w_p_rl) + pum_width = W_ENDCOL(curwin) - pum_col - pum_scrollbar + 1; + else + #endif + pum_width = pum_col - pum_scrollbar; + + if (pum_width < pum_get_width()) + { + pum_width = pum_get_width(); + #ifdef FEAT_RIGHTLEFT + if (curwin->w_p_rl) + { + if (pum_width > pum_col) + pum_width = pum_col; + } + else + #endif + { + if (pum_width >= Columns - pum_col) + pum_width = Columns - pum_col - 1; + } + } + else if (pum_width > max_width + pum_kind_width + + pum_extra_width + 1 + && pum_width > pum_get_width()) + { + pum_width = max_width + pum_kind_width + + pum_extra_width + 1; + if (pum_width < pum_get_width()) + pum_width = pum_get_width(); + } + } + } else if (Columns < def_width) { *************** *** 254,261 **** } else { ! if (max_width > PUM_DEF_WIDTH) ! max_width = PUM_DEF_WIDTH; /* truncate */ #ifdef FEAT_RIGHTLEFT if (curwin->w_p_rl) pum_col = max_width - 1; --- 323,330 ---- } else { ! if (max_width > pum_get_width()) ! max_width = pum_get_width(); /* truncate */ #ifdef FEAT_RIGHTLEFT if (curwin->w_p_rl) pum_col = max_width - 1; *************** *** 1005,1008 **** --- 1074,1078 ---- ui_remove_balloon(); } # endif + #endif *** ../vim-8.0.1490/src/version.c 2018-02-10 14:12:39.202145763 +0100 --- src/version.c 2018-02-10 15:36:04.655222275 +0100 *************** *** 773,774 **** --- 773,776 ---- { /* Add new patch number below this line */ + /**/ + 1491, /**/ -- We do not stumble over mountains, but over molehills. Confucius /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///