diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/buffer_defs.h | 5 | ||||
-rw-r--r-- | src/nvim/charset.c | 5 | ||||
-rw-r--r-- | src/nvim/edit.c | 41 | ||||
-rw-r--r-- | src/nvim/ex_getln.c | 32 | ||||
-rw-r--r-- | src/nvim/getchar.c | 5 | ||||
-rw-r--r-- | src/nvim/globals.h | 4 | ||||
-rw-r--r-- | src/nvim/mbyte.c | 21 | ||||
-rw-r--r-- | src/nvim/normal.c | 28 | ||||
-rw-r--r-- | src/nvim/option.c | 20 | ||||
-rw-r--r-- | src/nvim/option_defs.h | 4 | ||||
-rw-r--r-- | src/nvim/screen.c | 6 | ||||
-rw-r--r-- | src/nvim/testdir/test_listlbr.in | 8 | ||||
-rw-r--r-- | src/nvim/testdir/test_listlbr.ok | 4 | ||||
-rw-r--r-- | src/nvim/ui.c | 49 | ||||
-rw-r--r-- | src/nvim/version.c | 12 |
15 files changed, 65 insertions, 179 deletions
diff --git a/src/nvim/buffer_defs.h b/src/nvim/buffer_defs.h index 196b975d2a..23f20c3c75 100644 --- a/src/nvim/buffer_defs.h +++ b/src/nvim/buffer_defs.h @@ -578,12 +578,7 @@ struct file_buffer { #define B_IMODE_USE_INSERT -1 /* Use b_p_iminsert value for search */ #define B_IMODE_NONE 0 /* Input via none */ #define B_IMODE_LMAP 1 /* Input via langmap */ -#ifndef USE_IM_CONTROL # define B_IMODE_LAST 1 -#else -# define B_IMODE_IM 2 /* Input via input method */ -# define B_IMODE_LAST 2 -#endif short b_kmap_state; /* using "lmap" mappings */ # define KEYMAP_INIT 1 /* 'keymap' was set, call keymap_init() */ diff --git a/src/nvim/charset.c b/src/nvim/charset.c index f3bb3d8c73..bbe80a519c 100644 --- a/src/nvim/charset.c +++ b/src/nvim/charset.c @@ -1058,6 +1058,11 @@ int win_lbr_chartabsize(win_T *wp, char_u *line, char_u *s, colnr_T col, int *he if (col >= (colnr_T)wp->w_width) { col -= wp->w_width; numberextra = wp->w_width - (numberextra - win_col_off2(wp)); + if (*p_sbr != NUL) { + colnr_T sbrlen = (colnr_T)MB_CHARLEN(p_sbr); + if (col >= sbrlen) + col -= sbrlen; + } if (numberextra > 0) { col = col % numberextra; } diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 2cc91a2591..c7f20783a9 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -391,9 +391,6 @@ edit ( */ if (curbuf->b_p_iminsert == B_IMODE_LMAP) State |= LANGMAP; -#ifdef USE_IM_CONTROL - im_set_active(curbuf->b_p_iminsert == B_IMODE_IM); -#endif setmouse(); clear_showcmd(); @@ -5081,6 +5078,10 @@ internal_format ( colnr_T leader_len; int no_leader = FALSE; int do_comments = (flags & INSCHAR_DO_COM); + int has_lbr = curwin->w_p_lbr; + + // make sure win_lbr_chartabsize() counts correctly + curwin->w_p_lbr = false; /* * When 'ai' is off we don't want a space under the cursor to be @@ -5370,6 +5371,8 @@ internal_format ( if (save_char != NUL) /* put back space after cursor */ pchar_cursor(save_char); + curwin->w_p_lbr = has_lbr; + if (!format_only && haveto_redraw) { update_topline(); redraw_curbuf_later(VALID); @@ -6758,19 +6761,11 @@ static void ins_reg(void) * message for it. Only call it explicitly. */ ++no_u_sync; if (regname == '=') { -# ifdef USE_IM_CONTROL - int im_on = im_get_status(); -# endif /* Sync undo when evaluating the expression calls setline() or * append(), so that it can be undone separately. */ u_sync_once = 2; regname = get_expr_register(); -# ifdef USE_IM_CONTROL - /* Restore the Input Method. */ - if (im_on) - im_set_active(TRUE); -# endif } if (regname == NUL || !valid_yank_reg(regname, FALSE)) { vim_beep(); @@ -6867,24 +6862,8 @@ static void ins_ctrl_hat(void) } else { curbuf->b_p_iminsert = B_IMODE_LMAP; State |= LANGMAP; -#ifdef USE_IM_CONTROL - im_set_active(FALSE); -#endif - } - } -#ifdef USE_IM_CONTROL - else { - /* There are no ":lmap" mappings, toggle IM */ - if (im_get_status()) { - curbuf->b_p_iminsert = B_IMODE_NONE; - im_set_active(FALSE); - } else { - curbuf->b_p_iminsert = B_IMODE_IM; - State &= ~LANGMAP; - im_set_active(TRUE); } } -#endif set_iminsert_global(); showmode(); /* Show/unshow value of 'keymap' in status lines. */ @@ -6984,14 +6963,6 @@ ins_esc ( } } -#ifdef USE_IM_CONTROL - /* Disable IM to allow typing English directly for Normal mode commands. - * When ":lmap" is enabled don't change 'iminsert' (IM can be enabled as - * well). */ - if (!(State & LANGMAP)) - im_save_status(&curbuf->b_p_iminsert); - im_set_active(FALSE); -#endif State = NORMAL; /* need to position cursor again (e.g. when on a TAB ) */ diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index a19423532d..70db2dc479 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -265,14 +265,7 @@ getcmdline ( b_im_ptr = &curbuf->b_p_imsearch; if (*b_im_ptr == B_IMODE_LMAP) State |= LANGMAP; -#ifdef USE_IM_CONTROL - im_set_active(*b_im_ptr == B_IMODE_IM); -#endif } -#ifdef USE_IM_CONTROL - else if (p_imcmdline) - im_set_active(TRUE); -#endif setmouse(); ui_cursor_shape(); /* may show different cursor shape */ @@ -867,9 +860,6 @@ getcmdline ( if (map_to_exists_mode((char_u *)"", LANGMAP, FALSE)) { /* ":lmap" mappings exists, toggle use of mappings. */ State ^= LANGMAP; -#ifdef USE_IM_CONTROL - im_set_active(FALSE); /* Disable input method */ -#endif if (b_im_ptr != NULL) { if (State & LANGMAP) *b_im_ptr = B_IMODE_LMAP; @@ -877,23 +867,6 @@ getcmdline ( *b_im_ptr = B_IMODE_NONE; } } -#ifdef USE_IM_CONTROL - else { - /* There are no ":lmap" mappings, toggle IM. When - * 'imdisable' is set don't try getting the status, it's - * always off. */ - if ((p_imdisable && b_im_ptr != NULL) - ? *b_im_ptr == B_IMODE_IM : im_get_status()) { - im_set_active(FALSE); /* Disable input method */ - if (b_im_ptr != NULL) - *b_im_ptr = B_IMODE_NONE; - } else { - im_set_active(TRUE); /* Enable input method */ - if (b_im_ptr != NULL) - *b_im_ptr = B_IMODE_IM; - } - } -#endif if (b_im_ptr != NULL) { if (b_im_ptr == &curbuf->b_p_iminsert) set_iminsert_global(); @@ -1542,11 +1515,6 @@ returncmd: need_wait_return = FALSE; State = save_State; -#ifdef USE_IM_CONTROL - if (b_im_ptr != NULL && *b_im_ptr != B_IMODE_LMAP) - im_save_status(b_im_ptr); - im_set_active(FALSE); -#endif setmouse(); ui_cursor_shape(); /* may show different cursor shape */ diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c index 6c70773fcf..d0bdcde9e8 100644 --- a/src/nvim/getchar.c +++ b/src/nvim/getchar.c @@ -2349,11 +2349,6 @@ static int vgetorpeek(int advance) + typebuf.tb_len] != NUL) typebuf.tb_noremap[typebuf.tb_off + typebuf.tb_len++] = RM_YES; -#ifdef USE_IM_CONTROL - /* Get IM status right after getting keys, not after the - * timeout for a mapping (focus may be lost by then). */ - vgetc_im_active = im_get_status(); -#endif } } /* for (;;) */ } /* if (!character from stuffbuf) */ diff --git a/src/nvim/globals.h b/src/nvim/globals.h index 2d8e511ade..ea91135194 100644 --- a/src/nvim/globals.h +++ b/src/nvim/globals.h @@ -897,10 +897,6 @@ EXTERN int stop_insert_mode; /* for ":stopinsert" and 'insertmode' */ EXTERN int KeyTyped; /* TRUE if user typed current char */ EXTERN int KeyStuffed; /* TRUE if current char from stuffbuf */ -#ifdef USE_IM_CONTROL -EXTERN int vgetc_im_active; /* Input Method was active for last - character obtained from vgetc() */ -#endif EXTERN int maptick INIT(= 0); /* tick for each non-mapped char */ EXTERN char_u chartab[256]; /* table used in charset.c; See diff --git a/src/nvim/mbyte.c b/src/nvim/mbyte.c index 2240c1fe83..d79a46ceaa 100644 --- a/src/nvim/mbyte.c +++ b/src/nvim/mbyte.c @@ -103,7 +103,6 @@ #include "nvim/screen.h" #include "nvim/spell.h" #include "nvim/strings.h" -#include "nvim/ui.h" #include "nvim/os/os.h" #include "nvim/arabic.h" @@ -3972,3 +3971,23 @@ char_u * string_convert_ext(vimconv_T *vcp, char_u *ptr, int *lenp, return retval; } + +// Check bounds for column number +static int check_col(int col) +{ + if (col < 0) + return 0; + if (col >= (int)screen_Columns) + return (int)screen_Columns - 1; + return col; +} + +// Check bounds for row number +static int check_row(int row) +{ + if (row < 0) + return 0; + if (row >= (int)screen_Rows) + return (int)screen_Rows - 1; + return row; +} diff --git a/src/nvim/normal.c b/src/nvim/normal.c index 5202354199..0a43d59607 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -717,9 +717,6 @@ getcount: bool lit = false; /* get extra character literally */ bool langmap_active = false; /* using :lmap mappings */ int lang; /* getting a text character */ -#ifdef USE_IM_CONTROL - bool save_smd; /* saved value of p_smd */ -#endif ++no_mapping; ++allow_keys; /* no mapping for nchar, but allow key codes */ @@ -768,12 +765,6 @@ getcount: State = LANGMAP; langmap_active = true; } -#ifdef USE_IM_CONTROL - save_smd = p_smd; - p_smd = false; /* Don't let the IM code show the mode here */ - if (lang && curbuf->b_p_iminsert == B_IMODE_IM) - im_set_active(true); -#endif *cp = plain_vgetc(); @@ -783,14 +774,6 @@ getcount: ++allow_keys; State = NORMAL_BUSY; } -#ifdef USE_IM_CONTROL - if (lang) { - if (curbuf->b_p_iminsert != B_IMODE_LMAP) - im_save_status(&curbuf->b_p_iminsert); - im_set_active(false); - } - p_smd = save_smd; -#endif State = NORMAL_BUSY; need_flushbuf |= add_to_showcmd(*cp); @@ -1108,6 +1091,10 @@ void do_pending_operator(cmdarg_T *cap, int old_col, bool gui_yank) pos_T old_cursor; bool empty_region_error; int restart_edit_save; + int lbr_saved = curwin->w_p_lbr; + + curwin->w_p_lbr = false; /* avoid a problem with unwanted linebreaks in + * block mode */ /* The visual area is remembered for redo */ static int redo_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */ @@ -1720,6 +1707,7 @@ void do_pending_operator(cmdarg_T *cap, int old_col, bool gui_yank) oap->block_mode = false; clearop(oap); } + curwin->w_p_lbr = lbr_saved; } /* @@ -3501,7 +3489,11 @@ static bool nv_screengo(oparg_T *oap, int dir, long dist) * screenline or move two screenlines. */ validate_virtcol(); - if (curwin->w_virtcol > curwin->w_curswant + colnr_T virtcol = curwin->w_virtcol; + if (virtcol > (colnr_T)width1 && *p_sbr != NUL) + virtcol -= vim_strsize(p_sbr); + + if (virtcol > curwin->w_curswant && (curwin->w_curswant < (colnr_T)width1 ? (curwin->w_curswant > (colnr_T)width1 / 2) : ((curwin->w_curswant - width1) % width2 diff --git a/src/nvim/option.c b/src/nvim/option.c index 1d3281e952..ee70b5bf8a 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -912,18 +912,10 @@ static struct vimoption (char_u *)NULL, PV_NONE, {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, {"imcmdline", "imc", P_BOOL|P_VI_DEF, -#ifdef USE_IM_CONTROL - (char_u *)&p_imcmdline, PV_NONE, -#else (char_u *)NULL, PV_NONE, -#endif {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, {"imdisable", "imd", P_BOOL|P_VI_DEF, -#ifdef USE_IM_CONTROL - (char_u *)&p_imdisable, PV_NONE, -#else (char_u *)NULL, PV_NONE, -#endif {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, {"iminsert", "imi", P_NUM|P_VI_DEF, @@ -5134,18 +5126,6 @@ set_bool_option ( foldUpdateAll(curwin); } -#ifdef USE_IM_CONTROL - /* 'imdisable' */ - else if ((int *)varp == &p_imdisable) { - /* Only de-activate it here, it will be enabled when changing mode. */ - if (p_imdisable) - im_set_active(FALSE); - else if (State & INSERT) - /* When the option is set from an autocommand, it may need to take - * effect right away. */ - im_set_active(curbuf->b_p_iminsert == B_IMODE_IM); - } -#endif /* 'spell' */ else if ((int *)varp == &curwin->w_p_spell) { diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h index cd61b6427c..89264f8982 100644 --- a/src/nvim/option_defs.h +++ b/src/nvim/option_defs.h @@ -416,10 +416,6 @@ EXTERN int p_arshape; /* 'arabicshape' */ EXTERN int p_icon; /* 'icon' */ EXTERN char_u *p_iconstring; /* 'iconstring' */ EXTERN int p_ic; /* 'ignorecase' */ -#ifdef USE_IM_CONTROL -EXTERN int p_imcmdline; /* 'imcmdline' */ -EXTERN int p_imdisable; /* 'imdisable' */ -#endif EXTERN int p_is; /* 'incsearch' */ EXTERN int p_im; /* 'insertmode' */ EXTERN char_u *p_isf; /* 'isfname' */ diff --git a/src/nvim/screen.c b/src/nvim/screen.c index bb26066526..2dbf3f8888 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -1205,8 +1205,13 @@ static void win_update(win_T *wp) */ if (VIsual_mode == Ctrl_V) { colnr_T fromc, toc; + int save_ve_flags = ve_flags; + + if (curwin->w_p_lbr) + ve_flags = VE_ALL; getvcols(wp, &VIsual, &curwin->w_cursor, &fromc, &toc); + ve_flags = save_ve_flags; ++toc; if (curwin->w_curswant == MAXCOL) toc = MAXCOL; @@ -3725,6 +3730,7 @@ win_line ( * special character (via 'listchars' option "precedes:<char>". */ if (lcs_prec_todo != NUL + && wp->w_p_list && (wp->w_p_wrap ? wp->w_skipcol > 0 : wp->w_leftcol > 0) && filler_todo <= 0 && draw_state > WL_NR diff --git a/src/nvim/testdir/test_listlbr.in b/src/nvim/testdir/test_listlbr.in index 2f28126554..75b06b4cc7 100644 --- a/src/nvim/testdir/test_listlbr.in +++ b/src/nvim/testdir/test_listlbr.in @@ -56,6 +56,14 @@ STARTTEST :syn match All /.*/ contains=ConcealVar :let line=ScreenChar(winwidth(0)) :call DoRecordScreen() +:set cpo&vim linebreak +:let g:test ="Test 6: set linebreak with visual block mode" +:let line="REMOVE: this not" +:$put =line +:let line="REMOVE: aaaaaaaaaaaaa" +:$put =line +:1/^REMOVE: +0jf x:$put :%w! test.out :qa! ENDTEST diff --git a/src/nvim/testdir/test_listlbr.ok b/src/nvim/testdir/test_listlbr.ok index 9b8037f4d3..ee74667661 100644 --- a/src/nvim/testdir/test_listlbr.ok +++ b/src/nvim/testdir/test_listlbr.ok @@ -32,3 +32,7 @@ Sabbbbbb bla ~ ~ ~ +this not +aaaaaaaaaaaaa +REMOVE: +REMOVE: diff --git a/src/nvim/ui.c b/src/nvim/ui.c index 803e7fab50..526cc3e47e 100644 --- a/src/nvim/ui.c +++ b/src/nvim/ui.c @@ -102,52 +102,3 @@ void ui_cursor_shape(void) conceal_check_cursur_line(); } -/* - * Check bounds for column number - */ -int check_col(int col) -{ - if (col < 0) - return 0; - if (col >= (int)screen_Columns) - return (int)screen_Columns - 1; - return col; -} - -/* - * Check bounds for row number - */ -int check_row(int row) -{ - if (row < 0) - return 0; - if (row >= (int)screen_Rows) - return (int)screen_Rows - 1; - return row; -} - - -#if defined(USE_IM_CONTROL) || defined(PROTO) -/* - * Save current Input Method status to specified place. - */ -void im_save_status(long *psave) -{ - /* Don't save when 'imdisable' is set or "xic" is NULL, IM is always - * disabled then (but might start later). - * Also don't save when inside a mapping, vgetc_im_active has not been set - * then. - * And don't save when the keys were stuffed (e.g., for a "." command). - * And don't save when the GUI is running but our window doesn't have - * input focus (e.g., when a find dialog is open). */ - if (!p_imdisable && KeyTyped && !KeyStuffed - ) { - /* Do save when IM is on, or IM is off and saved status is on. */ - if (vgetc_im_active) - *psave = B_IMODE_IM; - else if (*psave == B_IMODE_IM) - *psave = B_IMODE_NONE; - } -} -#endif - diff --git a/src/nvim/version.c b/src/nvim/version.c index c2818edcc5..f73e5c8cae 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -188,18 +188,18 @@ static int included_patches[] = { //481, //480, //479, - //478, + 478, //477, //476, //475, //474, - //473, - //472, + 473, + 472, //471, //470, //469, //468, - //467, + 467, //465, //464, //463, @@ -230,7 +230,7 @@ static int included_patches[] = { //438, 437, 436, - //435, + 435, //434, 433, //432 NA @@ -240,7 +240,7 @@ static int included_patches[] = { //428 NA 427, //426 NA - //425, + 425, //424 NA //423, //422, |