@@ -27,6 +27,12 @@ static void do_by_tplmode(int tplmode, int col_start, int col_end,
2727
2828#define TPL_FILLCHAR ' '
2929
30+ #define VERT_LEN 1
31+
32+ // tpl_vert's values
33+ #define VERT_OFF 0
34+ #define VERT_ON 1
35+
3036// tpl_align's values
3137#define ALIGN_LEFT 0
3238#define ALIGN_RIGHT 1
@@ -35,7 +41,7 @@ static char_u *opt_name = (char_u *)"tabpanel";
3541static int opt_scope = OPT_LOCAL ;
3642static int tpl_align = ALIGN_LEFT ;
3743static int tpl_columns = 20 ;
38- static char_u * tpl_vert = NULL ;
44+ static int tpl_vert = VERT_OFF ;
3945
4046typedef struct {
4147 win_T * wp ;
@@ -57,7 +63,7 @@ tabpanelopt_changed(void)
5763 int vert_size = 0 ;
5864 int new_align = ALIGN_LEFT ;
5965 int new_columns = 20 ;
60- char_u * new_vert = NULL ;
66+ int new_vert = VERT_OFF ;
6167
6268 p = p_tplo ;
6369 while (* p != NUL )
@@ -77,22 +83,10 @@ tabpanelopt_changed(void)
7783 p += 8 ;
7884 new_columns = getdigits (& p );
7985 }
80- else if (STRNCMP (p , "vert: " , 5 ) == 0 )
86+ else if (STRNCMP (p , "vert" , 4 ) == 0 )
8187 {
82- p += 5 ;
83- while (* p != NUL && * p != ',' )
84- {
85- ++ p ;
86- ++ vert_size ;
87- }
88- if (vert_size < IOSIZE - 1 )
89- {
90- vim_strncpy (IObuff , p - vert_size , vert_size );
91- IObuff [vert_size ] = NUL ;
92- new_vert = vim_strsave (IObuff );
93- }
94- else
95- return FAIL ;
88+ p += 4 ;
89+ new_vert = VERT_ON ;
9690 }
9791
9892 if (* p != ',' && * p != NUL )
@@ -101,9 +95,6 @@ tabpanelopt_changed(void)
10195 ++ p ;
10296 }
10397
104- if (tpl_vert != NULL )
105- vim_free (tpl_vert );
106-
10798 tpl_align = new_align ;
10899 tpl_columns = new_columns ;
109100 tpl_vert = new_vert ;
@@ -157,40 +148,18 @@ draw_tabpanel(void)
157148 int saved_KeyTyped = KeyTyped ;
158149 int saved_got_int = got_int ;
159150 int maxwidth = tabpanel_width ();
160- int vert_len = 0 ;
161- int vert_cells = 0 ;
162151 int vs_attr = HL_ATTR (HLF_C );
163152 int curtab_row = 0 ;
164153#ifndef MSWIN
165154 int row = 0 ;
166155 int off = 0 ;
167156#endif
168- int vsrow = 0 ;
157+ int vsrow = 0 ;
169158 int is_right = tpl_align == ALIGN_RIGHT ;
170159
171160 if (0 == maxwidth )
172161 return ;
173162
174- if (tpl_vert == NULL )
175- tpl_vert = vim_strsave ((char_u * )"" );
176-
177- vert_len = 0 ;
178- vert_cells = 0 ;
179- while (* (tpl_vert + vert_len ) != NUL )
180- {
181- int cell = ptr2cells (tpl_vert + vert_len );
182- if (vert_cells + cell <= maxwidth )
183- {
184- if (has_mbyte )
185- vert_len += (* mb_ptr2len )(tpl_vert + vert_len );
186- else
187- vert_len += (int )STRLEN (tpl_vert + vert_len );
188- vert_cells += cell ;
189- }
190- else
191- break ;
192- }
193-
194163#ifndef MSWIN
195164 // We need this section only for the Vim running on WSL.
196165 for (row = 0 ; row < cmdline_row ; row ++ )
@@ -211,38 +180,38 @@ draw_tabpanel(void)
211180 // Reset got_int to avoid build_stl_str_hl() isn't evaluted.
212181 got_int = FALSE;
213182
214- if (0 < vert_len )
183+ if (tpl_vert == VERT_ON )
215184 {
216185 if (is_right )
217186 {
218187 // draw main contents in tabpanel
219- do_by_tplmode (TPLMODE_GET_CURTAB_ROW , vert_cells ,
220- maxwidth - vert_cells , & curtab_row , NULL );
221- do_by_tplmode (TPLMODE_REDRAW , vert_cells , maxwidth , & curtab_row ,
188+ do_by_tplmode (TPLMODE_GET_CURTAB_ROW , VERT_LEN ,
189+ maxwidth - VERT_LEN , & curtab_row , NULL );
190+ do_by_tplmode (TPLMODE_REDRAW , VERT_LEN , maxwidth , & curtab_row ,
222191 NULL );
223192 // clear for multi-byte vert separater
224193 screen_fill (0 , cmdline_row , COLUMNS_WITHOUT_TPL (),
225- COLUMNS_WITHOUT_TPL () + vert_cells ,
194+ COLUMNS_WITHOUT_TPL () + VERT_LEN ,
226195 TPL_FILLCHAR , TPL_FILLCHAR , vs_attr );
227196 // draw vert separater in tabpanel
228- for (vsrow = 1 ; vsrow < cmdline_row + 1 ; vsrow ++ )
229- screen_puts_len ( tpl_vert , vert_len , vsrow - 1 ,
197+ for (vsrow = 0 ; vsrow < cmdline_row ; vsrow ++ )
198+ screen_putchar ( curwin -> w_fill_chars . tpl_vert , vsrow ,
230199 COLUMNS_WITHOUT_TPL (), vs_attr );
231200 }
232201 else
233202 {
234203 // draw main contents in tabpanel
235- do_by_tplmode (TPLMODE_GET_CURTAB_ROW , 0 , maxwidth - vert_cells ,
204+ do_by_tplmode (TPLMODE_GET_CURTAB_ROW , 0 , maxwidth - VERT_LEN ,
236205 & curtab_row , NULL );
237- do_by_tplmode (TPLMODE_REDRAW , 0 , maxwidth - vert_cells ,
206+ do_by_tplmode (TPLMODE_REDRAW , 0 , maxwidth - VERT_LEN ,
238207 & curtab_row , NULL );
239208 // clear for multi-byte vert separater
240- screen_fill (0 , cmdline_row , maxwidth - vert_cells ,
209+ screen_fill (0 , cmdline_row , maxwidth - VERT_LEN ,
241210 maxwidth , TPL_FILLCHAR , TPL_FILLCHAR , vs_attr );
242211 // draw vert separater in tabpanel
243- for (vsrow = 1 ; vsrow < cmdline_row + 1 ; vsrow ++ )
244- screen_puts_len ( tpl_vert , vert_len , vsrow - 1 ,
245- maxwidth - vert_cells , vs_attr );
212+ for (vsrow = 0 ; vsrow < cmdline_row ; vsrow ++ )
213+ screen_putchar ( curwin -> w_fill_chars . tpl_vert , vsrow ,
214+ maxwidth - VERT_LEN , vs_attr );
246215 }
247216 }
248217 else
0 commit comments