mirror of
https://github.com/neovim/neovim.git
synced 2025-09-27 21:48:35 +00:00
fix(fillchars): change fallback after setcellwidths()
This commit is contained in:
@@ -2853,11 +2853,11 @@ void f_setcellwidths(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
error = e_conflicts_with_value_of_listchars;
|
||||
} else {
|
||||
FOR_ALL_TAB_WINDOWS(tp, wp) {
|
||||
if (set_chars_option(wp, &wp->w_p_lcs, false) != NULL) {
|
||||
if (set_chars_option(wp, &wp->w_p_lcs, true) != NULL) {
|
||||
error = e_conflicts_with_value_of_listchars;
|
||||
break;
|
||||
}
|
||||
if (set_chars_option(wp, &wp->w_p_fcs, false) != NULL) {
|
||||
if (set_chars_option(wp, &wp->w_p_fcs, true) != NULL) {
|
||||
error = e_conflicts_with_value_of_fillchars;
|
||||
break;
|
||||
}
|
||||
@@ -2872,4 +2872,5 @@ void f_setcellwidths(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
}
|
||||
|
||||
xfree(cw_table_save);
|
||||
redraw_all_later(NOT_VALID);
|
||||
}
|
||||
|
@@ -3624,21 +3624,22 @@ char *set_chars_option(win_T *wp, char_u **varp, bool set)
|
||||
};
|
||||
struct chars_tab *tab;
|
||||
|
||||
// XXX: Characters taking 2 columns is forbidden (TUI limitation?). Set old defaults in this case.
|
||||
struct chars_tab fcs_tab[] = {
|
||||
{ &wp->w_p_fcs_chars.stl, "stl", ' ' },
|
||||
{ &wp->w_p_fcs_chars.stlnc, "stlnc", ' ' },
|
||||
{ &wp->w_p_fcs_chars.wbr, "wbr", ' ' },
|
||||
{ &wp->w_p_fcs_chars.horiz, "horiz", 9472 }, // ─
|
||||
{ &wp->w_p_fcs_chars.horizup, "horizup", 9524 }, // ┴
|
||||
{ &wp->w_p_fcs_chars.horizdown, "horizdown", 9516 }, // ┬
|
||||
{ &wp->w_p_fcs_chars.vert, "vert", 9474 }, // │
|
||||
{ &wp->w_p_fcs_chars.vertleft, "vertleft", 9508 }, // ┤
|
||||
{ &wp->w_p_fcs_chars.vertright, "vertright", 9500 }, // ├
|
||||
{ &wp->w_p_fcs_chars.verthoriz, "verthoriz", 9532 }, // ┼
|
||||
{ &wp->w_p_fcs_chars.fold, "fold", 183 }, // ·
|
||||
{ &wp->w_p_fcs_chars.horiz, "horiz", char2cells(0x2500) == 1 ? 0x2500 : '-' }, // ─
|
||||
{ &wp->w_p_fcs_chars.horizup, "horizup", char2cells(0x2534) == 1 ? 0x2534 : '-' }, // ┴
|
||||
{ &wp->w_p_fcs_chars.horizdown, "horizdown", char2cells(0x252c) == 1 ? 0x252c : '-' }, // ┬
|
||||
{ &wp->w_p_fcs_chars.vert, "vert", char2cells(0x2502) == 1 ? 0x2502 : '|' }, // │
|
||||
{ &wp->w_p_fcs_chars.vertleft, "vertleft", char2cells(0x2524) == 1 ? 0x2524 : '|' }, // ┤
|
||||
{ &wp->w_p_fcs_chars.vertright, "vertright", char2cells(0x251c) == 1 ? 0x251c : '|' }, // ├
|
||||
{ &wp->w_p_fcs_chars.verthoriz, "verthoriz", char2cells(0x253c) == 1 ? 0x253c : '+' }, // ┼
|
||||
{ &wp->w_p_fcs_chars.fold, "fold", char2cells(0x00b7) == 1 ? 0x00b7 : '-' }, // ·
|
||||
{ &wp->w_p_fcs_chars.foldopen, "foldopen", '-' },
|
||||
{ &wp->w_p_fcs_chars.foldclosed, "foldclose", '+' },
|
||||
{ &wp->w_p_fcs_chars.foldsep, "foldsep", 9474 }, // │
|
||||
{ &wp->w_p_fcs_chars.foldsep, "foldsep", char2cells(0x2502) == 1 ? 0x2502 : '|' }, // │
|
||||
{ &wp->w_p_fcs_chars.diff, "diff", '-' },
|
||||
{ &wp->w_p_fcs_chars.msgsep, "msgsep", ' ' },
|
||||
{ &wp->w_p_fcs_chars.eob, "eob", '~' },
|
||||
@@ -3667,19 +3668,6 @@ char *set_chars_option(win_T *wp, char_u **varp, bool set)
|
||||
if (varp == &wp->w_p_fcs && wp->w_p_fcs[0] == NUL) {
|
||||
varp = &p_fcs;
|
||||
}
|
||||
if (*p_ambw == 'd') {
|
||||
// XXX: If ambiwidth=double then some characters take 2 columns,
|
||||
// which is forbidden (TUI limitation?). Set old defaults.
|
||||
fcs_tab[3].def = '-';
|
||||
fcs_tab[4].def = '-';
|
||||
fcs_tab[5].def = '-';
|
||||
fcs_tab[6].def = '|';
|
||||
fcs_tab[7].def = '|';
|
||||
fcs_tab[8].def = '|';
|
||||
fcs_tab[9].def = '+';
|
||||
fcs_tab[10].def = '-';
|
||||
fcs_tab[13].def = '|';
|
||||
}
|
||||
}
|
||||
|
||||
// first round: check for valid value, second round: assign values
|
||||
|
@@ -161,6 +161,36 @@ describe('startup defaults', function()
|
||||
~ |~ |
|
||||
|
|
||||
]])
|
||||
|
||||
-- change "vert" character to single-cell
|
||||
funcs.setcellwidths({{0x2502, 0x2502, 1}})
|
||||
screen:expect([[
|
||||
1 │1 |
|
||||
^+-- 2 lines: 2----------│+-- 2 lines: 2---------|
|
||||
4 │4 |
|
||||
~ │~ |
|
||||
|
|
||||
]])
|
||||
|
||||
-- change "vert" character to double-cell
|
||||
funcs.setcellwidths({{0x2502, 0x2502, 2}})
|
||||
screen:expect([[
|
||||
1 |1 |
|
||||
^+-- 2 lines: 2----------|+-- 2 lines: 2---------|
|
||||
4 |4 |
|
||||
~ |~ |
|
||||
|
|
||||
]])
|
||||
|
||||
-- "vert" character should still default to single-byte fillchars because of setcellwidths().
|
||||
command('set ambiwidth=single')
|
||||
screen:expect([[
|
||||
1 |1 |
|
||||
^+-- 2 lines: 2··········|+-- 2 lines: 2·········|
|
||||
4 |4 |
|
||||
~ |~ |
|
||||
|
|
||||
]])
|
||||
end)
|
||||
end)
|
||||
|
||||
|
Reference in New Issue
Block a user