annotate src/screen.c @ 11416:32aed0993813 v8.0.0592

patch 8.0.0592: if a job writes to a buffer screen is not updated commit https://github.com/vim/vim/commit/29ae377ea7039874337bc79ace9ab2b37b9056e5 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Apr 30 19:39:39 2017 +0200 patch 8.0.0592: if a job writes to a buffer screen is not updated Problem: If a job writes to a buffer and the user is typing a command, the screen isn't updated. When a message is displayed the changed buffer may cause it to be cleared. (Ramel Eshed) Solution: Update the screen and then the command line if the screen didn't scroll. Avoid inserting screen lines, as it clears any message. Update the status line when the buffer changed.
author Christian Brabandt <cb@256bit.org>
date Sun, 30 Apr 2017 19:45:03 +0200
parents f26a535d9464
children d1b6cf96882a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10042
4aead6a9b7a9 commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents: 9992
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 * See README.txt for an overview of the Vim source code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 * screen.c: code for displaying on the screen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13 * Output to the screen (console, terminal emulator or GUI window) is minimized
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 * by remembering what is already on the screen, and only updating the parts
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15 * that changed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 * ScreenLines[off] Contains a copy of the whole screen, as it is currently
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 * displayed (excluding text written by external commands).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 * ScreenAttrs[off] Contains the associated attributes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 * LineOffset[row] Contains the offset into ScreenLines*[] and ScreenAttrs[]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 * for each line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 * LineWraps[row] Flag for each line whether it wraps to the next line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 * For double-byte characters, two consecutive bytes in ScreenLines[] can form
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 * one character which occupies two display cells.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 * For UTF-8 a multi-byte character is converted to Unicode and stored in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 * ScreenLinesUC[]. ScreenLines[] contains the first byte only. For an ASCII
2124
dc8a5699253b updated for version 7.2.406
Bram Moolenaar <bram@zimbu.org>
parents: 2122
diff changeset
28 * character without composing chars ScreenLinesUC[] will be 0 and
dc8a5699253b updated for version 7.2.406
Bram Moolenaar <bram@zimbu.org>
parents: 2122
diff changeset
29 * ScreenLinesC[][] is not used. When the character occupies two display
dc8a5699253b updated for version 7.2.406
Bram Moolenaar <bram@zimbu.org>
parents: 2122
diff changeset
30 * cells the next byte in ScreenLines[] is 0.
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
31 * ScreenLinesC[][] contain up to 'maxcombine' composing characters
2124
dc8a5699253b updated for version 7.2.406
Bram Moolenaar <bram@zimbu.org>
parents: 2122
diff changeset
32 * (drawn on top of the first character). There is 0 after the last one used.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 * ScreenLines2[] is only used for euc-jp to store the second byte if the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 * first byte is 0x8e (single-width character).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 * The screen_*() functions write to the screen and handle updating
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 * ScreenLines[].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 * update_screen() is the function that updates all windows and status lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40 * It is called form the main loop when must_redraw is non-zero. It may be
1213
8906c10ecbb0 updated for version 7.1b
vimboss
parents: 1112
diff changeset
41 * called from other places when an immediate screen update is needed.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 * The part of the buffer that is displayed in a window is set with:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 * - w_topline (first buffer line in window)
5946
4d7af1962d6c updated for version 7.4.314
Bram Moolenaar <bram@vim.org>
parents: 5923
diff changeset
45 * - w_topfill (filler lines above the first line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 * - w_leftcol (leftmost window cell in window),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 * - w_skipcol (skipped window cells of first line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 * Commands that only move the cursor around in a window, do not need to take
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 * action to update the display. The main loop will check if w_topline is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 * valid and update it (scroll the window) when needed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 * Commands that scroll a window change w_topline and must call
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 * check_cursor() to move the cursor into the visible part of the window, and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55 * call redraw_later(VALID) to have the window displayed by update_screen()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 * later.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 * Commands that change text in the buffer must call changed_bytes() or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 * changed_lines() to mark the area that changed and will require updating
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 * later. The main loop will call update_screen(), which will update each
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61 * window that shows the changed buffer. This assumes text above the change
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 * can remain displayed as it is. Text after the change may need updating for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 * scrolling, folding and syntax highlighting.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 * Commands that change how a window is displayed (e.g., setting 'list') or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66 * invalidate the contents of a window in another way (e.g., change fold
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 * settings), must call redraw_later(NOT_VALID) to have the whole window
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 * redisplayed by update_screen() later.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 * Commands that change how a buffer is displayed (e.g., setting 'tabstop')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 * must call redraw_curbuf_later(NOT_VALID) to have all the windows for the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 * buffer redisplayed by update_screen() later.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 *
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
74 * Commands that change highlighting and possibly cause a scroll too must call
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
75 * redraw_later(SOME_VALID) to update the whole window but still use scrolling
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
76 * to avoid redrawing everything. But the length of displayed lines must not
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
77 * change, use NOT_VALID then.
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
78 *
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 * Commands that move the window position must call redraw_later(NOT_VALID).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 * TODO: should minimize redrawing by scrolling when possible.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 * Commands that change everything (e.g., resizing the screen) must call
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83 * redraw_all_later(NOT_VALID) or redraw_all_later(CLEAR).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85 * Things that are handled indirectly:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
86 * - When messages scroll the screen up, msg_scrolled will be set and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
87 * update_screen() called to redraw.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91
3586
583e46e4a56c updated for version 7.3.553
Bram Moolenaar <bram@vim.org>
parents: 3572
diff changeset
92 #define MB_FILLER_CHAR '<' /* character used when a double-width character
583e46e4a56c updated for version 7.3.553
Bram Moolenaar <bram@vim.org>
parents: 3572
diff changeset
93 * doesn't fit. */
583e46e4a56c updated for version 7.3.553
Bram Moolenaar <bram@vim.org>
parents: 3572
diff changeset
94
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96 * The attributes that are actually active for writing to the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
97 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98 static int screen_attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101 * Positioning the cursor is reduced by remembering the last position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 * Mostly used by windgoto() and screen_char().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 static int screen_cur_row, screen_cur_col; /* last known cursor position */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 static match_T search_hl; /* used for 'hlsearch' highlight matching */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
111 static foldinfo_T win_foldinfo; /* info for 'foldcolumn' */
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
112 static int compute_foldcolumn(win_T *wp, int col);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
114
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
115 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 * Buffer for one screen line (characters and attributes).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
118 static schar_T *current_ScreenLine;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
119
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
120 static void win_update(win_T *wp);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
121 static void win_draw_end(win_T *wp, int c1, int c2, int row, int endrow, hlf_T hl);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 #ifdef FEAT_FOLDING
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
123 static void fold_line(win_T *wp, long fold_count, foldinfo_T *foldinfo, linenr_T lnum, int row);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
124 static void fill_foldcolumn(char_u *p, win_T *wp, int closed, linenr_T lnum);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
125 static void copy_text_attr(int off, char_u *buf, int len, int attr);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
126 #endif
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
127 static int win_line(win_T *, linenr_T, int, int, int nochange);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
128 static int char_needs_redraw(int off_from, int off_to, int cols);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 #ifdef FEAT_RIGHTLEFT
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
130 static void screen_line(int row, int coloff, int endcol, int clear_width, int rlflag);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 # define SCREEN_LINE(r, o, e, c, rl) screen_line((r), (o), (e), (c), (rl))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 #else
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
133 static void screen_line(int row, int coloff, int endcol, int clear_width);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 # define SCREEN_LINE(r, o, e, c, rl) screen_line((r), (o), (e), (c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 #endif
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
136 #ifdef FEAT_WINDOWS
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
137 static void draw_vsep_win(win_T *wp, int row);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138 #endif
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
139 #ifdef FEAT_STL_OPT
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
140 static void redraw_custom_statusline(win_T *wp);
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
141 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
142 #ifdef FEAT_SEARCH_EXTRA
5985
8ae50e3ef8bf updated for version 7.4.333
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
143 # define SEARCH_HL_PRIORITY 0
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
144 static void start_search_hl(void);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
145 static void end_search_hl(void);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
146 static void init_search_hl(win_T *wp);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
147 static void prepare_search_hl(win_T *wp, linenr_T lnum);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
148 static void next_search_hl(win_T *win, match_T *shl, linenr_T lnum, colnr_T mincol, matchitem_T *cur);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
149 static int next_search_hl_pos(match_T *shl, linenr_T lnum, posmatch_T *pos, colnr_T mincol);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
150 #endif
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
151 static void screen_start_highlight(int attr);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
152 static void screen_char(unsigned off, int row, int col);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
153 #ifdef FEAT_MBYTE
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
154 static void screen_char_2(unsigned off, int row, int col);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
155 #endif
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
156 static void screenclear2(void);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
157 static void lineclear(unsigned off, int width);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
158 static void lineinvalid(unsigned off, int width);
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
159 #ifdef FEAT_WINDOWS
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
160 static void linecopy(int to, int from, win_T *wp);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
161 static void redraw_block(int row, int end, win_T *wp);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
162 #endif
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
163 static int win_do_lines(win_T *wp, int row, int line_count, int mayclear, int del);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
164 static void win_rest_invalid(win_T *wp);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
165 static void msg_pos_mode(void);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
166 static void recording_mode(int attr);
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
167 #if defined(FEAT_WINDOWS)
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
168 static void draw_tabline(void);
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
169 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170 #if defined(FEAT_WINDOWS) || defined(FEAT_WILDMENU) || defined(FEAT_STL_OPT)
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
171 static int fillchar_status(int *attr, int is_curwin);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 #endif
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
173 #ifdef FEAT_WINDOWS
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
174 static int fillchar_vsep(int *attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 #ifdef FEAT_STL_OPT
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
177 static void win_redr_custom(win_T *wp, int draw_ruler);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 #ifdef FEAT_CMDL_INFO
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
180 static void win_redr_ruler(win_T *wp, int always);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
181 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
183 #if defined(FEAT_CLIPBOARD) || defined(FEAT_WINDOWS)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 /* Ugly global: overrule attribute used by screen_char() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185 static int screen_char_attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
187
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189 * Redraw the current window later, with update_screen(type).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190 * Set must_redraw only if not already set to a higher value.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 * e.g. if must_redraw is CLEAR, type NOT_VALID will do nothing.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
194 redraw_later(int type)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
195 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 redraw_win_later(curwin, type);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
200 redraw_win_later(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
201 win_T *wp,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
202 int type)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 if (wp->w_redr_type < type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 wp->w_redr_type = type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 if (type >= NOT_VALID)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 wp->w_lines_valid = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209 if (must_redraw < type) /* must_redraw is the maximum of all windows */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 must_redraw = type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 * Force a complete redraw later. Also resets the highlighting. To be used
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216 * after executing a shell command that messes up the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
217 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
218 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
219 redraw_later_clear(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 redraw_all_later(CLEAR);
826
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 820
diff changeset
222 #ifdef FEAT_GUI
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 820
diff changeset
223 if (gui.in_use)
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 820
diff changeset
224 /* Use a code that will reset gui.highlight_mask in
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 820
diff changeset
225 * gui_stop_highlight(). */
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 820
diff changeset
226 screen_attr = HL_ALL + 1;
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 820
diff changeset
227 else
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 820
diff changeset
228 #endif
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 820
diff changeset
229 /* Use attributes that is very unlikely to appear in text. */
1cdd2661f34c updated for version 7.0d01
vimboss
parents: 820
diff changeset
230 screen_attr = HL_BOLD | HL_UNDERLINE | HL_INVERSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
231 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234 * Mark all windows to be redrawn later.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
237 redraw_all_later(int type)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 FOR_ALL_WINDOWS(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243 redraw_win_later(wp, type);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
245 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247 /*
301
006e9c8a6a8a updated for version 7.0079
vimboss
parents: 277
diff changeset
248 * Mark all windows that are editing the current buffer to be updated later.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
251 redraw_curbuf_later(int type)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
253 redraw_buf_later(curbuf, type);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
257 redraw_buf_later(buf_T *buf, int type)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
261 FOR_ALL_WINDOWS(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
262 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
263 if (wp->w_buffer == buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264 redraw_win_later(wp, type);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
265 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
266 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
267
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
268 void
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
269 redraw_buf_and_status_later(buf_T *buf, int type)
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
270 {
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
271 win_T *wp;
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
272
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
273 FOR_ALL_WINDOWS(wp)
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
274 {
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
275 if (wp->w_buffer == buf)
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
276 {
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
277 redraw_win_later(wp, type);
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
278 wp->w_redr_status = TRUE;
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
279 }
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
280 }
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
281 }
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
282
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283 /*
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
284 * Redraw as soon as possible. When the command line is not scrolled redraw
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
285 * right away and restore what was on the command line.
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
286 * Return a code indicating what happened.
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
287 */
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
288 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
289 redraw_asap(int type)
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
290 {
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
291 int rows;
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
292 int cols = screen_Columns;
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
293 int r;
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
294 int ret = 0;
5096
a6ddcab6a240 updated for version 7.3.1291
Bram Moolenaar <bram@vim.org>
parents: 5090
diff changeset
295 schar_T *screenline; /* copy from ScreenLines[] */
a6ddcab6a240 updated for version 7.3.1291
Bram Moolenaar <bram@vim.org>
parents: 5090
diff changeset
296 sattr_T *screenattr; /* copy from ScreenAttrs[] */
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
297 #ifdef FEAT_MBYTE
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
298 int i;
5096
a6ddcab6a240 updated for version 7.3.1291
Bram Moolenaar <bram@vim.org>
parents: 5090
diff changeset
299 u8char_T *screenlineUC = NULL; /* copy from ScreenLinesUC[] */
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
300 u8char_T *screenlineC[MAX_MCO]; /* copy from ScreenLinesC[][] */
5096
a6ddcab6a240 updated for version 7.3.1291
Bram Moolenaar <bram@vim.org>
parents: 5090
diff changeset
301 schar_T *screenline2 = NULL; /* copy from ScreenLines2[] */
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
302 #endif
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
303
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
304 redraw_later(type);
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
305 if (msg_scrolled || (State != NORMAL && State != NORMAL_BUSY) || exiting)
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
306 return ret;
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
307
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
308 /* Allocate space to save the text displayed in the command line area. */
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
309 rows = screen_Rows - cmdline_row;
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
310 screenline = (schar_T *)lalloc(
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
311 (long_u)(rows * cols * sizeof(schar_T)), FALSE);
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
312 screenattr = (sattr_T *)lalloc(
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
313 (long_u)(rows * cols * sizeof(sattr_T)), FALSE);
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
314 if (screenline == NULL || screenattr == NULL)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
315 ret = 2;
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
316 #ifdef FEAT_MBYTE
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
317 if (enc_utf8)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
318 {
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
319 screenlineUC = (u8char_T *)lalloc(
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
320 (long_u)(rows * cols * sizeof(u8char_T)), FALSE);
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
321 if (screenlineUC == NULL)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
322 ret = 2;
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
323 for (i = 0; i < p_mco; ++i)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
324 {
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
325 screenlineC[i] = (u8char_T *)lalloc(
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
326 (long_u)(rows * cols * sizeof(u8char_T)), FALSE);
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
327 if (screenlineC[i] == NULL)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
328 ret = 2;
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
329 }
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
330 }
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
331 if (enc_dbcs == DBCS_JPNU)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
332 {
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
333 screenline2 = (schar_T *)lalloc(
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
334 (long_u)(rows * cols * sizeof(schar_T)), FALSE);
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
335 if (screenline2 == NULL)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
336 ret = 2;
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
337 }
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
338 #endif
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
339
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
340 if (ret != 2)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
341 {
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
342 /* Save the text displayed in the command line area. */
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
343 for (r = 0; r < rows; ++r)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
344 {
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
345 mch_memmove(screenline + r * cols,
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
346 ScreenLines + LineOffset[cmdline_row + r],
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
347 (size_t)cols * sizeof(schar_T));
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
348 mch_memmove(screenattr + r * cols,
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
349 ScreenAttrs + LineOffset[cmdline_row + r],
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
350 (size_t)cols * sizeof(sattr_T));
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
351 #ifdef FEAT_MBYTE
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
352 if (enc_utf8)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
353 {
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
354 mch_memmove(screenlineUC + r * cols,
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
355 ScreenLinesUC + LineOffset[cmdline_row + r],
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
356 (size_t)cols * sizeof(u8char_T));
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
357 for (i = 0; i < p_mco; ++i)
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
358 mch_memmove(screenlineC[i] + r * cols,
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
359 ScreenLinesC[i] + LineOffset[cmdline_row + r],
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
360 (size_t)cols * sizeof(u8char_T));
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
361 }
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
362 if (enc_dbcs == DBCS_JPNU)
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
363 mch_memmove(screenline2 + r * cols,
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
364 ScreenLines2 + LineOffset[cmdline_row + r],
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
365 (size_t)cols * sizeof(schar_T));
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
366 #endif
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
367 }
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
368
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
369 update_screen(0);
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
370 ret = 3;
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
371
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
372 if (must_redraw == 0)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
373 {
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
374 int off = (int)(current_ScreenLine - ScreenLines);
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
375
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
376 /* Restore the text displayed in the command line area. */
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
377 for (r = 0; r < rows; ++r)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
378 {
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
379 mch_memmove(current_ScreenLine,
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
380 screenline + r * cols,
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
381 (size_t)cols * sizeof(schar_T));
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
382 mch_memmove(ScreenAttrs + off,
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
383 screenattr + r * cols,
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
384 (size_t)cols * sizeof(sattr_T));
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
385 #ifdef FEAT_MBYTE
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
386 if (enc_utf8)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
387 {
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
388 mch_memmove(ScreenLinesUC + off,
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
389 screenlineUC + r * cols,
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
390 (size_t)cols * sizeof(u8char_T));
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
391 for (i = 0; i < p_mco; ++i)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
392 mch_memmove(ScreenLinesC[i] + off,
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
393 screenlineC[i] + r * cols,
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
394 (size_t)cols * sizeof(u8char_T));
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
395 }
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
396 if (enc_dbcs == DBCS_JPNU)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
397 mch_memmove(ScreenLines2 + off,
6959
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
398 screenline2 + r * cols,
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
399 (size_t)cols * sizeof(schar_T));
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
400 #endif
87cb71d54e8a patch 7.4.797
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
401 SCREEN_LINE(cmdline_row + r, 0, cols, cols, FALSE);
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
402 }
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
403 ret = 4;
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
404 }
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
405 }
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
406
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
407 vim_free(screenline);
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
408 vim_free(screenattr);
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
409 #ifdef FEAT_MBYTE
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
410 if (enc_utf8)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
411 {
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
412 vim_free(screenlineUC);
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
413 for (i = 0; i < p_mco; ++i)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
414 vim_free(screenlineC[i]);
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
415 }
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
416 if (enc_dbcs == DBCS_JPNU)
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
417 vim_free(screenline2);
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
418 #endif
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
419
5126
71859e71b1f9 updated for version 7.3.1306
Bram Moolenaar <bram@vim.org>
parents: 5096
diff changeset
420 /* Show the intro message when appropriate. */
71859e71b1f9 updated for version 7.3.1306
Bram Moolenaar <bram@vim.org>
parents: 5096
diff changeset
421 maybe_intro_message();
71859e71b1f9 updated for version 7.3.1306
Bram Moolenaar <bram@vim.org>
parents: 5096
diff changeset
422
71859e71b1f9 updated for version 7.3.1306
Bram Moolenaar <bram@vim.org>
parents: 5096
diff changeset
423 setcursor();
71859e71b1f9 updated for version 7.3.1306
Bram Moolenaar <bram@vim.org>
parents: 5096
diff changeset
424
5090
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
425 return ret;
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
426 }
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
427
8b7baf39a345 updated for version 7.3.1288
Bram Moolenaar <bram@vim.org>
parents: 5078
diff changeset
428 /*
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
429 * Invoked after an asynchronous callback is called.
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
430 * If an echo command was used the cursor needs to be put back where
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
431 * it belongs. If highlighting was changed a redraw is needed.
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
432 */
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
433 void
9282
9f97a6290c63 commit https://github.com/vim/vim/commit/cf089463492fab53b2a5d81517829d22f882f82e
Christian Brabandt <cb@256bit.org>
parents: 9213
diff changeset
434 redraw_after_callback(void)
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
435 {
8627
7c98c5d0298c commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
436 if (State == HITRETURN || State == ASKMORE)
7c98c5d0298c commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
437 ; /* do nothing */
7c98c5d0298c commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
438 else if (State & CMDLINE)
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
439 {
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
440 /* Redrawing only works when the screen didn't scroll. */
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
441 if (msg_scrolled == 0)
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
442 {
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
443 update_screen(0);
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
444 compute_cmdrow();
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
445 }
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
446 else
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
447 {
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
448 /* Redraw in the same position, so that the user can continue
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
449 * editing the command. */
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
450 compute_cmdrow();
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
451 if (cmdline_row > msg_scrolled)
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
452 cmdline_row -= msg_scrolled;
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
453 else
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
454 cmdline_row = 0;
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
455 }
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
456 redrawcmdline_ex(FALSE);
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
457 }
9444
e08c8502d7ce commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Christian Brabandt <cb@256bit.org>
parents: 9428
diff changeset
458 else if (State & (NORMAL | INSERT))
8627
7c98c5d0298c commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
459 {
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
460 /* keep the command line if possible */
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
461 update_screen(VALID_NO_UPDATE);
8627
7c98c5d0298c commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
462 setcursor();
7c98c5d0298c commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
463 }
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
464 cursor_on();
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
465 out_flush();
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
466 #ifdef FEAT_GUI
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
467 if (gui.in_use)
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
468 {
9428
0c7f47088e55 commit https://github.com/vim/vim/commit/9d5d3c9c4468ad76f16b50eabd3d9e7eab2ed44d
Christian Brabandt <cb@256bit.org>
parents: 9320
diff changeset
469 /* Don't update the cursor when it is blinking and off to avoid
0c7f47088e55 commit https://github.com/vim/vim/commit/9d5d3c9c4468ad76f16b50eabd3d9e7eab2ed44d
Christian Brabandt <cb@256bit.org>
parents: 9320
diff changeset
470 * flicker. */
0c7f47088e55 commit https://github.com/vim/vim/commit/9d5d3c9c4468ad76f16b50eabd3d9e7eab2ed44d
Christian Brabandt <cb@256bit.org>
parents: 9320
diff changeset
471 if (!gui_mch_is_blink_off())
9213
bb86514cad15 commit https://github.com/vim/vim/commit/703a8044b5393d37d355b0b1054a9a5a13912a3f
Christian Brabandt <cb@256bit.org>
parents: 9100
diff changeset
472 gui_update_cursor(FALSE, FALSE);
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
473 gui_mch_flush();
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
474 }
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
475 #endif
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
476 }
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
477
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
478 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 * Changed something in the current window, at buffer line "lnum", that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 * requires that line and possibly other lines to be redrawn.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 * Used when entering/leaving Insert mode with the cursor on a folded line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 * Used to remove the "$" from a change command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
483 * Note that when also inserting/deleting lines w_redraw_top and w_redraw_bot
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
484 * may become invalid and the whole window will have to be redrawn.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
485 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
486 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
487 redrawWinline(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
488 linenr_T lnum,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
489 int invalid UNUSED) /* window line height is invalid now */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
490 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
491 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
492 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
493 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
494
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
495 if (curwin->w_redraw_top == 0 || curwin->w_redraw_top > lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
496 curwin->w_redraw_top = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
497 if (curwin->w_redraw_bot == 0 || curwin->w_redraw_bot < lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
498 curwin->w_redraw_bot = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
499 redraw_later(VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
500
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
501 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
502 if (invalid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
503 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504 /* A w_lines[] entry for this lnum has become invalid. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
505 i = find_wl_entry(curwin, lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506 if (i >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 curwin->w_lines[i].wl_valid = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
512 /*
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
513 * Update all windows that are editing the current buffer.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
514 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
516 update_curbuf(int type)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
517 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
518 redraw_curbuf_later(type);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
519 update_screen(type);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
520 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
521
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
522 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
523 * Based on the current value of curwin->w_topline, transfer a screenfull
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
524 * of stuff from Filemem to ScreenLines[], and update curwin->w_botline.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
525 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
526 void
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
527 update_screen(int type_arg)
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
528 {
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
529 int type = type_arg;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
530 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
531 static int did_intro = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
532 #if defined(FEAT_SEARCH_EXTRA) || defined(FEAT_CLIPBOARD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
533 int did_one;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
534 #endif
9444
e08c8502d7ce commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Christian Brabandt <cb@256bit.org>
parents: 9428
diff changeset
535 #ifdef FEAT_GUI
9848
664276833670 commit https://github.com/vim/vim/commit/107abd2ca53c31fd3bb40d77ff296e98eaae2975
Christian Brabandt <cb@256bit.org>
parents: 9754
diff changeset
536 int did_undraw = FALSE;
9444
e08c8502d7ce commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Christian Brabandt <cb@256bit.org>
parents: 9428
diff changeset
537 int gui_cursor_col;
e08c8502d7ce commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Christian Brabandt <cb@256bit.org>
parents: 9428
diff changeset
538 int gui_cursor_row;
e08c8502d7ce commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Christian Brabandt <cb@256bit.org>
parents: 9428
diff changeset
539 #endif
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
540 int no_update = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
541
2008
f13a0227fb88 updated for version 7.2-305
vimboss
parents: 1994
diff changeset
542 /* Don't do anything if the screen structures are (not yet) valid. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
543 if (!screen_valid(TRUE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
544 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
545
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
546 if (type == VALID_NO_UPDATE)
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
547 {
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
548 no_update = TRUE;
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
549 type = 0;
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
550 }
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
551
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
552 if (must_redraw)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
553 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
554 if (type < must_redraw) /* use maximal type */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555 type = must_redraw;
1331
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
556
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
557 /* must_redraw is reset here, so that when we run into some weird
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
558 * reason to redraw while busy redrawing (e.g., asynchronous
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
559 * scrolling), or update_topline() in win_update() will cause a
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
560 * scroll, the screen will be redrawn later or in win_update(). */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
561 must_redraw = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
562 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
563
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
564 /* Need to update w_lines[]. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
565 if (curwin->w_lines_valid == 0 && type < NOT_VALID)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
566 type = NOT_VALID;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
567
2008
f13a0227fb88 updated for version 7.2-305
vimboss
parents: 1994
diff changeset
568 /* Postpone the redrawing when it's not needed and when being called
f13a0227fb88 updated for version 7.2-305
vimboss
parents: 1994
diff changeset
569 * recursively. */
f13a0227fb88 updated for version 7.2-305
vimboss
parents: 1994
diff changeset
570 if (!redrawing() || updating_screen)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
571 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
572 redraw_later(type); /* remember type for next time */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
573 must_redraw = type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
574 if (type > INVERTED_ALL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
575 curwin->w_lines_valid = 0; /* don't use w_lines[].wl_size now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
576 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
577 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
578
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
579 updating_screen = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
580 #ifdef FEAT_SYN_HL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
581 ++display_tick; /* let syntax code know we're in a next round of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 * display updating */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 #endif
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
584 if (no_update)
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
585 ++no_win_do_lines_ins;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
587 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
588 * if the screen was scrolled up when displaying a message, scroll it down
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
589 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
590 if (msg_scrolled)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
591 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
592 clear_cmdline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
593 if (msg_scrolled > Rows - 5) /* clearing is faster */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
594 type = CLEAR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
595 else if (type != CLEAR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597 check_for_delay(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
598 if (screen_ins_lines(0, 0, msg_scrolled, (int)Rows, NULL) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
599 type = CLEAR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
600 FOR_ALL_WINDOWS(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 if (W_WINROW(wp) < msg_scrolled)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
604 if (W_WINROW(wp) + wp->w_height > msg_scrolled
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
605 && wp->w_redr_type < REDRAW_TOP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
606 && wp->w_lines_valid > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
607 && wp->w_topline == wp->w_lines[0].wl_lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
608 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
609 wp->w_upd_rows = msg_scrolled - W_WINROW(wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
610 wp->w_redr_type = REDRAW_TOP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614 wp->w_redr_type = NOT_VALID;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 if (W_WINROW(wp) + wp->w_height + W_STATUS_HEIGHT(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 <= msg_scrolled)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 wp->w_redr_status = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
622 }
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
623 if (!no_update)
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
624 redraw_cmdline = TRUE;
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
625 #ifdef FEAT_WINDOWS
673
513866ffe6af updated for version 7.0200
vimboss
parents: 671
diff changeset
626 redraw_tabline = TRUE;
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
627 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
629 msg_scrolled = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
630 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
632
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633 /* reset cmdline_row now (may have been changed temporarily) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
634 compute_cmdrow();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
635
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
636 /* Check for changed highlighting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
637 if (need_highlight_changed)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
638 highlight_changed();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
639
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
640 if (type == CLEAR) /* first clear screen */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
642 screenclear(); /* will reset clear_cmdline */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
643 type = NOT_VALID;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
644 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
646 if (clear_cmdline) /* going to clear cmdline (done below) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
647 check_for_delay(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
648
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
649 #ifdef FEAT_LINEBREAK
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
650 /* Force redraw when width of 'number' or 'relativenumber' column
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
651 * changes. */
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
652 if (curwin->w_redr_type < NOT_VALID
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
653 && curwin->w_nrwidth != ((curwin->w_p_nu || curwin->w_p_rnu)
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
654 ? number_width(curwin) : 0))
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
655 curwin->w_redr_type = NOT_VALID;
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
656 #endif
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
657
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
658 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
659 * Only start redrawing if there is really something to do.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
660 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
661 if (type == INVERTED)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
662 update_curswant();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
663 if (curwin->w_redr_type < type
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
664 && !((type == VALID
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
665 && curwin->w_lines[0].wl_valid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
666 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
667 && curwin->w_topfill == curwin->w_old_topfill
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
668 && curwin->w_botfill == curwin->w_old_botfill
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
669 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
670 && curwin->w_topline == curwin->w_lines[0].wl_lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
671 || (type == INVERTED
1043
10d7ebdbe8a3 updated for version 7.0-169
vimboss
parents: 996
diff changeset
672 && VIsual_active
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
673 && curwin->w_old_cursor_lnum == curwin->w_cursor.lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
674 && curwin->w_old_visual_mode == VIsual_mode
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
675 && (curwin->w_valid & VALID_VIRTCOL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
676 && curwin->w_old_curswant == curwin->w_curswant)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677 ))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
678 curwin->w_redr_type = type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679
849
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 835
diff changeset
680 #ifdef FEAT_WINDOWS
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 835
diff changeset
681 /* Redraw the tab pages line if needed. */
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 835
diff changeset
682 if (redraw_tabline || type >= NOT_VALID)
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 835
diff changeset
683 draw_tabline();
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 835
diff changeset
684 #endif
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 835
diff changeset
685
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
686 #ifdef FEAT_SYN_HL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
687 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 * Correct stored syntax highlighting info for changes in each displayed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
689 * buffer. Each buffer must only be done once.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
690 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691 FOR_ALL_WINDOWS(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
692 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
693 if (wp->w_buffer->b_mod_set)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
694 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
695 # ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696 win_T *wwp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
697
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
698 /* Check if we already did this buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
699 for (wwp = firstwin; wwp != wp; wwp = wwp->w_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
700 if (wwp->w_buffer == wp->w_buffer)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
701 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
702 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
703 if (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
704 # ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
705 wwp == wp &&
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
706 # endif
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
707 syntax_present(wp))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
708 syn_stack_apply_changes(wp->w_buffer);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
709 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
710 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
711 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
712
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
713 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
714 * Go from top to bottom through the windows, redrawing the ones that need
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
715 * it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
716 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
717 #if defined(FEAT_SEARCH_EXTRA) || defined(FEAT_CLIPBOARD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
718 did_one = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
719 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
720 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
721 search_hl.rm.regprog = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
722 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
723 FOR_ALL_WINDOWS(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
724 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
725 if (wp->w_redr_type != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
726 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
727 cursor_off();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
728 #if defined(FEAT_SEARCH_EXTRA) || defined(FEAT_CLIPBOARD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
729 if (!did_one)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
730 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
731 did_one = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
732 # ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
733 start_search_hl();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
734 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
735 # ifdef FEAT_CLIPBOARD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
736 /* When Visual area changed, may have to update selection. */
3674
b9aa7fb4a928 updated for version 7.3.597
Bram Moolenaar <bram@vim.org>
parents: 3586
diff changeset
737 if (clip_star.available && clip_isautosel_star())
b9aa7fb4a928 updated for version 7.3.597
Bram Moolenaar <bram@vim.org>
parents: 3586
diff changeset
738 clip_update_selection(&clip_star);
b9aa7fb4a928 updated for version 7.3.597
Bram Moolenaar <bram@vim.org>
parents: 3586
diff changeset
739 if (clip_plus.available && clip_isautosel_plus())
b9aa7fb4a928 updated for version 7.3.597
Bram Moolenaar <bram@vim.org>
parents: 3586
diff changeset
740 clip_update_selection(&clip_plus);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
741 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
742 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
743 /* Remove the cursor before starting to do anything, because
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
744 * scrolling may make it difficult to redraw the text under
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
745 * it. */
9848
664276833670 commit https://github.com/vim/vim/commit/107abd2ca53c31fd3bb40d77ff296e98eaae2975
Christian Brabandt <cb@256bit.org>
parents: 9754
diff changeset
746 if (gui.in_use && wp == curwin)
9444
e08c8502d7ce commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Christian Brabandt <cb@256bit.org>
parents: 9428
diff changeset
747 {
e08c8502d7ce commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Christian Brabandt <cb@256bit.org>
parents: 9428
diff changeset
748 gui_cursor_col = gui.cursor_col;
e08c8502d7ce commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Christian Brabandt <cb@256bit.org>
parents: 9428
diff changeset
749 gui_cursor_row = gui.cursor_row;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
750 gui_undraw_cursor();
9848
664276833670 commit https://github.com/vim/vim/commit/107abd2ca53c31fd3bb40d77ff296e98eaae2975
Christian Brabandt <cb@256bit.org>
parents: 9754
diff changeset
751 did_undraw = TRUE;
9444
e08c8502d7ce commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Christian Brabandt <cb@256bit.org>
parents: 9428
diff changeset
752 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
753 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
754 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
755 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
756 win_update(wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
757 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
758
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
759 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
760 /* redraw status line after the window to minimize cursor movement */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
761 if (wp->w_redr_status)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
762 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
763 cursor_off();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
764 win_redr_status(wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
765 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
766 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
767 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
768 #if defined(FEAT_SEARCH_EXTRA)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
769 end_search_hl();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
770 #endif
4107
1efc30385c41 updated for version 7.3.807
Bram Moolenaar <bram@vim.org>
parents: 4065
diff changeset
771 #ifdef FEAT_INS_EXPAND
1efc30385c41 updated for version 7.3.807
Bram Moolenaar <bram@vim.org>
parents: 4065
diff changeset
772 /* May need to redraw the popup menu. */
1efc30385c41 updated for version 7.3.807
Bram Moolenaar <bram@vim.org>
parents: 4065
diff changeset
773 if (pum_visible())
1efc30385c41 updated for version 7.3.807
Bram Moolenaar <bram@vim.org>
parents: 4065
diff changeset
774 pum_redraw();
1efc30385c41 updated for version 7.3.807
Bram Moolenaar <bram@vim.org>
parents: 4065
diff changeset
775 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
776
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
777 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
778 /* Reset b_mod_set flags. Going through all windows is probably faster
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779 * than going through all buffers (there could be many buffers). */
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
780 FOR_ALL_WINDOWS(wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
781 wp->w_buffer->b_mod_set = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
783 curbuf->b_mod_set = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
784 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
785
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
786 updating_screen = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
787 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
788 gui_may_resize_shell();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
789 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
790
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
791 /* Clear or redraw the command line. Done last, because scrolling may
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
792 * mess up the command line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
793 if (clear_cmdline || redraw_cmdline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
794 showmode();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
795
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
796 if (no_update)
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
797 --no_win_do_lines_ins;
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
798
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
799 /* May put up an introductory message when not editing a file */
5126
71859e71b1f9 updated for version 7.3.1306
Bram Moolenaar <bram@vim.org>
parents: 5096
diff changeset
800 if (!did_intro)
71859e71b1f9 updated for version 7.3.1306
Bram Moolenaar <bram@vim.org>
parents: 5096
diff changeset
801 maybe_intro_message();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
802 did_intro = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
803
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
804 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
805 /* Redraw the cursor and update the scrollbars when all screen updating is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
806 * done. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
807 if (gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
808 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
809 out_flush(); /* required before updating the cursor */
9848
664276833670 commit https://github.com/vim/vim/commit/107abd2ca53c31fd3bb40d77ff296e98eaae2975
Christian Brabandt <cb@256bit.org>
parents: 9754
diff changeset
810 if (did_undraw && !gui_mch_is_blink_off())
9444
e08c8502d7ce commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Christian Brabandt <cb@256bit.org>
parents: 9428
diff changeset
811 {
e08c8502d7ce commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Christian Brabandt <cb@256bit.org>
parents: 9428
diff changeset
812 /* Put the GUI position where the cursor was, gui_update_cursor()
e08c8502d7ce commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Christian Brabandt <cb@256bit.org>
parents: 9428
diff changeset
813 * uses that. */
e08c8502d7ce commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Christian Brabandt <cb@256bit.org>
parents: 9428
diff changeset
814 gui.col = gui_cursor_col;
e08c8502d7ce commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Christian Brabandt <cb@256bit.org>
parents: 9428
diff changeset
815 gui.row = gui_cursor_row;
10247
d54d4a258b96 commit https://github.com/vim/vim/commit/84dbd494dca599ecff05b2c2279d402c12e6d197
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
816 # ifdef FEAT_MBYTE
d54d4a258b96 commit https://github.com/vim/vim/commit/84dbd494dca599ecff05b2c2279d402c12e6d197
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
817 gui.col = mb_fix_col(gui.col, gui.row);
d54d4a258b96 commit https://github.com/vim/vim/commit/84dbd494dca599ecff05b2c2279d402c12e6d197
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
818 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
819 gui_update_cursor(FALSE, FALSE);
9446
aaa6639b6f14 commit https://github.com/vim/vim/commit/65549bdef5805ba5a18a3d2d3909998dd7d9ed46
Christian Brabandt <cb@256bit.org>
parents: 9444
diff changeset
820 screen_cur_col = gui.col;
aaa6639b6f14 commit https://github.com/vim/vim/commit/65549bdef5805ba5a18a3d2d3909998dd7d9ed46
Christian Brabandt <cb@256bit.org>
parents: 9444
diff changeset
821 screen_cur_row = gui.row;
9444
e08c8502d7ce commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Christian Brabandt <cb@256bit.org>
parents: 9428
diff changeset
822 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
823 gui_update_scrollbars(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
824 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
825 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
826 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
827
10793
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
828 #if defined(FEAT_SIGNS) || defined(FEAT_GUI) || defined(FEAT_CONCEAL)
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
829 /*
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
830 * Prepare for updating one or more windows.
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
831 * Caller must check for "updating_screen" already set to avoid recursiveness.
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
832 */
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
833 static void
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
834 update_prepare(void)
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
835 {
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
836 cursor_off();
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
837 updating_screen = TRUE;
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
838 #ifdef FEAT_GUI
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
839 /* Remove the cursor before starting to do anything, because scrolling may
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
840 * make it difficult to redraw the text under it. */
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
841 if (gui.in_use)
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
842 gui_undraw_cursor();
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
843 #endif
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
844 #ifdef FEAT_SEARCH_EXTRA
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
845 start_search_hl();
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
846 #endif
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
847 }
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
848
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
849 /*
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
850 * Finish updating one or more windows.
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
851 */
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
852 static void
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
853 update_finish(void)
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
854 {
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
855 if (redraw_cmdline)
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
856 showmode();
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
857
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
858 # ifdef FEAT_SEARCH_EXTRA
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
859 end_search_hl();
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
860 # endif
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
861
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
862 updating_screen = FALSE;
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
863
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
864 # ifdef FEAT_GUI
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
865 gui_may_resize_shell();
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
866
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
867 /* Redraw the cursor and update the scrollbars when all screen updating is
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
868 * done. */
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
869 if (gui.in_use)
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
870 {
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
871 out_flush(); /* required before updating the cursor */
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
872 gui_update_cursor(FALSE, FALSE);
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
873 gui_update_scrollbars(FALSE);
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
874 }
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
875 # endif
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
876 }
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
877 #endif
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
878
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
879 #if defined(FEAT_CONCEAL) || defined(PROTO)
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
880 /*
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
881 * Return TRUE if the cursor line in window "wp" may be concealed, according
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
882 * to the 'concealcursor' option.
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
883 */
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
884 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
885 conceal_cursor_line(win_T *wp)
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
886 {
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
887 int c;
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
888
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
889 if (*wp->w_p_cocu == NUL)
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
890 return FALSE;
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
891 if (get_real_state() & VISUAL)
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
892 c = 'v';
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
893 else if (State & INSERT)
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
894 c = 'i';
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
895 else if (State & NORMAL)
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
896 c = 'n';
2382
3a5ededa240a Add the 'c' flag to 'concealcursor'.
Bram Moolenaar <bram@vim.org>
parents: 2381
diff changeset
897 else if (State & CMDLINE)
3a5ededa240a Add the 'c' flag to 'concealcursor'.
Bram Moolenaar <bram@vim.org>
parents: 2381
diff changeset
898 c = 'c';
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
899 else
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
900 return FALSE;
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
901 return vim_strchr(wp->w_p_cocu, c) != NULL;
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
902 }
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
903
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
904 /*
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
905 * Check if the cursor line needs to be redrawn because of 'concealcursor'.
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
906 */
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
907 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
908 conceal_check_cursur_line(void)
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
909 {
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
910 if (curwin->w_p_cole > 0 && conceal_cursor_line(curwin))
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
911 {
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
912 need_cursor_line_redraw = TRUE;
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
913 /* Need to recompute cursor column, e.g., when starting Visual mode
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
914 * without concealing. */
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
915 curs_columns(TRUE);
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
916 }
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
917 }
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
918
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
919 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
920 update_single_line(win_T *wp, linenr_T lnum)
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
921 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
922 int row;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
923 int j;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
924
9100
ddccff0480d2 commit https://github.com/vim/vim/commit/908be438794619f10ef7fa25e24e5893b2ae0189
Christian Brabandt <cb@256bit.org>
parents: 9027
diff changeset
925 /* Don't do anything if the screen structures are (not yet) valid. */
10769
dd93e5439ffd patch 8.0.0274: possible recursive screen updating causes trouble
Christian Brabandt <cb@256bit.org>
parents: 10690
diff changeset
926 if (!screen_valid(TRUE) || updating_screen)
9100
ddccff0480d2 commit https://github.com/vim/vim/commit/908be438794619f10ef7fa25e24e5893b2ae0189
Christian Brabandt <cb@256bit.org>
parents: 9027
diff changeset
927 return;
ddccff0480d2 commit https://github.com/vim/vim/commit/908be438794619f10ef7fa25e24e5893b2ae0189
Christian Brabandt <cb@256bit.org>
parents: 9027
diff changeset
928
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
929 if (lnum >= wp->w_topline && lnum < wp->w_botline
2269
fb627e94e6c6 Couple of small fixes for conceal feature. (Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 2255
diff changeset
930 && foldedCount(wp, lnum, &win_foldinfo) == 0)
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
931 {
10793
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
932 update_prepare();
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
933
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
934 row = 0;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
935 for (j = 0; j < wp->w_lines_valid; ++j)
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
936 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
937 if (lnum == wp->w_lines[j].wl_lnum)
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
938 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
939 screen_start(); /* not sure of screen cursor */
2284
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
940 # ifdef FEAT_SEARCH_EXTRA
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
941 init_search_hl(wp);
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
942 start_search_hl();
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
943 prepare_search_hl(wp, lnum);
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
944 # endif
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
945 win_line(wp, lnum, row, row + wp->w_lines[j].wl_size, FALSE);
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
946 # if defined(FEAT_SEARCH_EXTRA)
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
947 end_search_hl();
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
948 # endif
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
949 break;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
950 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
951 row += wp->w_lines[j].wl_size;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
952 }
10793
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
953
4d34e72fe63d patch 8.0.0286: not always redrawing after screen resize
Christian Brabandt <cb@256bit.org>
parents: 10769
diff changeset
954 update_finish();
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
955 }
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
956 need_cursor_line_redraw = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
957 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
958 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
959
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
960 #if defined(FEAT_SIGNS) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
961 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
962 update_debug_sign(buf_T *buf, linenr_T lnum)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
963 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
964 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
965 int doit = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
966
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
967 # ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
968 win_foldinfo.fi_level = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
969 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
970
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
971 /* update/delete a specific mark */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
972 FOR_ALL_WINDOWS(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
973 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
974 if (buf != NULL && lnum > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
975 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
976 if (wp->w_buffer == buf && lnum >= wp->w_topline
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
977 && lnum < wp->w_botline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
978 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
979 if (wp->w_redraw_top == 0 || wp->w_redraw_top > lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
980 wp->w_redraw_top = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
981 if (wp->w_redraw_bot == 0 || wp->w_redraw_bot < lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
982 wp->w_redraw_bot = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
983 redraw_win_later(wp, VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
984 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
985 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
986 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
987 redraw_win_later(wp, VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
988 if (wp->w_redr_type != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
989 doit = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
990 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
991
3250
927c7377cf49 updated for version 7.3.394
Bram Moolenaar <bram@vim.org>
parents: 3040
diff changeset
992 /* Return when there is nothing to do, screen updating is already
927c7377cf49 updated for version 7.3.394
Bram Moolenaar <bram@vim.org>
parents: 3040
diff changeset
993 * happening (recursive call) or still starting up. */
927c7377cf49 updated for version 7.3.394
Bram Moolenaar <bram@vim.org>
parents: 3040
diff changeset
994 if (!doit || updating_screen
927c7377cf49 updated for version 7.3.394
Bram Moolenaar <bram@vim.org>
parents: 3040
diff changeset
995 #ifdef FEAT_GUI
927c7377cf49 updated for version 7.3.394
Bram Moolenaar <bram@vim.org>
parents: 3040
diff changeset
996 || gui.starting
927c7377cf49 updated for version 7.3.394
Bram Moolenaar <bram@vim.org>
parents: 3040
diff changeset
997 #endif
927c7377cf49 updated for version 7.3.394
Bram Moolenaar <bram@vim.org>
parents: 3040
diff changeset
998 || starting)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
999 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1001 /* update all windows that need updating */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1002 update_prepare();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1003
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1004 # ifdef FEAT_WINDOWS
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
1005 FOR_ALL_WINDOWS(wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1006 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1007 if (wp->w_redr_type != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1008 win_update(wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1009 if (wp->w_redr_status)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1010 win_redr_status(wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1011 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1012 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1013 if (curwin->w_redr_type != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1014 win_update(curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1015 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1016
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1017 update_finish();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1018 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1019 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1020
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1021
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1022 #if defined(FEAT_GUI) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1023 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1024 * Update a single window, its status line and maybe the command line msg.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1025 * Used for the GUI scrollbar.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1026 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1027 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1028 updateWindow(win_T *wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1029 {
2008
f13a0227fb88 updated for version 7.2-305
vimboss
parents: 1994
diff changeset
1030 /* return if already busy updating */
f13a0227fb88 updated for version 7.2-305
vimboss
parents: 1994
diff changeset
1031 if (updating_screen)
f13a0227fb88 updated for version 7.2-305
vimboss
parents: 1994
diff changeset
1032 return;
f13a0227fb88 updated for version 7.2-305
vimboss
parents: 1994
diff changeset
1033
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1034 update_prepare();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1035
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1036 #ifdef FEAT_CLIPBOARD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1037 /* When Visual area changed, may have to update selection. */
3674
b9aa7fb4a928 updated for version 7.3.597
Bram Moolenaar <bram@vim.org>
parents: 3586
diff changeset
1038 if (clip_star.available && clip_isautosel_star())
b9aa7fb4a928 updated for version 7.3.597
Bram Moolenaar <bram@vim.org>
parents: 3586
diff changeset
1039 clip_update_selection(&clip_star);
b9aa7fb4a928 updated for version 7.3.597
Bram Moolenaar <bram@vim.org>
parents: 3586
diff changeset
1040 if (clip_plus.available && clip_isautosel_plus())
b9aa7fb4a928 updated for version 7.3.597
Bram Moolenaar <bram@vim.org>
parents: 3586
diff changeset
1041 clip_update_selection(&clip_plus);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1042 #endif
670
f892bda292a8 updated for version 7.0198
vimboss
parents: 667
diff changeset
1043
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1044 win_update(wp);
670
f892bda292a8 updated for version 7.0198
vimboss
parents: 667
diff changeset
1045
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1046 #ifdef FEAT_WINDOWS
670
f892bda292a8 updated for version 7.0198
vimboss
parents: 667
diff changeset
1047 /* When the screen was cleared redraw the tab pages line. */
673
513866ffe6af updated for version 7.0200
vimboss
parents: 671
diff changeset
1048 if (redraw_tabline)
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
1049 draw_tabline();
670
f892bda292a8 updated for version 7.0198
vimboss
parents: 667
diff changeset
1050
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1051 if (wp->w_redr_status
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1052 # ifdef FEAT_CMDL_INFO
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1053 || p_ru
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1054 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1055 # ifdef FEAT_STL_OPT
40
f1d2a58883b9 updated for version 7.0024
vimboss
parents: 39
diff changeset
1056 || *p_stl != NUL || *wp->w_p_stl != NUL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1057 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1058 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1059 win_redr_status(wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1060 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1061
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1062 update_finish();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1063 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1064 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1065
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1066 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 * Update a single window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1068 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1069 * This may cause the windows below it also to be redrawn (when clearing the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1070 * screen or scrolling lines).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1071 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1072 * How the window is redrawn depends on wp->w_redr_type. Each type also
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1073 * implies the one below it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1074 * NOT_VALID redraw the whole window
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
1075 * SOME_VALID redraw the whole window but do scroll when possible
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1076 * REDRAW_TOP redraw the top w_upd_rows window lines, otherwise like VALID
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1077 * INVERTED redraw the changed part of the Visual area
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1078 * INVERTED_ALL redraw the whole Visual area
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1079 * VALID 1. scroll up/down to adjust for a changed w_topline
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1080 * 2. update lines at the top when scrolled down
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1081 * 3. redraw changed text:
301
006e9c8a6a8a updated for version 7.0079
vimboss
parents: 277
diff changeset
1082 * - if wp->w_buffer->b_mod_set set, update lines between
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1083 * b_mod_top and b_mod_bot.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1084 * - if wp->w_redraw_top non-zero, redraw lines between
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1085 * wp->w_redraw_top and wp->w_redr_bot.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1086 * - continue redrawing when syntax status is invalid.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1087 * 4. if scrolled up, update lines at the bottom.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1088 * This results in three areas that may need updating:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1089 * top: from first row to top_end (when scrolled down)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090 * mid: from mid_start to mid_end (update inversion or changed text)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091 * bot: from bot_start to last row (when scrolled up)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1092 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1093 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1094 win_update(win_T *wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1095 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1096 buf_T *buf = wp->w_buffer;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1097 int type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1098 int top_end = 0; /* Below last row of the top area that needs
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1099 updating. 0 when no top area updating. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1100 int mid_start = 999;/* first row of the mid area that needs
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1101 updating. 999 when no mid area updating. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1102 int mid_end = 0; /* Below last row of the mid area that needs
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1103 updating. 0 when no mid area updating. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1104 int bot_start = 999;/* first row of the bot area that needs
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1105 updating. 999 when no bot area updating */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1106 int scrolled_down = FALSE; /* TRUE when scrolled down when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1107 w_topline got smaller a bit */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1108 #ifdef FEAT_SEARCH_EXTRA
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
1109 matchitem_T *cur; /* points to the match list */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1110 int top_to_mod = FALSE; /* redraw above mod_top */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1111 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1112
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1113 int row; /* current window row to display */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1114 linenr_T lnum; /* current buffer lnum to display */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1115 int idx; /* current index in w_lines[] */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1116 int srow; /* starting row of the current line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1117
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1118 int eof = FALSE; /* if TRUE, we hit the end of the file */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1119 int didline = FALSE; /* if TRUE, we finished the last line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1121 long j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1122 static int recursive = FALSE; /* being called recursively */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1123 int old_botline = wp->w_botline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1124 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1125 long fold_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1126 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1127 #ifdef FEAT_SYN_HL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1128 /* remember what happened to the previous line, to know if
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1129 * check_visual_highlight() can be used */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1130 #define DID_NONE 1 /* didn't update a line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1131 #define DID_LINE 2 /* updated a normal line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1132 #define DID_FOLD 3 /* updated a folded line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1133 int did_update = DID_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1134 linenr_T syntax_last_parsed = 0; /* last parsed text line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1135 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1136 linenr_T mod_top = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1137 linenr_T mod_bot = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1138 #if defined(FEAT_SYN_HL) || defined(FEAT_SEARCH_EXTRA)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1139 int save_got_int;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1140 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1141
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1142 type = wp->w_redr_type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1143
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1144 if (type == NOT_VALID)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1145 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1146 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1147 wp->w_redr_status = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1148 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1149 wp->w_lines_valid = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1150 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1151
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1152 /* Window is zero-height: nothing to draw. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1153 if (wp->w_height == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1154 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1155 wp->w_redr_type = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1156 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1157 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1158
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
1159 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1160 /* Window is zero-width: Only need to draw the separator. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1161 if (wp->w_width == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1162 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1163 /* draw the vertical separator right of this window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1164 draw_vsep_win(wp, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1165 wp->w_redr_type = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1166 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1167 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1168 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1169
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1170 #ifdef FEAT_SEARCH_EXTRA
2284
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
1171 init_search_hl(wp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1172 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1173
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
1174 #ifdef FEAT_LINEBREAK
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
1175 /* Force redraw when width of 'number' or 'relativenumber' column
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
1176 * changes. */
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
1177 i = (wp->w_p_nu || wp->w_p_rnu) ? number_width(wp) : 0;
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
1178 if (wp->w_nrwidth != i)
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
1179 {
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
1180 type = NOT_VALID;
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
1181 wp->w_nrwidth = i;
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
1182 }
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
1183 else
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
1184 #endif
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
1185
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1186 if (buf->b_mod_set && buf->b_mod_xlines != 0 && wp->w_redraw_top != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1187 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1188 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1189 * When there are both inserted/deleted lines and specific lines to be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1190 * redrawn, w_redraw_top and w_redraw_bot may be invalid, just redraw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1191 * everything (only happens when redrawing is off for while).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1192 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1193 type = NOT_VALID;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1194 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1195 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1196 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1198 * Set mod_top to the first line that needs displaying because of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199 * changes. Set mod_bot to the first line after the changes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1200 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1201 mod_top = wp->w_redraw_top;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1202 if (wp->w_redraw_bot != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1203 mod_bot = wp->w_redraw_bot + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1204 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1205 mod_bot = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1206 wp->w_redraw_top = 0; /* reset for next time */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1207 wp->w_redraw_bot = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1208 if (buf->b_mod_set)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1209 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1210 if (mod_top == 0 || mod_top > buf->b_mod_top)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1211 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1212 mod_top = buf->b_mod_top;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1213 #ifdef FEAT_SYN_HL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1214 /* Need to redraw lines above the change that may be included
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1215 * in a pattern match. */
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
1216 if (syntax_present(wp))
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
1217 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
1218 mod_top -= buf->b_s.b_syn_sync_linebreaks;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1219 if (mod_top < 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1220 mod_top = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1221 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1222 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1223 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1224 if (mod_bot == 0 || mod_bot < buf->b_mod_bot)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1225 mod_bot = buf->b_mod_bot;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1226
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1227 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1228 /* When 'hlsearch' is on and using a multi-line search pattern, a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1229 * change in one line may make the Search highlighting in a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1230 * previous line invalid. Simple solution: redraw all visible
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1231 * lines above the change.
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
1232 * Same for a match pattern.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1233 */
699
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
1234 if (search_hl.rm.regprog != NULL
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
1235 && re_multiline(search_hl.rm.regprog))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1236 top_to_mod = TRUE;
699
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
1237 else
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
1238 {
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
1239 cur = wp->w_match_head;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
1240 while (cur != NULL)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
1241 {
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
1242 if (cur->match.regprog != NULL
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
1243 && re_multiline(cur->match.regprog))
699
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
1244 {
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
1245 top_to_mod = TRUE;
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
1246 break;
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
1247 }
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
1248 cur = cur->next;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
1249 }
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
1250 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1251 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1252 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1253 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1254 if (mod_top != 0 && hasAnyFolding(wp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1255 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1256 linenr_T lnumt, lnumb;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1257
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1258 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1259 * A change in a line can cause lines above it to become folded or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1260 * unfolded. Find the top most buffer line that may be affected.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1261 * If the line was previously folded and displayed, get the first
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1262 * line of that fold. If the line is folded now, get the first
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1263 * folded line. Use the minimum of these two.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1264 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1265
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1266 /* Find last valid w_lines[] entry above mod_top. Set lnumt to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1267 * the line below it. If there is no valid entry, use w_topline.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1268 * Find the first valid w_lines[] entry below mod_bot. Set lnumb
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1269 * to this line. If there is no valid entry, use MAXLNUM. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1270 lnumt = wp->w_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1271 lnumb = MAXLNUM;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1272 for (i = 0; i < wp->w_lines_valid; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1273 if (wp->w_lines[i].wl_valid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1274 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1275 if (wp->w_lines[i].wl_lastlnum < mod_top)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1276 lnumt = wp->w_lines[i].wl_lastlnum + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1277 if (lnumb == MAXLNUM && wp->w_lines[i].wl_lnum >= mod_bot)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1278 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1279 lnumb = wp->w_lines[i].wl_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1280 /* When there is a fold column it might need updating
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1281 * in the next line ("J" just above an open fold). */
6553
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
1282 if (compute_foldcolumn(wp, 0) > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1283 ++lnumb;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1284 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1285 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1286
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1287 (void)hasFoldingWin(wp, mod_top, &mod_top, NULL, TRUE, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1288 if (mod_top > lnumt)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1289 mod_top = lnumt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1290
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1291 /* Now do the same for the bottom line (one above mod_bot). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1292 --mod_bot;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1293 (void)hasFoldingWin(wp, mod_bot, NULL, &mod_bot, TRUE, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1294 ++mod_bot;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1295 if (mod_bot < lnumb)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1296 mod_bot = lnumb;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1297 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1298 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1299
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1300 /* When a change starts above w_topline and the end is below
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1301 * w_topline, start redrawing at w_topline.
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
1302 * If the end of the change is above w_topline: do like no change was
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
1303 * made, but redraw the first line to find changes in syntax. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1304 if (mod_top != 0 && mod_top < wp->w_topline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1305 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1306 if (mod_bot > wp->w_topline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1307 mod_top = wp->w_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1308 #ifdef FEAT_SYN_HL
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
1309 else if (syntax_present(wp))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1310 top_end = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1311 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1312 }
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
1313
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
1314 /* When line numbers are displayed need to redraw all lines below
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
1315 * inserted/deleted lines. */
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
1316 if (mod_top != 0 && buf->b_mod_xlines != 0 && wp->w_p_nu)
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
1317 mod_bot = MAXLNUM;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1318 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1319
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1320 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1321 * When only displaying the lines at the top, set top_end. Used when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1322 * window has scrolled down for msg_scrolled.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1323 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1324 if (type == REDRAW_TOP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1325 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1326 j = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1327 for (i = 0; i < wp->w_lines_valid; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1328 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1329 j += wp->w_lines[i].wl_size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1330 if (j >= wp->w_upd_rows)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1331 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1332 top_end = j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1333 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1334 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1335 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1336 if (top_end == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1337 /* not found (cannot happen?): redraw everything */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1338 type = NOT_VALID;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340 /* top area defined, the rest is VALID */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341 type = VALID;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1342 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1343
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
1344 /* Trick: we want to avoid clearing the screen twice. screenclear() will
1331
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1345 * set "screen_cleared" to TRUE. The special value MAYBE (which is still
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1346 * non-zero and thus not FALSE) will indicate that screenclear() was not
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1347 * called. */
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1348 if (screen_cleared)
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1349 screen_cleared = MAYBE;
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1350
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1351 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1352 * If there are no changes on the screen that require a complete redraw,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1353 * handle three cases:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1354 * 1: we are off the top of the screen by a few lines: scroll down
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1355 * 2: wp->w_topline is below wp->w_lines[0].wl_lnum: may scroll up
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1356 * 3: wp->w_topline is wp->w_lines[0].wl_lnum: find first entry in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1357 * w_lines[] that needs updating.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1358 */
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
1359 if ((type == VALID || type == SOME_VALID
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
1360 || type == INVERTED || type == INVERTED_ALL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1361 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1362 && !wp->w_botfill && !wp->w_old_botfill
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1363 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1364 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1365 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1366 if (mod_top != 0 && wp->w_topline == mod_top)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1367 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1368 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1369 * w_topline is the first changed line, the scrolling will be done
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1370 * further down.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1371 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1372 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1373 else if (wp->w_lines[0].wl_valid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1374 && (wp->w_topline < wp->w_lines[0].wl_lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1375 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1376 || (wp->w_topline == wp->w_lines[0].wl_lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1377 && wp->w_topfill > wp->w_old_topfill)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1378 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1379 ))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1380 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1381 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1382 * New topline is above old topline: May scroll down.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1383 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1384 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1385 if (hasAnyFolding(wp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1386 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1387 linenr_T ln;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1388
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1389 /* count the number of lines we are off, counting a sequence
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1390 * of folded lines as one */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1391 j = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1392 for (ln = wp->w_topline; ln < wp->w_lines[0].wl_lnum; ++ln)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1393 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1394 ++j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1395 if (j >= wp->w_height - 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1396 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1397 (void)hasFoldingWin(wp, ln, NULL, &ln, TRUE, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1398 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1399 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1400 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1401 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1402 j = wp->w_lines[0].wl_lnum - wp->w_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1403 if (j < wp->w_height - 2) /* not too far off */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1404 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1405 i = plines_m_win(wp, wp->w_topline, wp->w_lines[0].wl_lnum - 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1406 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1407 /* insert extra lines for previously invisible filler lines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1408 if (wp->w_lines[0].wl_lnum != wp->w_topline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1409 i += diff_check_fill(wp, wp->w_lines[0].wl_lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1410 - wp->w_old_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1411 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1412 if (i < wp->w_height - 2) /* less than a screen off */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1413 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1414 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1415 * Try to insert the correct number of lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1416 * If not the last window, delete the lines at the bottom.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1417 * win_ins_lines may fail when the terminal can't do it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1418 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1419 if (i > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1420 check_for_delay(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1421 if (win_ins_lines(wp, 0, i, FALSE, wp == firstwin) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1422 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1423 if (wp->w_lines_valid != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1424 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1425 /* Need to update rows that are new, stop at the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1426 * first one that scrolled down. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1427 top_end = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1428 scrolled_down = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1429
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1430 /* Move the entries that were scrolled, disable
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1431 * the entries for the lines to be redrawn. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1432 if ((wp->w_lines_valid += j) > wp->w_height)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1433 wp->w_lines_valid = wp->w_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1434 for (idx = wp->w_lines_valid; idx - j >= 0; idx--)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1435 wp->w_lines[idx] = wp->w_lines[idx - j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1436 while (idx >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1437 wp->w_lines[idx--].wl_valid = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1438 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1439 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1440 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1441 mid_start = 0; /* redraw all lines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1442 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1443 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1444 mid_start = 0; /* redraw all lines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1445 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1446 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1447 mid_start = 0; /* redraw all lines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1448 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1449 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1450 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1451 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1452 * New topline is at or below old topline: May scroll up.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1453 * When topline didn't change, find first entry in w_lines[] that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1454 * needs updating.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1455 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1457 /* try to find wp->w_topline in wp->w_lines[].wl_lnum */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1458 j = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1459 row = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1460 for (i = 0; i < wp->w_lines_valid; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1461 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1462 if (wp->w_lines[i].wl_valid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1463 && wp->w_lines[i].wl_lnum == wp->w_topline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1464 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1465 j = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1466 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1467 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1468 row += wp->w_lines[i].wl_size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1469 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1470 if (j == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1471 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1472 /* if wp->w_topline is not in wp->w_lines[].wl_lnum redraw all
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1473 * lines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1474 mid_start = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1475 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1476 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1477 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1478 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1479 * Try to delete the correct number of lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1480 * wp->w_topline is at wp->w_lines[i].wl_lnum.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1481 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1482 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1483 /* If the topline didn't change, delete old filler lines,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1484 * otherwise delete filler lines of the new topline... */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1485 if (wp->w_lines[0].wl_lnum == wp->w_topline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1486 row += wp->w_old_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1487 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1488 row += diff_check_fill(wp, wp->w_topline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1489 /* ... but don't delete new filler lines. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1490 row -= wp->w_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1491 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1492 if (row > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1493 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1494 check_for_delay(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1495 if (win_del_lines(wp, 0, row, FALSE, wp == firstwin) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1496 bot_start = wp->w_height - row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1497 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1498 mid_start = 0; /* redraw all lines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1499 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1500 if ((row == 0 || bot_start < 999) && wp->w_lines_valid != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1501 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1502 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1503 * Skip the lines (below the deleted lines) that are still
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1504 * valid and don't need redrawing. Copy their info
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1505 * upwards, to compensate for the deleted lines. Set
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1506 * bot_start to the first row that needs redrawing.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1507 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1508 bot_start = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1509 idx = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1510 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1511 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1512 wp->w_lines[idx] = wp->w_lines[j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1513 /* stop at line that didn't fit, unless it is still
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1514 * valid (no lines deleted) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1515 if (row > 0 && bot_start + row
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1516 + (int)wp->w_lines[j].wl_size > wp->w_height)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1517 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1518 wp->w_lines_valid = idx + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1519 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1520 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1521 bot_start += wp->w_lines[idx++].wl_size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1522
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1523 /* stop at the last valid entry in w_lines[].wl_size */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1524 if (++j >= wp->w_lines_valid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1525 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1526 wp->w_lines_valid = idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1527 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1528 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1529 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1530 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1531 /* Correct the first entry for filler lines at the top
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1532 * when it won't get updated below. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1533 if (wp->w_p_diff && bot_start > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1534 wp->w_lines[0].wl_size =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1535 plines_win_nofill(wp, wp->w_topline, TRUE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1536 + wp->w_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1537 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1538 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1539 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1540 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1541
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1542 /* When starting redraw in the first line, redraw all lines. When
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1543 * there is only one window it's probably faster to clear the screen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1544 * first. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1545 if (mid_start == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1546 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1547 mid_end = wp->w_height;
10349
cf988222b150 commit https://github.com/vim/vim/commit/a1f4cb93ba50ea9e40cd4b1f5592b8a6d1398660
Christian Brabandt <cb@256bit.org>
parents: 10307
diff changeset
1548 if (ONE_WINDOW)
981
eb4ee2010aae updated for version 7.0-107
vimboss
parents: 944
diff changeset
1549 {
1331
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1550 /* Clear the screen when it was not done by win_del_lines() or
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1551 * win_ins_lines() above, "screen_cleared" is FALSE or MAYBE
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1552 * then. */
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1553 if (screen_cleared != TRUE)
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1554 screenclear();
981
eb4ee2010aae updated for version 7.0-107
vimboss
parents: 944
diff changeset
1555 #ifdef FEAT_WINDOWS
eb4ee2010aae updated for version 7.0-107
vimboss
parents: 944
diff changeset
1556 /* The screen was cleared, redraw the tab pages line. */
eb4ee2010aae updated for version 7.0-107
vimboss
parents: 944
diff changeset
1557 if (redraw_tabline)
eb4ee2010aae updated for version 7.0-107
vimboss
parents: 944
diff changeset
1558 draw_tabline();
eb4ee2010aae updated for version 7.0-107
vimboss
parents: 944
diff changeset
1559 #endif
eb4ee2010aae updated for version 7.0-107
vimboss
parents: 944
diff changeset
1560 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1561 }
1331
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1562
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1563 /* When win_del_lines() or win_ins_lines() caused the screen to be
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1564 * cleared (only happens for the first window) or when screenclear()
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1565 * was called directly above, "must_redraw" will have been set to
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1566 * NOT_VALID, need to reset it here to avoid redrawing twice. */
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1567 if (screen_cleared == TRUE)
d51bf80e8fc9 updated for version 7.1-045
vimboss
parents: 1326
diff changeset
1568 must_redraw = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1569 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1570 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1571 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1572 /* Not VALID or INVERTED: redraw all lines. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1573 mid_start = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1574 mid_end = wp->w_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1575 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1576
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
1577 if (type == SOME_VALID)
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
1578 {
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
1579 /* SOME_VALID: redraw all lines. */
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
1580 mid_start = 0;
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
1581 mid_end = wp->w_height;
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
1582 type = NOT_VALID;
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
1583 }
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
1584
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1585 /* check if we are updating or removing the inverted part */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1586 if ((VIsual_active && buf == curwin->w_buffer)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1587 || (wp->w_old_cursor_lnum != 0 && type != NOT_VALID))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1588 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1589 linenr_T from, to;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1590
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1591 if (VIsual_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1592 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1593 if (VIsual_active
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1594 && (VIsual_mode != wp->w_old_visual_mode
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1595 || type == INVERTED_ALL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1596 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1597 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1598 * If the type of Visual selection changed, redraw the whole
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1599 * selection. Also when the ownership of the X selection is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1600 * gained or lost.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1601 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1602 if (curwin->w_cursor.lnum < VIsual.lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1603 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1604 from = curwin->w_cursor.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1605 to = VIsual.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1606 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1607 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1608 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1609 from = VIsual.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1610 to = curwin->w_cursor.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1611 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1612 /* redraw more when the cursor moved as well */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1613 if (wp->w_old_cursor_lnum < from)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1614 from = wp->w_old_cursor_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1615 if (wp->w_old_cursor_lnum > to)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1616 to = wp->w_old_cursor_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1617 if (wp->w_old_visual_lnum < from)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1618 from = wp->w_old_visual_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1619 if (wp->w_old_visual_lnum > to)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1620 to = wp->w_old_visual_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1621 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1622 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1623 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1624 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1625 * Find the line numbers that need to be updated: The lines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1626 * between the old cursor position and the current cursor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1627 * position. Also check if the Visual position changed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1628 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1629 if (curwin->w_cursor.lnum < wp->w_old_cursor_lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1630 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1631 from = curwin->w_cursor.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1632 to = wp->w_old_cursor_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1633 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1634 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1635 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1636 from = wp->w_old_cursor_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1637 to = curwin->w_cursor.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1638 if (from == 0) /* Visual mode just started */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1639 from = to;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1640 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1641
422
169f2a51b527 updated for version 7.0110
vimboss
parents: 386
diff changeset
1642 if (VIsual.lnum != wp->w_old_visual_lnum
169f2a51b527 updated for version 7.0110
vimboss
parents: 386
diff changeset
1643 || VIsual.col != wp->w_old_visual_col)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1644 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1645 if (wp->w_old_visual_lnum < from
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1646 && wp->w_old_visual_lnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1647 from = wp->w_old_visual_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1648 if (wp->w_old_visual_lnum > to)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1649 to = wp->w_old_visual_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1650 if (VIsual.lnum < from)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1651 from = VIsual.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1652 if (VIsual.lnum > to)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1653 to = VIsual.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1654 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1655 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1656
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1657 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1658 * If in block mode and changed column or curwin->w_curswant:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1659 * update all lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1660 * First compute the actual start and end column.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1661 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1662 if (VIsual_mode == Ctrl_V)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1663 {
6266
0a4efa3d2019 updated for version 7.4.467
Bram Moolenaar <bram@vim.org>
parents: 6172
diff changeset
1664 colnr_T fromc, toc;
0a4efa3d2019 updated for version 7.4.467
Bram Moolenaar <bram@vim.org>
parents: 6172
diff changeset
1665 #if defined(FEAT_VIRTUALEDIT) && defined(FEAT_LINEBREAK)
0a4efa3d2019 updated for version 7.4.467
Bram Moolenaar <bram@vim.org>
parents: 6172
diff changeset
1666 int save_ve_flags = ve_flags;
0a4efa3d2019 updated for version 7.4.467
Bram Moolenaar <bram@vim.org>
parents: 6172
diff changeset
1667
0a4efa3d2019 updated for version 7.4.467
Bram Moolenaar <bram@vim.org>
parents: 6172
diff changeset
1668 if (curwin->w_p_lbr)
0a4efa3d2019 updated for version 7.4.467
Bram Moolenaar <bram@vim.org>
parents: 6172
diff changeset
1669 ve_flags = VE_ALL;
0a4efa3d2019 updated for version 7.4.467
Bram Moolenaar <bram@vim.org>
parents: 6172
diff changeset
1670 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1671 getvcols(wp, &VIsual, &curwin->w_cursor, &fromc, &toc);
6266
0a4efa3d2019 updated for version 7.4.467
Bram Moolenaar <bram@vim.org>
parents: 6172
diff changeset
1672 #if defined(FEAT_VIRTUALEDIT) && defined(FEAT_LINEBREAK)
0a4efa3d2019 updated for version 7.4.467
Bram Moolenaar <bram@vim.org>
parents: 6172
diff changeset
1673 ve_flags = save_ve_flags;
0a4efa3d2019 updated for version 7.4.467
Bram Moolenaar <bram@vim.org>
parents: 6172
diff changeset
1674 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1675 ++toc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1676 if (curwin->w_curswant == MAXCOL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1677 toc = MAXCOL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1678
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1679 if (fromc != wp->w_old_cursor_fcol
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1680 || toc != wp->w_old_cursor_lcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1681 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1682 if (from > VIsual.lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1683 from = VIsual.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1684 if (to < VIsual.lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1685 to = VIsual.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1686 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1687 wp->w_old_cursor_fcol = fromc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1688 wp->w_old_cursor_lcol = toc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1689 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1690 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1691 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1692 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1693 /* Use the line numbers of the old Visual area. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1694 if (wp->w_old_cursor_lnum < wp->w_old_visual_lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1695 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1696 from = wp->w_old_cursor_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1697 to = wp->w_old_visual_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1698 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1699 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1700 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1701 from = wp->w_old_visual_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1702 to = wp->w_old_cursor_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1703 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1704 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1705
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1706 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1707 * There is no need to update lines above the top of the window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1708 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1709 if (from < wp->w_topline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1710 from = wp->w_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1711
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1712 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1713 * If we know the value of w_botline, use it to restrict the update to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1714 * the lines that are visible in the window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1715 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1716 if (wp->w_valid & VALID_BOTLINE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1717 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1718 if (from >= wp->w_botline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1719 from = wp->w_botline - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1720 if (to >= wp->w_botline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1721 to = wp->w_botline - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1722 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1723
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1724 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1725 * Find the minimal part to be updated.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1726 * Watch out for scrolling that made entries in w_lines[] invalid.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1727 * E.g., CTRL-U makes the first half of w_lines[] invalid and sets
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1728 * top_end; need to redraw from top_end to the "to" line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1729 * A middle mouse click with a Visual selection may change the text
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1730 * above the Visual area and reset wl_valid, do count these for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1731 * mid_end (in srow).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1732 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1733 if (mid_start > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1734 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1735 lnum = wp->w_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1736 idx = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1737 srow = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1738 if (scrolled_down)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1739 mid_start = top_end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1740 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1741 mid_start = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1742 while (lnum < from && idx < wp->w_lines_valid) /* find start */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1743 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1744 if (wp->w_lines[idx].wl_valid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1745 mid_start += wp->w_lines[idx].wl_size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1746 else if (!scrolled_down)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1747 srow += wp->w_lines[idx].wl_size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1748 ++idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1749 # ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1750 if (idx < wp->w_lines_valid && wp->w_lines[idx].wl_valid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751 lnum = wp->w_lines[idx].wl_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1752 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1753 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 ++lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1755 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 srow += mid_start;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1757 mid_end = wp->w_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1758 for ( ; idx < wp->w_lines_valid; ++idx) /* find end */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760 if (wp->w_lines[idx].wl_valid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1761 && wp->w_lines[idx].wl_lnum >= to + 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763 /* Only update until first row of this line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 mid_end = srow;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767 srow += wp->w_lines[idx].wl_size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1769 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1770 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1772 if (VIsual_active && buf == curwin->w_buffer)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1773 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1774 wp->w_old_visual_mode = VIsual_mode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1775 wp->w_old_cursor_lnum = curwin->w_cursor.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1776 wp->w_old_visual_lnum = VIsual.lnum;
422
169f2a51b527 updated for version 7.0110
vimboss
parents: 386
diff changeset
1777 wp->w_old_visual_col = VIsual.col;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1778 wp->w_old_curswant = curwin->w_curswant;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1780 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1782 wp->w_old_visual_mode = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1783 wp->w_old_cursor_lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1784 wp->w_old_visual_lnum = 0;
422
169f2a51b527 updated for version 7.0110
vimboss
parents: 386
diff changeset
1785 wp->w_old_visual_col = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1786 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1787
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1788 #if defined(FEAT_SYN_HL) || defined(FEAT_SEARCH_EXTRA)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1789 /* reset got_int, otherwise regexp won't work */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1790 save_got_int = got_int;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1791 got_int = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1792 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1794 win_foldinfo.fi_level = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1795 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1796
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1797 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1798 * Update all the window rows.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1799 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1800 idx = 0; /* first entry in w_lines[].wl_size */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1801 row = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1802 srow = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1803 lnum = wp->w_topline; /* first line shown in window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1804 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1805 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1806 /* stop updating when reached the end of the window (check for _past_
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1807 * the end of the window is at the end of the loop) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1808 if (row == wp->w_height)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1809 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1810 didline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1811 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1812 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1813
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1814 /* stop updating when hit the end of the file */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1815 if (lnum > buf->b_ml.ml_line_count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1816 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1817 eof = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1818 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1819 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1820
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1821 /* Remember the starting row of the line that is going to be dealt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1822 * with. It is used further down when the line doesn't fit. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1823 srow = row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1824
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1825 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1826 * Update a line when it is in an area that needs updating, when it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1827 * has changes or w_lines[idx] is invalid.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1828 * bot_start may be halfway a wrapped line after using
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1829 * win_del_lines(), check if the current line includes it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1830 * When syntax folding is being used, the saved syntax states will
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1831 * already have been updated, we can't see where the syntax state is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1832 * the same again, just update until the end of the window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1833 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1834 if (row < top_end
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1835 || (row >= mid_start && row < mid_end)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1836 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1837 || top_to_mod
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1838 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1839 || idx >= wp->w_lines_valid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1840 || (row + wp->w_lines[idx].wl_size > bot_start)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1841 || (mod_top != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1842 && (lnum == mod_top
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1843 || (lnum >= mod_top
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1844 && (lnum < mod_bot
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1845 #ifdef FEAT_SYN_HL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1846 || did_update == DID_FOLD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1847 || (did_update == DID_LINE
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
1848 && syntax_present(wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1849 && (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1850 # ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1851 (foldmethodIsSyntax(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1852 && hasAnyFolding(wp)) ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1853 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1854 syntax_check_changed(lnum)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1855 #endif
4916
ba328b4a990e updated for version 7.3.1203
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
1856 #ifdef FEAT_SEARCH_EXTRA
6018
79950dae1d7d updated for version 7.4.349
Bram Moolenaar <bram@vim.org>
parents: 6007
diff changeset
1857 /* match in fixed position might need redraw
79950dae1d7d updated for version 7.4.349
Bram Moolenaar <bram@vim.org>
parents: 6007
diff changeset
1858 * if lines were inserted or deleted */
79950dae1d7d updated for version 7.4.349
Bram Moolenaar <bram@vim.org>
parents: 6007
diff changeset
1859 || (wp->w_match_head != NULL
79950dae1d7d updated for version 7.4.349
Bram Moolenaar <bram@vim.org>
parents: 6007
diff changeset
1860 && buf->b_mod_xlines != 0)
4916
ba328b4a990e updated for version 7.3.1203
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
1861 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1862 )))))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1863 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1864 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1865 if (lnum == mod_top)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1866 top_to_mod = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1867 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1868
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1869 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1870 * When at start of changed lines: May scroll following lines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1871 * up or down to minimize redrawing.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1872 * Don't do this when the change continues until the end.
3318
c70c005f61fb updated for version 7.3.426
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
1873 * Don't scroll when dollar_vcol >= 0, keep the "$".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1874 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1875 if (lnum == mod_top
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1876 && mod_bot != MAXLNUM
3318
c70c005f61fb updated for version 7.3.426
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
1877 && !(dollar_vcol >= 0 && mod_bot == mod_top + 1))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1878 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1879 int old_rows = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1880 int new_rows = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1881 int xtra_rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1882 linenr_T l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1883
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1884 /* Count the old number of window rows, using w_lines[], which
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1885 * should still contain the sizes for the lines as they are
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1886 * currently displayed. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1887 for (i = idx; i < wp->w_lines_valid; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1888 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1889 /* Only valid lines have a meaningful wl_lnum. Invalid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1890 * lines are part of the changed area. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1891 if (wp->w_lines[i].wl_valid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1892 && wp->w_lines[i].wl_lnum == mod_bot)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1893 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1894 old_rows += wp->w_lines[i].wl_size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1895 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1896 if (wp->w_lines[i].wl_valid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1897 && wp->w_lines[i].wl_lastlnum + 1 == mod_bot)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1898 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1899 /* Must have found the last valid entry above mod_bot.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1900 * Add following invalid entries. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1901 ++i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1902 while (i < wp->w_lines_valid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1903 && !wp->w_lines[i].wl_valid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1904 old_rows += wp->w_lines[i++].wl_size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1905 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1906 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1907 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1908 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1909
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1910 if (i >= wp->w_lines_valid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1911 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1912 /* We can't find a valid line below the changed lines,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1913 * need to redraw until the end of the window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1914 * Inserting/deleting lines has no use. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1915 bot_start = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1916 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1917 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1918 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1919 /* Able to count old number of rows: Count new window
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1920 * rows, and may insert/delete lines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1921 j = idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1922 for (l = lnum; l < mod_bot; ++l)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1923 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1924 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1925 if (hasFoldingWin(wp, l, NULL, &l, TRUE, NULL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1926 ++new_rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1927 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1928 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1929 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1930 if (l == wp->w_topline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1931 new_rows += plines_win_nofill(wp, l, TRUE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1932 + wp->w_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1933 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1934 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1935 new_rows += plines_win(wp, l, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1936 ++j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1937 if (new_rows > wp->w_height - row - 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1938 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1939 /* it's getting too much, must redraw the rest */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1940 new_rows = 9999;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1941 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1942 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1943 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1944 xtra_rows = new_rows - old_rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1945 if (xtra_rows < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1946 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1947 /* May scroll text up. If there is not enough
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1948 * remaining text or scrolling fails, must redraw the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1949 * rest. If scrolling works, must redraw the text
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1950 * below the scrolled text. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1951 if (row - xtra_rows >= wp->w_height - 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1952 mod_bot = MAXLNUM;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1953 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1954 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1955 check_for_delay(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1956 if (win_del_lines(wp, row,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1957 -xtra_rows, FALSE, FALSE) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1958 mod_bot = MAXLNUM;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1959 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1960 bot_start = wp->w_height + xtra_rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1961 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1962 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1963 else if (xtra_rows > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1964 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1965 /* May scroll text down. If there is not enough
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1966 * remaining text of scrolling fails, must redraw the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1967 * rest. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1968 if (row + xtra_rows >= wp->w_height - 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1969 mod_bot = MAXLNUM;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1970 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1971 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1972 check_for_delay(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1973 if (win_ins_lines(wp, row + old_rows,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1974 xtra_rows, FALSE, FALSE) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1975 mod_bot = MAXLNUM;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1976 else if (top_end > row + old_rows)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1977 /* Scrolled the part at the top that requires
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1978 * updating down. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1979 top_end += xtra_rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1980 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1981 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1982
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1983 /* When not updating the rest, may need to move w_lines[]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1984 * entries. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1985 if (mod_bot != MAXLNUM && i != j)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1986 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1987 if (j < i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1988 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1989 int x = row + new_rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1990
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1991 /* move entries in w_lines[] upwards */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1992 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1993 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1994 /* stop at last valid entry in w_lines[] */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1995 if (i >= wp->w_lines_valid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1996 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1997 wp->w_lines_valid = j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1998 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1999 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2000 wp->w_lines[j] = wp->w_lines[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2001 /* stop at a line that won't fit */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2002 if (x + (int)wp->w_lines[j].wl_size
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2003 > wp->w_height)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2004 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2005 wp->w_lines_valid = j + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2006 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2007 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2008 x += wp->w_lines[j++].wl_size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2009 ++i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2010 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2011 if (bot_start > x)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2012 bot_start = x;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2013 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2014 else /* j > i */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2015 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2016 /* move entries in w_lines[] downwards */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2017 j -= i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2018 wp->w_lines_valid += j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2019 if (wp->w_lines_valid > wp->w_height)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2020 wp->w_lines_valid = wp->w_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2021 for (i = wp->w_lines_valid; i - j >= idx; --i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2022 wp->w_lines[i] = wp->w_lines[i - j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2023
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2024 /* The w_lines[] entries for inserted lines are
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2025 * now invalid, but wl_size may be used above.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2026 * Reset to zero. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2027 while (i >= idx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2028 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2029 wp->w_lines[i].wl_size = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2030 wp->w_lines[i--].wl_valid = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2031 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2032 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2033 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2034 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2035 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2036
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2037 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2038 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2039 * When lines are folded, display one line for all of them.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2040 * Otherwise, display normally (can be several display lines when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2041 * 'wrap' is on).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2042 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2043 fold_count = foldedCount(wp, lnum, &win_foldinfo);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2044 if (fold_count != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2045 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2046 fold_line(wp, fold_count, &win_foldinfo, lnum, row);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2047 ++row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2048 --fold_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2049 wp->w_lines[idx].wl_folded = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2050 wp->w_lines[idx].wl_lastlnum = lnum + fold_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2051 # ifdef FEAT_SYN_HL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2052 did_update = DID_FOLD;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2053 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2054 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2055 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2056 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2057 if (idx < wp->w_lines_valid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2058 && wp->w_lines[idx].wl_valid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2059 && wp->w_lines[idx].wl_lnum == lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2060 && lnum > wp->w_topline
9665
b193bdb6ea25 commit https://github.com/vim/vim/commit/ad9c2a08f0509294269a2f11a59a438b944bdd5a
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
2061 && !(dy_flags & (DY_LASTLINE | DY_TRUNCATE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2062 && srow + wp->w_lines[idx].wl_size > wp->w_height
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2063 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2064 && diff_check_fill(wp, lnum) == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2065 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2066 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2067 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2068 /* This line is not going to fit. Don't draw anything here,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2069 * will draw "@ " lines below. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2070 row = wp->w_height + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2071 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2072 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2073 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2074 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2075 prepare_search_hl(wp, lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2076 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2077 #ifdef FEAT_SYN_HL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2078 /* Let the syntax stuff know we skipped a few lines. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2079 if (syntax_last_parsed != 0 && syntax_last_parsed + 1 < lnum
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
2080 && syntax_present(wp))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2081 syntax_end_parsing(syntax_last_parsed + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2082 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2083
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2084 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2085 * Display one line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2086 */
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 574
diff changeset
2087 row = win_line(wp, lnum, srow, wp->w_height, mod_top == 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2088
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2089 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2090 wp->w_lines[idx].wl_folded = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2091 wp->w_lines[idx].wl_lastlnum = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2092 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2093 #ifdef FEAT_SYN_HL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2094 did_update = DID_LINE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2095 syntax_last_parsed = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2096 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2097 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2098
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2099 wp->w_lines[idx].wl_lnum = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2100 wp->w_lines[idx].wl_valid = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2101 if (row > wp->w_height) /* past end of screen */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2102 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2103 /* we may need the size of that too long line later on */
3318
c70c005f61fb updated for version 7.3.426
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
2104 if (dollar_vcol == -1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2105 wp->w_lines[idx].wl_size = plines_win(wp, lnum, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2106 ++idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2107 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2108 }
3318
c70c005f61fb updated for version 7.3.426
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
2109 if (dollar_vcol == -1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2110 wp->w_lines[idx].wl_size = row - srow;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2111 ++idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2112 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2113 lnum += fold_count + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2114 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2115 ++lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2116 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2117 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2118 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2119 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2120 /* This line does not need updating, advance to the next one */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2121 row += wp->w_lines[idx++].wl_size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2122 if (row > wp->w_height) /* past end of screen */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2123 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2124 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2125 lnum = wp->w_lines[idx - 1].wl_lastlnum + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2126 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2127 ++lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2128 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2129 #ifdef FEAT_SYN_HL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2130 did_update = DID_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2131 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2132 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2133
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2134 if (lnum > buf->b_ml.ml_line_count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2135 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2136 eof = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2137 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2138 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2139 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2140 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2141 * End of loop over all window lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2142 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2143
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2144
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2145 if (idx > wp->w_lines_valid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2146 wp->w_lines_valid = idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2147
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2148 #ifdef FEAT_SYN_HL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2149 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2150 * Let the syntax stuff know we stop parsing here.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2151 */
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
2152 if (syntax_last_parsed != 0 && syntax_present(wp))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2153 syntax_end_parsing(syntax_last_parsed + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2154 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2155
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2156 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2157 * If we didn't hit the end of the file, and we didn't finish the last
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2158 * line we were working on, then the line didn't fit.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2159 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2160 wp->w_empty_rows = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2161 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2162 wp->w_filler_rows = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2163 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2164 if (!eof && !didline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2165 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2166 if (lnum == wp->w_topline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2167 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2168 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2169 * Single line that does not fit!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2170 * Don't overwrite it, it can be edited.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2171 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2172 wp->w_botline = lnum + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2173 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2174 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2175 else if (diff_check_fill(wp, lnum) >= wp->w_height - srow)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2176 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2177 /* Window ends in filler lines. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2178 wp->w_botline = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2179 wp->w_filler_rows = wp->w_height - srow;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2180 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2181 #endif
9665
b193bdb6ea25 commit https://github.com/vim/vim/commit/ad9c2a08f0509294269a2f11a59a438b944bdd5a
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
2182 else if (dy_flags & DY_TRUNCATE) /* 'display' has "truncate" */
b193bdb6ea25 commit https://github.com/vim/vim/commit/ad9c2a08f0509294269a2f11a59a438b944bdd5a
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
2183 {
b193bdb6ea25 commit https://github.com/vim/vim/commit/ad9c2a08f0509294269a2f11a59a438b944bdd5a
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
2184 int scr_row = W_WINROW(wp) + wp->w_height - 1;
b193bdb6ea25 commit https://github.com/vim/vim/commit/ad9c2a08f0509294269a2f11a59a438b944bdd5a
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
2185
b193bdb6ea25 commit https://github.com/vim/vim/commit/ad9c2a08f0509294269a2f11a59a438b944bdd5a
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
2186 /*
b193bdb6ea25 commit https://github.com/vim/vim/commit/ad9c2a08f0509294269a2f11a59a438b944bdd5a
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
2187 * Last line isn't finished: Display "@@@" in the last screen line.
b193bdb6ea25 commit https://github.com/vim/vim/commit/ad9c2a08f0509294269a2f11a59a438b944bdd5a
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
2188 */
b193bdb6ea25 commit https://github.com/vim/vim/commit/ad9c2a08f0509294269a2f11a59a438b944bdd5a
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
2189 screen_puts_len((char_u *)"@@", 2, scr_row, W_WINCOL(wp),
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2190 HL_ATTR(HLF_AT));
9665
b193bdb6ea25 commit https://github.com/vim/vim/commit/ad9c2a08f0509294269a2f11a59a438b944bdd5a
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
2191 screen_fill(scr_row, scr_row + 1,
b193bdb6ea25 commit https://github.com/vim/vim/commit/ad9c2a08f0509294269a2f11a59a438b944bdd5a
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
2192 (int)W_WINCOL(wp) + 2, (int)W_ENDCOL(wp),
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2193 '@', ' ', HL_ATTR(HLF_AT));
9665
b193bdb6ea25 commit https://github.com/vim/vim/commit/ad9c2a08f0509294269a2f11a59a438b944bdd5a
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
2194 set_empty_rows(wp, srow);
b193bdb6ea25 commit https://github.com/vim/vim/commit/ad9c2a08f0509294269a2f11a59a438b944bdd5a
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
2195 wp->w_botline = lnum;
b193bdb6ea25 commit https://github.com/vim/vim/commit/ad9c2a08f0509294269a2f11a59a438b944bdd5a
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
2196 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2197 else if (dy_flags & DY_LASTLINE) /* 'display' has "lastline" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2198 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2199 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2200 * Last line isn't finished: Display "@@@" at the end.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2201 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2202 screen_fill(W_WINROW(wp) + wp->w_height - 1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2203 W_WINROW(wp) + wp->w_height,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2204 (int)W_ENDCOL(wp) - 3, (int)W_ENDCOL(wp),
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2205 '@', '@', HL_ATTR(HLF_AT));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2206 set_empty_rows(wp, srow);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2207 wp->w_botline = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2208 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2209 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2210 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2211 win_draw_end(wp, '@', ' ', srow, wp->w_height, HLF_AT);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2212 wp->w_botline = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2213 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2214 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2215 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2216 {
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
2217 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2218 draw_vsep_win(wp, row);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2219 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2220 if (eof) /* we hit the end of the file */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2221 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2222 wp->w_botline = buf->b_ml.ml_line_count + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2223 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2224 j = diff_check_fill(wp, wp->w_botline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2225 if (j > 0 && !wp->w_botfill)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2226 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2227 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2228 * Display filler lines at the end of the file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2229 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2230 if (char2cells(fill_diff) > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2231 i = '-';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2232 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2233 i = fill_diff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2234 if (row + j > wp->w_height)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2235 j = wp->w_height - row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2236 win_draw_end(wp, i, i, row, row + (int)j, HLF_DED);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2237 row += j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2238 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2239 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2240 }
3318
c70c005f61fb updated for version 7.3.426
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
2241 else if (dollar_vcol == -1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2242 wp->w_botline = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2243
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2244 /* make sure the rest of the screen is blank */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2245 /* put '~'s on rows that aren't part of the file. */
9877
7da89d9c744b commit https://github.com/vim/vim/commit/58b853460add42098ab08017df9e030fb14fd34b
Christian Brabandt <cb@256bit.org>
parents: 9852
diff changeset
2246 win_draw_end(wp, '~', ' ', row, wp->w_height, HLF_EOB);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2247 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2248
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2249 /* Reset the type of redrawing required, the window has been updated. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2250 wp->w_redr_type = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2251 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2252 wp->w_old_topfill = wp->w_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2253 wp->w_old_botfill = wp->w_botfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2254 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2255
3318
c70c005f61fb updated for version 7.3.426
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
2256 if (dollar_vcol == -1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2257 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2258 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2259 * There is a trick with w_botline. If we invalidate it on each
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2260 * change that might modify it, this will cause a lot of expensive
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2261 * calls to plines() in update_topline() each time. Therefore the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2262 * value of w_botline is often approximated, and this value is used to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2263 * compute the value of w_topline. If the value of w_botline was
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2264 * wrong, check that the value of w_topline is correct (cursor is on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2265 * the visible part of the text). If it's not, we need to redraw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2266 * again. Mostly this just means scrolling up a few lines, so it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2267 * doesn't look too bad. Only do this for the current window (where
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2268 * changes are relevant).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2269 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2270 wp->w_valid |= VALID_BOTLINE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2271 if (wp == curwin && wp->w_botline != old_botline && !recursive)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2272 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2273 recursive = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2274 curwin->w_valid &= ~VALID_TOPLINE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2275 update_topline(); /* may invalidate w_botline again */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2276 if (must_redraw != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2277 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2278 /* Don't update for changes in buffer again. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2279 i = curbuf->b_mod_set;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2280 curbuf->b_mod_set = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2281 win_update(curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2282 must_redraw = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2283 curbuf->b_mod_set = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2284 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2285 recursive = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2286 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2287 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2288
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2289 #if defined(FEAT_SYN_HL) || defined(FEAT_SEARCH_EXTRA)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2290 /* restore got_int, unless CTRL-C was hit while redrawing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2291 if (!got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2292 got_int = save_got_int;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2293 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2294 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2295
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2296 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2297 * Clear the rest of the window and mark the unused lines with "c1". use "c2"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2298 * as the filler character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2299 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2300 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2301 win_draw_end(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2302 win_T *wp,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2303 int c1,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2304 int c2,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2305 int row,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2306 int endrow,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2307 hlf_T hl)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2308 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2309 #if defined(FEAT_FOLDING) || defined(FEAT_SIGNS) || defined(FEAT_CMDWIN)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2310 int n = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2311 # define FDC_OFF n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2312 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2313 # define FDC_OFF 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2314 #endif
6553
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2315 #ifdef FEAT_FOLDING
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2316 int fdc = compute_foldcolumn(wp, 0);
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2317 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2318
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2319 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2320 if (wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2321 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2322 /* No check for cmdline window: should never be right-left. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2323 # ifdef FEAT_FOLDING
6553
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2324 n = fdc;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2325
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2326 if (n > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2327 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2328 /* draw the fold column at the right */
119
e8f07016e34d updated for version 7.0042
vimboss
parents: 67
diff changeset
2329 if (n > W_WIDTH(wp))
e8f07016e34d updated for version 7.0042
vimboss
parents: 67
diff changeset
2330 n = W_WIDTH(wp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2331 screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2332 W_ENDCOL(wp) - n, (int)W_ENDCOL(wp),
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2333 ' ', ' ', HL_ATTR(HLF_FC));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2334 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2335 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2336 # ifdef FEAT_SIGNS
9852
4eea48b76d03 commit https://github.com/vim/vim/commit/95ec9d6a6ab3117d60ff638670a803d43974ba51
Christian Brabandt <cb@256bit.org>
parents: 9848
diff changeset
2337 if (signcolumn_on(wp))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2338 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2339 int nn = n + 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2340
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2341 /* draw the sign column left of the fold column */
119
e8f07016e34d updated for version 7.0042
vimboss
parents: 67
diff changeset
2342 if (nn > W_WIDTH(wp))
e8f07016e34d updated for version 7.0042
vimboss
parents: 67
diff changeset
2343 nn = W_WIDTH(wp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2344 screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2345 W_ENDCOL(wp) - nn, (int)W_ENDCOL(wp) - n,
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2346 ' ', ' ', HL_ATTR(HLF_SC));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2347 n = nn;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2348 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2349 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2350 screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2351 W_WINCOL(wp), W_ENDCOL(wp) - 1 - FDC_OFF,
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2352 c2, c2, HL_ATTR(hl));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2353 screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2354 W_ENDCOL(wp) - 1 - FDC_OFF, W_ENDCOL(wp) - FDC_OFF,
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2355 c1, c2, HL_ATTR(hl));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2356 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2357 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2358 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2359 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2360 #ifdef FEAT_CMDWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2361 if (cmdwin_type != 0 && wp == curwin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2362 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2363 /* draw the cmdline character in the leftmost column */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2364 n = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2365 if (n > wp->w_width)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2366 n = wp->w_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2367 screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2368 W_WINCOL(wp), (int)W_WINCOL(wp) + n,
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2369 cmdwin_type, ' ', HL_ATTR(HLF_AT));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2370 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2371 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2372 #ifdef FEAT_FOLDING
6553
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2373 if (fdc > 0)
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2374 {
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2375 int nn = n + fdc;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2376
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2377 /* draw the fold column at the left */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2378 if (nn > W_WIDTH(wp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2379 nn = W_WIDTH(wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2380 screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2381 W_WINCOL(wp) + n, (int)W_WINCOL(wp) + nn,
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2382 ' ', ' ', HL_ATTR(HLF_FC));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2383 n = nn;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2384 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2385 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2386 #ifdef FEAT_SIGNS
9852
4eea48b76d03 commit https://github.com/vim/vim/commit/95ec9d6a6ab3117d60ff638670a803d43974ba51
Christian Brabandt <cb@256bit.org>
parents: 9848
diff changeset
2387 if (signcolumn_on(wp))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2388 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2389 int nn = n + 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2390
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2391 /* draw the sign column after the fold column */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2392 if (nn > W_WIDTH(wp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2393 nn = W_WIDTH(wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2394 screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2395 W_WINCOL(wp) + n, (int)W_WINCOL(wp) + nn,
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2396 ' ', ' ', HL_ATTR(HLF_SC));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2397 n = nn;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2398 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2399 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2400 screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2401 W_WINCOL(wp) + FDC_OFF, (int)W_ENDCOL(wp),
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2402 c1, c2, HL_ATTR(hl));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2403 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2404 set_empty_rows(wp, row);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2405 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2406
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
2407 #ifdef FEAT_SYN_HL
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
2408 static int advance_color_col(int vcol, int **color_cols);
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
2409
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
2410 /*
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
2411 * Advance **color_cols and return TRUE when there are columns to draw.
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
2412 */
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
2413 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2414 advance_color_col(int vcol, int **color_cols)
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
2415 {
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
2416 while (**color_cols >= 0 && vcol > **color_cols)
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
2417 ++*color_cols;
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
2418 return (**color_cols >= 0);
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
2419 }
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
2420 #endif
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
2421
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2422 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2423 /*
6553
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2424 * Compute the width of the foldcolumn. Based on 'foldcolumn' and how much
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2425 * space is available for window "wp", minus "col".
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2426 */
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2427 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2428 compute_foldcolumn(win_T *wp, int col)
6553
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2429 {
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2430 int fdc = wp->w_p_fdc;
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2431 int wmw = wp == curwin && p_wmw == 0 ? 1 : p_wmw;
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2432 int wwidth = W_WIDTH(wp);
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2433
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2434 if (fdc > wwidth - (col + wmw))
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2435 fdc = wwidth - (col + wmw);
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2436 return fdc;
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2437 }
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2438
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2439 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2440 * Display one folded line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2441 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2442 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2443 fold_line(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2444 win_T *wp,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2445 long fold_count,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2446 foldinfo_T *foldinfo,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2447 linenr_T lnum,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2448 int row)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2449 {
9754
a990e7ed260b commit https://github.com/vim/vim/commit/ee695f787ade7fd88fc5f5497553d95c0c3645b5
Christian Brabandt <cb@256bit.org>
parents: 9665
diff changeset
2450 char_u buf[FOLD_TEXT_LEN];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2451 pos_T *top, *bot;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2452 linenr_T lnume = lnum + fold_count - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2453 int len;
29
ac33b7c03fac updated for version 7.0018
vimboss
parents: 26
diff changeset
2454 char_u *text;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2455 int fdc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2456 int col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2457 int txtcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2458 int off = (int)(current_ScreenLine - ScreenLines);
216
da182deebec7 updated for version 7.0061
vimboss
parents: 205
diff changeset
2459 int ri;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2460
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2461 /* Build the fold line:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2462 * 1. Add the cmdwin_type for the command-line window
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2463 * 2. Add the 'foldcolumn'
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
2464 * 3. Add the 'number' or 'relativenumber' column
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2465 * 4. Compose the text
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2466 * 5. Add the text
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2467 * 6. set highlighting for the Visual area an other text
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2468 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2469 col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2470
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2471 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2472 * 1. Add the cmdwin_type for the command-line window
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2473 * Ignores 'rightleft', this window is never right-left.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2474 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2475 #ifdef FEAT_CMDWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2476 if (cmdwin_type != 0 && wp == curwin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2477 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2478 ScreenLines[off] = cmdwin_type;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2479 ScreenAttrs[off] = HL_ATTR(HLF_AT);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2480 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2481 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2482 ScreenLinesUC[off] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2483 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2484 ++col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2485 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2486 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2487
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2488 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2489 * 2. Add the 'foldcolumn'
6553
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2490 * Reduce the width when there is not enough space.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2491 */
6553
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2492 fdc = compute_foldcolumn(wp, col);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2493 if (fdc > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2494 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2495 fill_foldcolumn(buf, wp, TRUE, lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2496 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2497 if (wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2498 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2499 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2500
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2501 copy_text_attr(off + W_WIDTH(wp) - fdc - col, buf, fdc,
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2502 HL_ATTR(HLF_FC));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2503 /* reverse the fold column */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2504 for (i = 0; i < fdc; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2505 ScreenLines[off + W_WIDTH(wp) - i - 1 - col] = buf[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2506 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2507 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2508 #endif
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2509 copy_text_attr(off + col, buf, fdc, HL_ATTR(HLF_FC));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2510 col += fdc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2511 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2513 #ifdef FEAT_RIGHTLEFT
216
da182deebec7 updated for version 7.0061
vimboss
parents: 205
diff changeset
2514 # define RL_MEMSET(p, v, l) if (wp->w_p_rl) \
da182deebec7 updated for version 7.0061
vimboss
parents: 205
diff changeset
2515 for (ri = 0; ri < l; ++ri) \
da182deebec7 updated for version 7.0061
vimboss
parents: 205
diff changeset
2516 ScreenAttrs[off + (W_WIDTH(wp) - (p) - (l)) + ri] = v; \
da182deebec7 updated for version 7.0061
vimboss
parents: 205
diff changeset
2517 else \
da182deebec7 updated for version 7.0061
vimboss
parents: 205
diff changeset
2518 for (ri = 0; ri < l; ++ri) \
da182deebec7 updated for version 7.0061
vimboss
parents: 205
diff changeset
2519 ScreenAttrs[off + (p) + ri] = v
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2520 #else
216
da182deebec7 updated for version 7.0061
vimboss
parents: 205
diff changeset
2521 # define RL_MEMSET(p, v, l) for (ri = 0; ri < l; ++ri) \
da182deebec7 updated for version 7.0061
vimboss
parents: 205
diff changeset
2522 ScreenAttrs[off + (p) + ri] = v
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2523 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2524
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
2525 /* Set all attributes of the 'number' or 'relativenumber' column and the
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
2526 * text */
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2527 RL_MEMSET(col, HL_ATTR(HLF_FL), W_WIDTH(wp) - col);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2528
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2529 #ifdef FEAT_SIGNS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2530 /* If signs are being displayed, add two spaces. */
9852
4eea48b76d03 commit https://github.com/vim/vim/commit/95ec9d6a6ab3117d60ff638670a803d43974ba51
Christian Brabandt <cb@256bit.org>
parents: 9848
diff changeset
2531 if (signcolumn_on(wp))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2532 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2533 len = W_WIDTH(wp) - col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2534 if (len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2535 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2536 if (len > 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2537 len = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2538 # ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2539 if (wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2540 /* the line number isn't reversed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2541 copy_text_attr(off + W_WIDTH(wp) - len - col,
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2542 (char_u *)" ", len, HL_ATTR(HLF_FL));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2543 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2544 # endif
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2545 copy_text_attr(off + col, (char_u *)" ", len, HL_ATTR(HLF_FL));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2546 col += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2547 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2548 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2549 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2550
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2551 /*
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
2552 * 3. Add the 'number' or 'relativenumber' column
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2553 */
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
2554 if (wp->w_p_nu || wp->w_p_rnu)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2555 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2556 len = W_WIDTH(wp) - col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2557 if (len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2558 {
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
2559 int w = number_width(wp);
5905
662ae48e7e24 updated for version 7.4.295
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
2560 long num;
662ae48e7e24 updated for version 7.4.295
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
2561 char *fmt = "%*ld ";
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
2562
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
2563 if (len > w + 1)
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
2564 len = w + 1;
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
2565
4736
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
2566 if (wp->w_p_nu && !wp->w_p_rnu)
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
2567 /* 'number' + 'norelativenumber' */
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
2568 num = (long)lnum;
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
2569 else
4065
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
2570 {
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
2571 /* 'relativenumber', don't use negative numbers */
2675
f987220caa57 updated for version 7.3.094
Bram Moolenaar <bram@vim.org>
parents: 2661
diff changeset
2572 num = labs((long)get_cursor_rel_lnum(wp, lnum));
4736
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
2573 if (num == 0 && wp->w_p_nu && wp->w_p_rnu)
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
2574 {
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
2575 /* 'number' + 'relativenumber': cursor line shows absolute
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
2576 * line number */
4065
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
2577 num = lnum;
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
2578 fmt = "%-*ld ";
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
2579 }
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
2580 }
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
2581
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
2582 sprintf((char *)buf, fmt, w, num);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2583 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2584 if (wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2585 /* the line number isn't reversed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2586 copy_text_attr(off + W_WIDTH(wp) - len - col, buf, len,
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2587 HL_ATTR(HLF_FL));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2588 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2589 #endif
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2590 copy_text_attr(off + col, buf, len, HL_ATTR(HLF_FL));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2591 col += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2592 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2593 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2594
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2595 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2596 * 4. Compose the folded-line string with 'foldtext', if set.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2597 */
29
ac33b7c03fac updated for version 7.0018
vimboss
parents: 26
diff changeset
2598 text = get_foldtext(wp, lnum, lnume, foldinfo, buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2599
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2600 txtcol = col; /* remember where text starts */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2601
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2602 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2603 * 5. move the text to current_ScreenLine. Fill up with "fill_fold".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2604 * Right-left text is put in columns 0 - number-col, normal text is put
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2605 * in columns number-col - window-width.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2606 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2607 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2608 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2609 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2610 int cells;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2611 int u8c, u8cc[MAX_MCO];
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2612 int i;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2613 int idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2614 int c_len;
33
f6033dcbaf31 updated for version 7.0020
vimboss
parents: 29
diff changeset
2615 char_u *p;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2616 # ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2617 int prev_c = 0; /* previous Arabic character */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2618 int prev_c1 = 0; /* first composing char for prev_c */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2619 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2620
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2621 # ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2622 if (wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2623 idx = off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2624 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2625 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2626 idx = off + col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2627
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2628 /* Store multibyte characters in ScreenLines[] et al. correctly. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2629 for (p = text; *p != NUL; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2630 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2631 cells = (*mb_ptr2cells)(p);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
2632 c_len = (*mb_ptr2len)(p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2633 if (col + cells > W_WIDTH(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2634 # ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2635 - (wp->w_p_rl ? col : 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2636 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2637 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2638 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2639 ScreenLines[idx] = *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2640 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2641 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2642 u8c = utfc_ptr2char(p, u8cc);
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2643 if (*p < 0x80 && u8cc[0] == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2644 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2645 ScreenLinesUC[idx] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2646 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2647 prev_c = u8c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2648 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2649 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2650 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2651 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2652 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2653 if (p_arshape && !p_tbidi && ARABIC_CHAR(u8c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2654 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2655 /* Do Arabic shaping. */
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2656 int pc, pc1, nc;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2657 int pcc[MAX_MCO];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2658 int firstbyte = *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2659
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2660 /* The idea of what is the previous and next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2661 * character depends on 'rightleft'. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2662 if (wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2663 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2664 pc = prev_c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2665 pc1 = prev_c1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2666 nc = utf_ptr2char(p + c_len);
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2667 prev_c1 = u8cc[0];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2668 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2669 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2670 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2671 pc = utfc_ptr2char(p + c_len, pcc);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2672 nc = prev_c;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2673 pc1 = pcc[0];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2674 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2675 prev_c = u8c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2676
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2677 u8c = arabic_shape(u8c, &firstbyte, &u8cc[0],
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2678 pc, pc1, nc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2679 ScreenLines[idx] = firstbyte;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2680 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2681 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2682 prev_c = u8c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2683 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2684 /* Non-BMP character: display as ? or fullwidth ?. */
1401
e351146e7974 updated for version 7.1-116
vimboss
parents: 1378
diff changeset
2685 #ifdef UNICODE16
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2686 if (u8c >= 0x10000)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2687 ScreenLinesUC[idx] = (cells == 2) ? 0xff1f : (int)'?';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2688 else
1401
e351146e7974 updated for version 7.1-116
vimboss
parents: 1378
diff changeset
2689 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2690 ScreenLinesUC[idx] = u8c;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2691 for (i = 0; i < Screen_mco; ++i)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2692 {
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2693 ScreenLinesC[i][idx] = u8cc[i];
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2694 if (u8cc[i] == 0)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2695 break;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2696 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2697 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2698 if (cells > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2699 ScreenLines[idx + 1] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2700 }
2069
63613d8d7e4d updated for version 7.2.354
Bram Moolenaar <bram@zimbu.org>
parents: 2055
diff changeset
2701 else if (enc_dbcs == DBCS_JPNU && *p == 0x8e)
63613d8d7e4d updated for version 7.2.354
Bram Moolenaar <bram@zimbu.org>
parents: 2055
diff changeset
2702 /* double-byte single width character */
63613d8d7e4d updated for version 7.2.354
Bram Moolenaar <bram@zimbu.org>
parents: 2055
diff changeset
2703 ScreenLines2[idx] = p[1];
63613d8d7e4d updated for version 7.2.354
Bram Moolenaar <bram@zimbu.org>
parents: 2055
diff changeset
2704 else if (cells > 1)
63613d8d7e4d updated for version 7.2.354
Bram Moolenaar <bram@zimbu.org>
parents: 2055
diff changeset
2705 /* double-width character */
63613d8d7e4d updated for version 7.2.354
Bram Moolenaar <bram@zimbu.org>
parents: 2055
diff changeset
2706 ScreenLines[idx + 1] = p[1];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2707 col += cells;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2708 idx += cells;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2709 p += c_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2710 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2711 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2712 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2713 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2714 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2715 len = (int)STRLEN(text);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2716 if (len > W_WIDTH(wp) - col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2717 len = W_WIDTH(wp) - col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2718 if (len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2719 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2720 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2721 if (wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2722 STRNCPY(current_ScreenLine, text, len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2723 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2724 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2725 STRNCPY(current_ScreenLine + col, text, len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2726 col += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2727 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2728 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2729
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2730 /* Fill the rest of the line with the fold filler */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2731 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2732 if (wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2733 col -= txtcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2734 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2735 while (col < W_WIDTH(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2736 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2737 - (wp->w_p_rl ? txtcol : 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2738 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2739 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2740 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2741 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2742 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2743 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2744 if (fill_fold >= 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2745 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2746 ScreenLinesUC[off + col] = fill_fold;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
2747 ScreenLinesC[0][off + col] = 0;
11265
b25895ab67be patch 8.0.0518: bad fold text when a multi-byte char has a zero byte
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2748 ScreenLines[off + col] = 0x80; /* avoid storing zero */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2749 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2750 else
11277
f26a535d9464 patch 8.0.0524: folds messed up
Christian Brabandt <cb@256bit.org>
parents: 11269
diff changeset
2751 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2752 ScreenLinesUC[off + col] = 0;
11277
f26a535d9464 patch 8.0.0524: folds messed up
Christian Brabandt <cb@256bit.org>
parents: 11269
diff changeset
2753 ScreenLines[off + col] = fill_fold;
f26a535d9464 patch 8.0.0524: folds messed up
Christian Brabandt <cb@256bit.org>
parents: 11269
diff changeset
2754 }
11265
b25895ab67be patch 8.0.0518: bad fold text when a multi-byte char has a zero byte
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2755 col++;
b25895ab67be patch 8.0.0518: bad fold text when a multi-byte char has a zero byte
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2756 }
b25895ab67be patch 8.0.0518: bad fold text when a multi-byte char has a zero byte
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2757 else
b25895ab67be patch 8.0.0518: bad fold text when a multi-byte char has a zero byte
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2758 #endif
b25895ab67be patch 8.0.0518: bad fold text when a multi-byte char has a zero byte
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2759 ScreenLines[off + col++] = fill_fold;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2760 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2761
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2762 if (text != buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2763 vim_free(text);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2764
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2765 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2766 * 6. set highlighting for the Visual area an other text.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2767 * If all folded lines are in the Visual area, highlight the line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2768 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2769 if (VIsual_active && wp->w_buffer == curwin->w_buffer)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2770 {
11121
778c10516955 patch 8.0.0448: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11105
diff changeset
2771 if (LTOREQ_POS(curwin->w_cursor, VIsual))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2772 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2773 /* Visual is after curwin->w_cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2774 top = &curwin->w_cursor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2775 bot = &VIsual;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2776 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2777 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2778 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2779 /* Visual is before curwin->w_cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2780 top = &VIsual;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2781 bot = &curwin->w_cursor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2782 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2783 if (lnum >= top->lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2784 && lnume <= bot->lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2785 && (VIsual_mode != 'v'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2786 || ((lnum > top->lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2787 || (lnum == top->lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2788 && top->col == 0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2789 && (lnume < bot->lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2790 || (lnume == bot->lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2791 && (bot->col - (*p_sel == 'e'))
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1869
diff changeset
2792 >= (colnr_T)STRLEN(ml_get_buf(wp->w_buffer, lnume, FALSE)))))))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2793 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2794 if (VIsual_mode == Ctrl_V)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2795 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2796 /* Visual block mode: highlight the chars part of the block */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2797 if (wp->w_old_cursor_fcol + txtcol < (colnr_T)W_WIDTH(wp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2798 {
3040
b6af1c5dd22f updated for version 7.3.292
Bram Moolenaar <bram@vim.org>
parents: 3004
diff changeset
2799 if (wp->w_old_cursor_lcol != MAXCOL
b6af1c5dd22f updated for version 7.3.292
Bram Moolenaar <bram@vim.org>
parents: 3004
diff changeset
2800 && wp->w_old_cursor_lcol + txtcol
b6af1c5dd22f updated for version 7.3.292
Bram Moolenaar <bram@vim.org>
parents: 3004
diff changeset
2801 < (colnr_T)W_WIDTH(wp))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2802 len = wp->w_old_cursor_lcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2803 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2804 len = W_WIDTH(wp) - txtcol;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2805 RL_MEMSET(wp->w_old_cursor_fcol + txtcol, HL_ATTR(HLF_V),
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 227
diff changeset
2806 len - (int)wp->w_old_cursor_fcol);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2807 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2808 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2809 else
216
da182deebec7 updated for version 7.0061
vimboss
parents: 205
diff changeset
2810 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2811 /* Set all attributes of the text */
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2812 RL_MEMSET(txtcol, HL_ATTR(HLF_V), W_WIDTH(wp) - txtcol);
216
da182deebec7 updated for version 7.0061
vimboss
parents: 205
diff changeset
2813 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2814 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2815 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2816
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
2817 #ifdef FEAT_SYN_HL
6685
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2818 /* Show colorcolumn in the fold line, but let cursorcolumn override it. */
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2819 if (wp->w_p_cc_cols)
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2820 {
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2821 int i = 0;
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2822 int j = wp->w_p_cc_cols[i];
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2823 int old_txtcol = txtcol;
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2824
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2825 while (j > -1)
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2826 {
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2827 txtcol += j;
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2828 if (wp->w_p_wrap)
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2829 txtcol -= wp->w_skipcol;
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2830 else
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2831 txtcol -= wp->w_leftcol;
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2832 if (txtcol >= 0 && txtcol < W_WIDTH(wp))
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2833 ScreenAttrs[off + txtcol] = hl_combine_attr(
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2834 ScreenAttrs[off + txtcol], HL_ATTR(HLF_MC));
6685
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2835 txtcol = old_txtcol;
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2836 j = wp->w_p_cc_cols[++i];
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2837 }
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2838 }
fd495ad521dc updated for version 7.4.667
Bram Moolenaar <bram@vim.org>
parents: 6681
diff changeset
2839
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
2840 /* Show 'cursorcolumn' in the fold line. */
1725
7c3302e07dd7 updated for version 7.2-023
vimboss
parents: 1685
diff changeset
2841 if (wp->w_p_cuc)
7c3302e07dd7 updated for version 7.2-023
vimboss
parents: 1685
diff changeset
2842 {
7c3302e07dd7 updated for version 7.2-023
vimboss
parents: 1685
diff changeset
2843 txtcol += wp->w_virtcol;
7c3302e07dd7 updated for version 7.2-023
vimboss
parents: 1685
diff changeset
2844 if (wp->w_p_wrap)
7c3302e07dd7 updated for version 7.2-023
vimboss
parents: 1685
diff changeset
2845 txtcol -= wp->w_skipcol;
7c3302e07dd7 updated for version 7.2-023
vimboss
parents: 1685
diff changeset
2846 else
7c3302e07dd7 updated for version 7.2-023
vimboss
parents: 1685
diff changeset
2847 txtcol -= wp->w_leftcol;
7c3302e07dd7 updated for version 7.2-023
vimboss
parents: 1685
diff changeset
2848 if (txtcol >= 0 && txtcol < W_WIDTH(wp))
7c3302e07dd7 updated for version 7.2-023
vimboss
parents: 1685
diff changeset
2849 ScreenAttrs[off + txtcol] = hl_combine_attr(
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
2850 ScreenAttrs[off + txtcol], HL_ATTR(HLF_CUC));
1725
7c3302e07dd7 updated for version 7.2-023
vimboss
parents: 1685
diff changeset
2851 }
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
2852 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2853
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2854 SCREEN_LINE(row + W_WINROW(wp), W_WINCOL(wp), (int)W_WIDTH(wp),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2855 (int)W_WIDTH(wp), FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2856
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2857 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2858 * Update w_cline_height and w_cline_folded if the cursor line was
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2859 * updated (saves a call to plines() later).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2860 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2861 if (wp == curwin
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2862 && lnum <= curwin->w_cursor.lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2863 && lnume >= curwin->w_cursor.lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2864 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2865 curwin->w_cline_row = row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2866 curwin->w_cline_height = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2867 curwin->w_cline_folded = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2868 curwin->w_valid |= (VALID_CHEIGHT|VALID_CROW);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2869 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2870 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2871
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2872 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2873 * Copy "buf[len]" to ScreenLines["off"] and set attributes to "attr".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2874 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2875 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2876 copy_text_attr(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2877 int off,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2878 char_u *buf,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2879 int len,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2880 int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2881 {
216
da182deebec7 updated for version 7.0061
vimboss
parents: 205
diff changeset
2882 int i;
da182deebec7 updated for version 7.0061
vimboss
parents: 205
diff changeset
2883
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2884 mch_memmove(ScreenLines + off, buf, (size_t)len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2885 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2886 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2887 vim_memset(ScreenLinesUC + off, 0, sizeof(u8char_T) * (size_t)len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2888 # endif
216
da182deebec7 updated for version 7.0061
vimboss
parents: 205
diff changeset
2889 for (i = 0; i < len; ++i)
da182deebec7 updated for version 7.0061
vimboss
parents: 205
diff changeset
2890 ScreenAttrs[off + i] = attr;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2891 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2892
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2893 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2894 * Fill the foldcolumn at "p" for window "wp".
548
f43150a669dc updated for version 7.0155
vimboss
parents: 540
diff changeset
2895 * Only to be called when 'foldcolumn' > 0.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2896 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2897 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2898 fill_foldcolumn(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2899 char_u *p,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2900 win_T *wp,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2901 int closed, /* TRUE of FALSE */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2902 linenr_T lnum) /* current line number */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2903 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2904 int i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2905 int level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2906 int first_level;
519
d50452846776 updated for version 7.0145
vimboss
parents: 507
diff changeset
2907 int empty;
6553
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2908 int fdc = compute_foldcolumn(wp, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2909
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2910 /* Init to all spaces. */
6929
e55929fca0cf patch 7.4.783
Bram Moolenaar <bram@vim.org>
parents: 6834
diff changeset
2911 vim_memset(p, ' ', (size_t)fdc);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2912
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2913 level = win_foldinfo.fi_level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2914 if (level > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2915 {
519
d50452846776 updated for version 7.0145
vimboss
parents: 507
diff changeset
2916 /* If there is only one column put more info in it. */
6553
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2917 empty = (fdc == 1) ? 0 : 1;
519
d50452846776 updated for version 7.0145
vimboss
parents: 507
diff changeset
2918
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2919 /* If the column is too narrow, we start at the lowest level that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2920 * fits and use numbers to indicated the depth. */
6553
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2921 first_level = level - fdc - closed + 1 + empty;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2922 if (first_level < 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2923 first_level = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2924
6553
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2925 for (i = 0; i + empty < fdc; ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2926 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2927 if (win_foldinfo.fi_lnum == lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2928 && first_level + i >= win_foldinfo.fi_low_level)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2929 p[i] = '-';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2930 else if (first_level == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2931 p[i] = '|';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2932 else if (first_level + i <= 9)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2933 p[i] = '0' + first_level + i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2934 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2935 p[i] = '>';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2936 if (first_level + i == level)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2937 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2938 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2939 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2940 if (closed)
6553
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
2941 p[i >= fdc ? i - 1 : i] = '+';
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2942 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2943 #endif /* FEAT_FOLDING */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2944
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2945 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2946 * Display line "lnum" of window 'wp' on the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2947 * Start at row "startrow", stop when "endrow" is reached.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2948 * wp->w_virtcol needs to be valid.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2949 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2950 * Return the number of last row the line occupies.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2951 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2952 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2953 win_line(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2954 win_T *wp,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2955 linenr_T lnum,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2956 int startrow,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2957 int endrow,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2958 int nochange UNUSED) /* not updating for changed text */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2959 {
10801
e7b8be5ecacd patch 8.0.0290: cursor positioning wrong if wide character wraps
Christian Brabandt <cb@256bit.org>
parents: 10793
diff changeset
2960 int col = 0; /* visual column on screen */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2961 unsigned off; /* offset in ScreenLines/ScreenAttrs */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2962 int c = 0; /* init for GCC */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2963 long vcol = 0; /* virtual column (for tabs) */
6503
134a7d55f9fa updated for version 7.4.579
Bram Moolenaar <bram@vim.org>
parents: 6477
diff changeset
2964 #ifdef FEAT_LINEBREAK
134a7d55f9fa updated for version 7.4.579
Bram Moolenaar <bram@vim.org>
parents: 6477
diff changeset
2965 long vcol_sbr = -1; /* virtual column after showbreak */
134a7d55f9fa updated for version 7.4.579
Bram Moolenaar <bram@vim.org>
parents: 6477
diff changeset
2966 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2967 long vcol_prev = -1; /* "vcol" of previous character */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2968 char_u *line; /* current line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2969 char_u *ptr; /* current position in "line" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2970 int row; /* row in the window, excl w_winrow */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2971 int screen_row; /* row on the screen, incl w_winrow */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2972
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2973 char_u extra[18]; /* "%ld" and 'fdc' must fit in here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2974 int n_extra = 0; /* number of extra chars */
1340
8e42199f5121 updated for version 7.1-054
vimboss
parents: 1331
diff changeset
2975 char_u *p_extra = NULL; /* string of extra chars, plus NUL */
6026
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
2976 char_u *p_extra_free = NULL; /* p_extra needs to be freed */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2977 int c_extra = NUL; /* extra chars, all the same */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2978 int extra_attr = 0; /* attributes when n_extra != 0 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2979 static char_u *at_end_str = (char_u *)""; /* used for p_extra when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2980 displaying lcs_eol at end-of-line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2981 int lcs_eol_one = lcs_eol; /* lcs_eol until it's been used */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2982 int lcs_prec_todo = lcs_prec; /* lcs_prec until it's been used */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2983
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2984 /* saved "extra" items for when draw_state becomes WL_LINE (again) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2985 int saved_n_extra = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2986 char_u *saved_p_extra = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2987 int saved_c_extra = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2988 int saved_char_attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2989
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2990 int n_attr = 0; /* chars with special attr */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2991 int saved_attr2 = 0; /* char_attr saved for n_attr */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2992 int n_attr3 = 0; /* chars with overruling special attr */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2993 int saved_attr3 = 0; /* char_attr saved for n_attr3 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2994
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2995 int n_skip = 0; /* nr of chars to skip for 'nowrap' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2996
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2997 int fromcol, tocol; /* start/end of inverting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2998 int fromcol_prev = -2; /* start of inverting after cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2999 int noinvcur = FALSE; /* don't invert the cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3000 pos_T *top, *bot;
1813
b5ad00887b81 updated for version 7.2-111
vimboss
parents: 1725
diff changeset
3001 int lnum_in_visual_area = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3002 pos_T pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3003 long v;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3004
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3005 int char_attr = 0; /* attributes for next character */
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
3006 int attr_pri = FALSE; /* char_attr has priority */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3007 int area_highlighting = FALSE; /* Visual or incsearch highlighting
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3008 in this line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3009 int attr = 0; /* attributes for area highlighting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3010 int area_attr = 0; /* attributes desired by highlighting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3011 int search_attr = 0; /* attributes desired by 'hlsearch' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3012 #ifdef FEAT_SYN_HL
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3013 int vcol_save_attr = 0; /* saved attr for 'cursorcolumn' */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3014 int syntax_attr = 0; /* attributes desired by syntax */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3015 int has_syntax = FALSE; /* this buffer has syntax highl. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3016 int save_did_emsg;
1437
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
3017 int eol_hl_off = 0; /* 1 if highlighted char after EOL */
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
3018 int draw_color_col = FALSE; /* highlight colorcolumn */
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
3019 int *color_cols = NULL; /* pointer to according columns array */
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3020 #endif
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3021 #ifdef FEAT_SPELL
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
3022 int has_spell = FALSE; /* this buffer has spell checking */
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3023 # define SPWORDLEN 150
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3024 char_u nextline[SPWORDLEN * 2];/* text with start of the next line */
353
3161473d6462 updated for version 7.0091
vimboss
parents: 348
diff changeset
3025 int nextlinecol = 0; /* column where nextline[] starts */
3161473d6462 updated for version 7.0091
vimboss
parents: 348
diff changeset
3026 int nextline_idx = 0; /* index in nextline[] where next line
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3027 starts */
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
3028 int spell_attr = 0; /* attributes desired by spelling */
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
3029 int word_end = 0; /* last byte with same spell_attr */
378
6b49757d378c updated for version 7.0098
vimboss
parents: 356
diff changeset
3030 static linenr_T checked_lnum = 0; /* line number for "checked_col" */
6b49757d378c updated for version 7.0098
vimboss
parents: 356
diff changeset
3031 static int checked_col = 0; /* column in "checked_lnum" up to which
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3032 * there are no spell errors */
386
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
3033 static int cap_col = -1; /* column to check for Cap word */
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
3034 static linenr_T capcol_lnum = 0; /* line number where "cap_col" used */
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3035 int cur_checked_col = 0; /* checked column for current line */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3036 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3037 int extra_check; /* has syntax or linebreak */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3038 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3039 int multi_attr = 0; /* attributes desired by multibyte */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3040 int mb_l = 1; /* multi-byte byte length */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3041 int mb_c = 0; /* decoded multi-byte character */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3042 int mb_utf8 = FALSE; /* screen char is UTF-8 char */
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
3043 int u8cc[MAX_MCO]; /* composing UTF-8 chars */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3044 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3045 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3046 int filler_lines; /* nr of filler lines to be drawn */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3047 int filler_todo; /* nr of filler lines still to do + 1 */
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
3048 hlf_T diff_hlf = (hlf_T)0; /* type of diff highlighting */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3049 int change_start = MAXCOL; /* first col of changed area */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3050 int change_end = -1; /* last col of changed area */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3051 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3052 colnr_T trailcol = MAXCOL; /* start of trailing spaces */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3053 #ifdef FEAT_LINEBREAK
10392
957a1d560bda commit https://github.com/vim/vim/commit/6c896867c4f5d759616028ef7cbfce2a9ed32600
Christian Brabandt <cb@256bit.org>
parents: 10349
diff changeset
3054 int need_showbreak = FALSE; /* overlong line, skipping first x
957a1d560bda commit https://github.com/vim/vim/commit/6c896867c4f5d759616028ef7cbfce2a9ed32600
Christian Brabandt <cb@256bit.org>
parents: 10349
diff changeset
3055 chars */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3056 #endif
910
abff2f6a3ad7 updated for version 7.0-036
vimboss
parents: 867
diff changeset
3057 #if defined(FEAT_SIGNS) || (defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS)) \
abff2f6a3ad7 updated for version 7.0-036
vimboss
parents: 867
diff changeset
3058 || defined(FEAT_SYN_HL) || defined(FEAT_DIFF)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3059 # define LINE_ATTR
1536
24b7b3cc4eec updated for version 7.1-251
vimboss
parents: 1521
diff changeset
3060 int line_attr = 0; /* attribute for the whole line */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3061 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3062 #ifdef FEAT_SEARCH_EXTRA
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3063 matchitem_T *cur; /* points to the match list */
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3064 match_T *shl; /* points to search_hl or a match */
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3065 int shl_flag; /* flag to indicate whether search_hl
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3066 has been processed or not */
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3067 int pos_inprogress; /* marks that position match search is
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3068 in progress */
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3069 int prevcol_hl_flag; /* flag to indicate whether prevcol
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3070 equals startcol of search_hl or one
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3071 of the matches */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3072 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3073 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3074 int prev_c = 0; /* previous Arabic character */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3075 int prev_c1 = 0; /* first composing char for prev_c */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3076 #endif
910
abff2f6a3ad7 updated for version 7.0-036
vimboss
parents: 867
diff changeset
3077 #if defined(LINE_ATTR)
867
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
3078 int did_line_attr = 0;
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
3079 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3080
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3081 /* draw_state: items that are drawn in sequence: */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3082 #define WL_START 0 /* nothing done yet */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3083 #ifdef FEAT_CMDWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3084 # define WL_CMDLINE WL_START + 1 /* cmdline window column */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3085 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3086 # define WL_CMDLINE WL_START
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3087 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3088 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3089 # define WL_FOLD WL_CMDLINE + 1 /* 'foldcolumn' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3090 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3091 # define WL_FOLD WL_CMDLINE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3092 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3093 #ifdef FEAT_SIGNS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3094 # define WL_SIGN WL_FOLD + 1 /* column for signs */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3095 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3096 # define WL_SIGN WL_FOLD /* column for signs */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3097 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3098 #define WL_NR WL_SIGN + 1 /* line number */
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3099 #ifdef FEAT_LINEBREAK
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3100 # define WL_BRI WL_NR + 1 /* 'breakindent' */
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3101 #else
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3102 # define WL_BRI WL_NR
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3103 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3104 #if defined(FEAT_LINEBREAK) || defined(FEAT_DIFF)
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3105 # define WL_SBR WL_BRI + 1 /* 'showbreak' or 'diff' */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3106 #else
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3107 # define WL_SBR WL_BRI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3108 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3109 #define WL_LINE WL_SBR + 1 /* text in the line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3110 int draw_state = WL_START; /* what to draw next */
574
25a70b1cd2da updated for version 7.0163
vimboss
parents: 571
diff changeset
3111 #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3112 int feedback_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3113 int feedback_old_attr = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3114 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3115
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
3116 #ifdef FEAT_CONCEAL
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
3117 int syntax_flags = 0;
2392
0371401d9d33 Give each syntax item a sequence number, so that we know when it starts and
Bram Moolenaar <bram@vim.org>
parents: 2382
diff changeset
3118 int syntax_seqnr = 0;
2375
a96dd77ce213 For conceal mode: when two different syntax items follow each other, show the
Bram Moolenaar <bram@vim.org>
parents: 2364
diff changeset
3119 int prev_syntax_id = 0;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3120 int conceal_attr = HL_ATTR(HLF_CONCEAL);
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
3121 int is_concealing = FALSE;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
3122 int boguscols = 0; /* nonexistent columns added to force
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
3123 wrapping */
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2400
diff changeset
3124 int vcol_off = 0; /* offset for concealed characters */
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
3125 int did_wcol = FALSE;
8907
5deb9e8f4292 commit https://github.com/vim/vim/commit/4d585022023b96f6507e8cae5ed8fc8d926f5140
Christian Brabandt <cb@256bit.org>
parents: 8872
diff changeset
3126 int match_conc = 0; /* cchar for match functions */
5deb9e8f4292 commit https://github.com/vim/vim/commit/4d585022023b96f6507e8cae5ed8fc8d926f5140
Christian Brabandt <cb@256bit.org>
parents: 8872
diff changeset
3127 int has_match_conc = 0; /* match wants to conceal */
6520
70793fedd25a updated for version 7.4.587
Bram Moolenaar <bram@vim.org>
parents: 6503
diff changeset
3128 int old_boguscols = 0;
2332
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
3129 # define VCOL_HLC (vcol - vcol_off)
5174
42d592dbbec3 updated for version 7.4a.013
Bram Moolenaar <bram@vim.org>
parents: 5126
diff changeset
3130 # define FIX_FOR_BOGUSCOLS \
42d592dbbec3 updated for version 7.4a.013
Bram Moolenaar <bram@vim.org>
parents: 5126
diff changeset
3131 { \
42d592dbbec3 updated for version 7.4a.013
Bram Moolenaar <bram@vim.org>
parents: 5126
diff changeset
3132 n_extra += vcol_off; \
42d592dbbec3 updated for version 7.4a.013
Bram Moolenaar <bram@vim.org>
parents: 5126
diff changeset
3133 vcol -= vcol_off; \
42d592dbbec3 updated for version 7.4a.013
Bram Moolenaar <bram@vim.org>
parents: 5126
diff changeset
3134 vcol_off = 0; \
42d592dbbec3 updated for version 7.4a.013
Bram Moolenaar <bram@vim.org>
parents: 5126
diff changeset
3135 col -= boguscols; \
6520
70793fedd25a updated for version 7.4.587
Bram Moolenaar <bram@vim.org>
parents: 6503
diff changeset
3136 old_boguscols = boguscols; \
5174
42d592dbbec3 updated for version 7.4a.013
Bram Moolenaar <bram@vim.org>
parents: 5126
diff changeset
3137 boguscols = 0; \
42d592dbbec3 updated for version 7.4a.013
Bram Moolenaar <bram@vim.org>
parents: 5126
diff changeset
3138 }
2332
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
3139 #else
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
3140 # define VCOL_HLC (vcol)
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
3141 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3142
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3143 if (startrow > endrow) /* past the end already! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3144 return startrow;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3145
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3146 row = startrow;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3147 screen_row = row + W_WINROW(wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3148
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3149 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3150 * To speed up the loop below, set extra_check when there is linebreak,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3151 * trailing white space and/or syntax processing to be done.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3152 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3153 #ifdef FEAT_LINEBREAK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3154 extra_check = wp->w_p_lbr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3155 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3156 extra_check = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3157 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3158 #ifdef FEAT_SYN_HL
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
3159 if (syntax_present(wp) && !wp->w_s->b_syn_error)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3160 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3161 /* Prepare for syntax highlighting in this line. When there is an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3162 * error, stop syntax highlighting. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3163 save_did_emsg = did_emsg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3164 did_emsg = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3165 syntax_start(wp, lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3166 if (did_emsg)
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
3167 wp->w_s->b_syn_error = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3168 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3169 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3170 did_emsg = save_did_emsg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3171 has_syntax = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3172 extra_check = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3173 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3174 }
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
3175
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
3176 /* Check for columns to display for 'colorcolumn'. */
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
3177 color_cols = wp->w_p_cc_cols;
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
3178 if (color_cols != NULL)
2332
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
3179 draw_color_col = advance_color_col(VCOL_HLC, &color_cols);
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3180 #endif
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3181
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3182 #ifdef FEAT_SPELL
258
f93df7322443 updated for version 7.0070
vimboss
parents: 236
diff changeset
3183 if (wp->w_p_spell
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
3184 && *wp->w_s->b_p_spl != NUL
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
3185 && wp->w_s->b_langp.ga_len > 0
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
3186 && *(char **)(wp->w_s->b_langp.ga_data) != NULL)
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
3187 {
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
3188 /* Prepare for spell checking. */
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
3189 has_spell = TRUE;
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
3190 extra_check = TRUE;
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3191
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3192 /* Get the start of the next line, so that words that wrap to the next
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3193 * line are found too: "et<line-break>al.".
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3194 * Trick: skip a few chars for C/shell/Vim comments */
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3195 nextline[SPWORDLEN] = NUL;
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3196 if (lnum < wp->w_buffer->b_ml.ml_line_count)
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3197 {
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3198 line = ml_get_buf(wp->w_buffer, lnum + 1, FALSE);
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3199 spell_cat_line(nextline + SPWORDLEN, line, SPWORDLEN);
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3200 }
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3201
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3202 /* When a word wrapped from the previous line the start of the current
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3203 * line is valid. */
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3204 if (lnum == checked_lnum)
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3205 cur_checked_col = checked_col;
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3206 checked_lnum = 0;
386
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
3207
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
3208 /* When there was a sentence end in the previous line may require a
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
3209 * word starting with capital in this line. In line 1 always check
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
3210 * the first word. */
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
3211 if (lnum != capcol_lnum)
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
3212 cap_col = -1;
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
3213 if (lnum == 1)
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
3214 cap_col = 0;
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
3215 capcol_lnum = 0;
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
3216 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3217 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3218
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3219 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3220 * handle visual active in this window
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3221 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3222 fromcol = -10;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3223 tocol = MAXCOL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3224 if (VIsual_active && wp->w_buffer == curwin->w_buffer)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3225 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3226 /* Visual is after curwin->w_cursor */
11121
778c10516955 patch 8.0.0448: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11105
diff changeset
3227 if (LTOREQ_POS(curwin->w_cursor, VIsual))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3228 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3229 top = &curwin->w_cursor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3230 bot = &VIsual;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3231 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3232 else /* Visual is before curwin->w_cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3233 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3234 top = &VIsual;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3235 bot = &curwin->w_cursor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3236 }
1813
b5ad00887b81 updated for version 7.2-111
vimboss
parents: 1725
diff changeset
3237 lnum_in_visual_area = (lnum >= top->lnum && lnum <= bot->lnum);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3238 if (VIsual_mode == Ctrl_V) /* block mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3239 {
1813
b5ad00887b81 updated for version 7.2-111
vimboss
parents: 1725
diff changeset
3240 if (lnum_in_visual_area)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3241 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3242 fromcol = wp->w_old_cursor_fcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3243 tocol = wp->w_old_cursor_lcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3244 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3245 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3246 else /* non-block mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3247 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3248 if (lnum > top->lnum && lnum <= bot->lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3249 fromcol = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3250 else if (lnum == top->lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3251 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3252 if (VIsual_mode == 'V') /* linewise */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3253 fromcol = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3254 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3255 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3256 getvvcol(wp, top, (colnr_T *)&fromcol, NULL, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3257 if (gchar_pos(top) == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3258 tocol = fromcol + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3259 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3260 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3261 if (VIsual_mode != 'V' && lnum == bot->lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3262 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3263 if (*p_sel == 'e' && bot->col == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3264 #ifdef FEAT_VIRTUALEDIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3265 && bot->coladd == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3266 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3267 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3268 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3269 fromcol = -10;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3270 tocol = MAXCOL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3271 }
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
3272 else if (bot->col == MAXCOL)
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
3273 tocol = MAXCOL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3274 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3275 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3276 pos = *bot;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3277 if (*p_sel == 'e')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3278 getvvcol(wp, &pos, (colnr_T *)&tocol, NULL, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3279 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3280 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3281 getvvcol(wp, &pos, NULL, NULL, (colnr_T *)&tocol);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3282 ++tocol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3283 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3284 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3285 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3286 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3287
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3288 /* Check if the character under the cursor should not be inverted */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3289 if (!highlight_match && lnum == curwin->w_cursor.lnum && wp == curwin
8212
05b88224cea1 commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents: 7833
diff changeset
3290 #ifdef FEAT_GUI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3291 && !gui.in_use
8212
05b88224cea1 commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents: 7833
diff changeset
3292 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3293 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3294 noinvcur = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3295
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3296 /* if inverting in this line set area_highlighting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3297 if (fromcol >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3298 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3299 area_highlighting = TRUE;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3300 attr = HL_ATTR(HLF_V);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3301 #if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
3674
b9aa7fb4a928 updated for version 7.3.597
Bram Moolenaar <bram@vim.org>
parents: 3586
diff changeset
3302 if ((clip_star.available && !clip_star.owned
b9aa7fb4a928 updated for version 7.3.597
Bram Moolenaar <bram@vim.org>
parents: 3586
diff changeset
3303 && clip_isautosel_star())
b9aa7fb4a928 updated for version 7.3.597
Bram Moolenaar <bram@vim.org>
parents: 3586
diff changeset
3304 || (clip_plus.available && !clip_plus.owned
b9aa7fb4a928 updated for version 7.3.597
Bram Moolenaar <bram@vim.org>
parents: 3586
diff changeset
3305 && clip_isautosel_plus()))
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3306 attr = HL_ATTR(HLF_VNC);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3307 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3308 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3309 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3310
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3311 /*
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
3312 * handle 'incsearch' and ":s///c" highlighting
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3313 */
5735
50dbef5e774a updated for version 7.4.212
Bram Moolenaar <bram@vim.org>
parents: 5539
diff changeset
3314 else if (highlight_match
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3315 && wp == curwin
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3316 && lnum >= curwin->w_cursor.lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3317 && lnum <= curwin->w_cursor.lnum + search_match_lines)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3318 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3319 if (lnum == curwin->w_cursor.lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3320 getvcol(curwin, &(curwin->w_cursor),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3321 (colnr_T *)&fromcol, NULL, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3322 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3323 fromcol = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3324 if (lnum == curwin->w_cursor.lnum + search_match_lines)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3325 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3326 pos.lnum = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3327 pos.col = search_match_endcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3328 getvcol(curwin, &pos, (colnr_T *)&tocol, NULL, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3329 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3330 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3331 tocol = MAXCOL;
1850
eaecfa88c246 updated for version 7.2-148
vimboss
parents: 1849
diff changeset
3332 /* do at least one character; happens when past end of line */
eaecfa88c246 updated for version 7.2-148
vimboss
parents: 1849
diff changeset
3333 if (fromcol == tocol)
eaecfa88c246 updated for version 7.2-148
vimboss
parents: 1849
diff changeset
3334 tocol = fromcol + 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3335 area_highlighting = TRUE;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3336 attr = HL_ATTR(HLF_I);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3337 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3338
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3339 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3340 filler_lines = diff_check(wp, lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3341 if (filler_lines < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3342 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3343 if (filler_lines == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3344 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3345 if (diff_find_change(wp, lnum, &change_start, &change_end))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3346 diff_hlf = HLF_ADD; /* added line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3347 else if (change_start == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3348 diff_hlf = HLF_TXD; /* changed text */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3349 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3350 diff_hlf = HLF_CHD; /* changed line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3351 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3352 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3353 diff_hlf = HLF_ADD; /* added line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3354 filler_lines = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3355 area_highlighting = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3356 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3357 if (lnum == wp->w_topline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3358 filler_lines = wp->w_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3359 filler_todo = filler_lines;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3360 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3361
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3362 #ifdef LINE_ATTR
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3363 # ifdef FEAT_SIGNS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3364 /* If this line has a sign with line highlighting set line_attr. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3365 v = buf_getsigntype(wp->w_buffer, lnum, SIGN_LINEHL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3366 if (v != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3367 line_attr = sign_get_attr((int)v, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3368 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3369 # if defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3370 /* Highlight the current line in the quickfix window. */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 642
diff changeset
3371 if (bt_quickfix(wp->w_buffer) && qf_current_entry(wp) == lnum)
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3372 line_attr = HL_ATTR(HLF_L);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3373 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3374 if (line_attr != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3375 area_highlighting = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3376 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3377
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3378 line = ml_get_buf(wp->w_buffer, lnum, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3379 ptr = line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3380
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3381 #ifdef FEAT_SPELL
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3382 if (has_spell)
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3383 {
386
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
3384 /* For checking first word with a capital skip white space. */
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
3385 if (cap_col == 0)
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 834
diff changeset
3386 cap_col = (int)(skipwhite(line) - line);
386
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
3387
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3388 /* To be able to spell-check over line boundaries copy the end of the
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3389 * current line into nextline[]. Above the start of the next line was
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3390 * copied to nextline[SPWORDLEN]. */
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3391 if (nextline[SPWORDLEN] == NUL)
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3392 {
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3393 /* No next line or it is empty. */
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3394 nextlinecol = MAXCOL;
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3395 nextline_idx = 0;
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3396 }
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3397 else
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3398 {
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 834
diff changeset
3399 v = (long)STRLEN(line);
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3400 if (v < SPWORDLEN)
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3401 {
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3402 /* Short line, use it completely and append the start of the
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3403 * next line. */
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3404 nextlinecol = 0;
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3405 mch_memmove(nextline, line, (size_t)v);
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1616
diff changeset
3406 STRMOVE(nextline + v, nextline + SPWORDLEN);
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3407 nextline_idx = v + 1;
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3408 }
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3409 else
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3410 {
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3411 /* Long line, use only the last SPWORDLEN bytes. */
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3412 nextlinecol = v - SPWORDLEN;
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3413 mch_memmove(nextline, line + nextlinecol, SPWORDLEN);
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3414 nextline_idx = SPWORDLEN + 1;
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3415 }
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3416 }
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3417 }
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3418 #endif
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
3419
7344
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
3420 if (wp->w_p_list)
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
3421 {
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
3422 if (lcs_space || lcs_trail)
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
3423 extra_check = TRUE;
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
3424 /* find start of trailing whitespace */
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
3425 if (lcs_trail)
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
3426 {
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
3427 trailcol = (colnr_T)STRLEN(ptr);
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
3428 while (trailcol > (colnr_T)0 && VIM_ISWHITE(ptr[trailcol - 1]))
7344
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
3429 --trailcol;
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
3430 trailcol += (colnr_T) (ptr - line);
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
3431 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3432 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3433
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3434 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3435 * 'nowrap' or 'wrap' and a single line that doesn't fit: Advance to the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3436 * first character to be displayed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3437 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3438 if (wp->w_p_wrap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3439 v = wp->w_skipcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3440 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3441 v = wp->w_leftcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3442 if (v > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3443 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3444 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3445 char_u *prev_ptr = ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3446 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3447 while (vcol < v && *ptr != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3448 {
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3449 c = win_lbr_chartabsize(wp, line, ptr, (colnr_T)vcol, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3450 vcol += c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3451 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3452 prev_ptr = ptr;
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 36
diff changeset
3453 #endif
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11121
diff changeset
3454 MB_PTR_ADV(ptr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3455 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3456
1984
b57babddb32b updated for version 7.2-281
vimboss
parents: 1983
diff changeset
3457 /* When:
b57babddb32b updated for version 7.2-281
vimboss
parents: 1983
diff changeset
3458 * - 'cuc' is set, or
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
3459 * - 'colorcolumn' is set, or
1984
b57babddb32b updated for version 7.2-281
vimboss
parents: 1983
diff changeset
3460 * - 'virtualedit' is set, or
b57babddb32b updated for version 7.2-281
vimboss
parents: 1983
diff changeset
3461 * - the visual mode is active,
b57babddb32b updated for version 7.2-281
vimboss
parents: 1983
diff changeset
3462 * the end of the line may be before the start of the displayed part.
b57babddb32b updated for version 7.2-281
vimboss
parents: 1983
diff changeset
3463 */
b57babddb32b updated for version 7.2-281
vimboss
parents: 1983
diff changeset
3464 if (vcol < v && (
5735
50dbef5e774a updated for version 7.4.212
Bram Moolenaar <bram@vim.org>
parents: 5539
diff changeset
3465 #ifdef FEAT_SYN_HL
50dbef5e774a updated for version 7.4.212
Bram Moolenaar <bram@vim.org>
parents: 5539
diff changeset
3466 wp->w_p_cuc || draw_color_col ||
50dbef5e774a updated for version 7.4.212
Bram Moolenaar <bram@vim.org>
parents: 5539
diff changeset
3467 #endif
50dbef5e774a updated for version 7.4.212
Bram Moolenaar <bram@vim.org>
parents: 5539
diff changeset
3468 #ifdef FEAT_VIRTUALEDIT
50dbef5e774a updated for version 7.4.212
Bram Moolenaar <bram@vim.org>
parents: 5539
diff changeset
3469 virtual_active() ||
50dbef5e774a updated for version 7.4.212
Bram Moolenaar <bram@vim.org>
parents: 5539
diff changeset
3470 #endif
50dbef5e774a updated for version 7.4.212
Bram Moolenaar <bram@vim.org>
parents: 5539
diff changeset
3471 (VIsual_active && wp->w_buffer == curwin->w_buffer)))
1984
b57babddb32b updated for version 7.2-281
vimboss
parents: 1983
diff changeset
3472 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3473 vcol = v;
1984
b57babddb32b updated for version 7.2-281
vimboss
parents: 1983
diff changeset
3474 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3475
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3476 /* Handle a character that's not completely on the screen: Put ptr at
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3477 * that character but skip the first few screen characters. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3478 if (vcol > v)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3479 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3480 vcol -= c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3481 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3482 ptr = prev_ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3483 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3484 --ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3485 #endif
11010
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10988
diff changeset
3486 /* If the character fits on the screen, don't need to skip it.
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10988
diff changeset
3487 * Except for a TAB. */
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10988
diff changeset
3488 if ((
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10988
diff changeset
3489 #ifdef FEAT_MBYTE
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10988
diff changeset
3490 (*mb_ptr2cells)(ptr) >= c ||
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10988
diff changeset
3491 #endif
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10988
diff changeset
3492 *ptr == TAB) && col == 0)
10801
e7b8be5ecacd patch 8.0.0290: cursor positioning wrong if wide character wraps
Christian Brabandt <cb@256bit.org>
parents: 10793
diff changeset
3493 n_skip = v - vcol;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3494 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3495
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3496 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3497 * Adjust for when the inverted text is before the screen,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3498 * and when the start of the inverted text is before the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3499 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3500 if (tocol <= vcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3501 fromcol = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3502 else if (fromcol >= 0 && fromcol < vcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3503 fromcol = vcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3504
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3505 #ifdef FEAT_LINEBREAK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3506 /* When w_skipcol is non-zero, first line needs 'showbreak' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3507 if (wp->w_p_wrap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3508 need_showbreak = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3509 #endif
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3510 #ifdef FEAT_SPELL
499
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3511 /* When spell checking a word we need to figure out the start of the
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3512 * word and if it's badly spelled or not. */
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3513 if (has_spell)
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3514 {
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3515 int len;
1536
24b7b3cc4eec updated for version 7.1-251
vimboss
parents: 1521
diff changeset
3516 colnr_T linecol = (colnr_T)(ptr - line);
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
3517 hlf_T spell_hlf = HLF_COUNT;
499
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3518
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3519 pos = wp->w_cursor;
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3520 wp->w_cursor.lnum = lnum;
1536
24b7b3cc4eec updated for version 7.1-251
vimboss
parents: 1521
diff changeset
3521 wp->w_cursor.col = linecol;
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
3522 len = spell_move_to(wp, FORWARD, TRUE, TRUE, &spell_hlf);
1536
24b7b3cc4eec updated for version 7.1-251
vimboss
parents: 1521
diff changeset
3523
24b7b3cc4eec updated for version 7.1-251
vimboss
parents: 1521
diff changeset
3524 /* spell_move_to() may call ml_get() and make "line" invalid */
24b7b3cc4eec updated for version 7.1-251
vimboss
parents: 1521
diff changeset
3525 line = ml_get_buf(wp->w_buffer, lnum, FALSE);
24b7b3cc4eec updated for version 7.1-251
vimboss
parents: 1521
diff changeset
3526 ptr = line + linecol;
24b7b3cc4eec updated for version 7.1-251
vimboss
parents: 1521
diff changeset
3527
530
339999b511a0 updated for version 7.0148
vimboss
parents: 519
diff changeset
3528 if (len == 0 || (int)wp->w_cursor.col > ptr - line)
499
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3529 {
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3530 /* no bad word found at line start, don't check until end of a
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3531 * word */
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
3532 spell_hlf = HLF_COUNT;
3572
0a364618c0e5 updated for version 7.3.546
Bram Moolenaar <bram@vim.org>
parents: 3549
diff changeset
3533 word_end = (int)(spell_to_word_end(ptr, wp) - line + 1);
499
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3534 }
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3535 else
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
3536 {
499
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3537 /* bad word found, use attributes until end of word */
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3538 word_end = wp->w_cursor.col + len + 1;
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3539
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
3540 /* Turn index into actual attributes. */
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
3541 if (spell_hlf != HLF_COUNT)
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
3542 spell_attr = highlight_attr[spell_hlf];
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
3543 }
499
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3544 wp->w_cursor = pos;
501
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 499
diff changeset
3545
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3546 # ifdef FEAT_SYN_HL
501
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 499
diff changeset
3547 /* Need to restart syntax highlighting for this line. */
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 499
diff changeset
3548 if (has_syntax)
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 499
diff changeset
3549 syntax_start(wp, lnum);
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3550 # endif
499
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3551 }
08012a1ff8d4 updated for version 7.0137
vimboss
parents: 482
diff changeset
3552 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3553 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3554
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3555 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3556 * Correct highlighting for cursor that can't be disabled.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3557 * Avoids having to check this for each character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3558 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3559 if (fromcol >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3560 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3561 if (noinvcur)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3562 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3563 if ((colnr_T)fromcol == wp->w_virtcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3564 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3565 /* highlighting starts at cursor, let it start just after the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3566 * cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3567 fromcol_prev = fromcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3568 fromcol = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3569 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3570 else if ((colnr_T)fromcol < wp->w_virtcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3571 /* restart highlighting after the cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3572 fromcol_prev = wp->w_virtcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3573 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3574 if (fromcol >= tocol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3575 fromcol = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3576 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3577
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3578 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3579 /*
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3580 * Handle highlighting the last used search pattern and matches.
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3581 * Do this for both search_hl and the match list.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3582 */
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3583 cur = wp->w_match_head;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3584 shl_flag = FALSE;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3585 while (cur != NULL || shl_flag == FALSE)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3586 {
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3587 if (shl_flag == FALSE)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3588 {
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3589 shl = &search_hl;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3590 shl_flag = TRUE;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3591 }
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3592 else
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3593 shl = &cur->hl;
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
3594 shl->startcol = MAXCOL;
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
3595 shl->endcol = MAXCOL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3596 shl->attr_cur = 0;
9885
4e8b05fa12c6 commit https://github.com/vim/vim/commit/4f416e41243ca151b95d39d81ce23d00b1484755
Christian Brabandt <cb@256bit.org>
parents: 9877
diff changeset
3597 shl->is_addpos = FALSE;
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3598 v = (long)(ptr - line);
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3599 if (cur != NULL)
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3600 cur->pos.cur = 0;
9992
3e3b0ce24b61 commit https://github.com/vim/vim/commit/e17bdffff78ebd6a4e3cff26754cc667557ea810
Christian Brabandt <cb@256bit.org>
parents: 9939
diff changeset
3601 next_search_hl(wp, shl, lnum, (colnr_T)v,
3e3b0ce24b61 commit https://github.com/vim/vim/commit/e17bdffff78ebd6a4e3cff26754cc667557ea810
Christian Brabandt <cb@256bit.org>
parents: 9939
diff changeset
3602 shl == &search_hl ? NULL : cur);
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3603
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3604 /* Need to get the line again, a multi-line regexp may have made it
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3605 * invalid. */
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3606 line = ml_get_buf(wp->w_buffer, lnum, FALSE);
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3607 ptr = line + v;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3608
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3609 if (shl->lnum != 0 && shl->lnum <= lnum)
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3610 {
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3611 if (shl->lnum == lnum)
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3612 shl->startcol = shl->rm.startpos[0].col;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3613 else
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3614 shl->startcol = 0;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3615 if (lnum == shl->lnum + shl->rm.endpos[0].lnum
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3616 - shl->rm.startpos[0].lnum)
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3617 shl->endcol = shl->rm.endpos[0].col;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3618 else
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3619 shl->endcol = MAXCOL;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3620 /* Highlight one character for an empty match. */
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3621 if (shl->startcol == shl->endcol)
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3622 {
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3623 #ifdef FEAT_MBYTE
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3624 if (has_mbyte && line[shl->endcol] != NUL)
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3625 shl->endcol += (*mb_ptr2len)(line + shl->endcol);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3626 else
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3627 #endif
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3628 ++shl->endcol;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3629 }
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3630 if ((long)shl->startcol < v) /* match at leftcol */
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3631 {
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3632 shl->attr_cur = shl->attr;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3633 search_attr = shl->attr;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3634 }
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3635 area_highlighting = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3636 }
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3637 if (shl != &search_hl && cur != NULL)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3638 cur = cur->next;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3639 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3640 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3641
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3642 #ifdef FEAT_SYN_HL
5068
6a7ae677d6a1 updated for version 7.3.1277
Bram Moolenaar <bram@vim.org>
parents: 4916
diff changeset
3643 /* Cursor line highlighting for 'cursorline' in the current window. Not
6a7ae677d6a1 updated for version 7.3.1277
Bram Moolenaar <bram@vim.org>
parents: 4916
diff changeset
3644 * when Visual mode is active, because it's not clear what is selected
6a7ae677d6a1 updated for version 7.3.1277
Bram Moolenaar <bram@vim.org>
parents: 4916
diff changeset
3645 * then. */
5078
22ac43fb6d30 updated for version 7.3.1282
Bram Moolenaar <bram@vim.org>
parents: 5068
diff changeset
3646 if (wp->w_p_cul && lnum == wp->w_cursor.lnum
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
3647 && !(wp == curwin && VIsual_active))
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3648 {
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3649 line_attr = HL_ATTR(HLF_CUL);
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3650 area_highlighting = TRUE;
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3651 }
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3652 #endif
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3653
504
35cde31bdcbd updated for version 7.0141
vimboss
parents: 501
diff changeset
3654 off = (unsigned)(current_ScreenLine - ScreenLines);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3655 col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3656 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3657 if (wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3658 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3659 /* Rightleft window: process the text in the normal direction, but put
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3660 * it in current_ScreenLine[] from right to left. Start at the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3661 * rightmost column of the window. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3662 col = W_WIDTH(wp) - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3663 off += col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3664 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3665 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3666
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3667 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3668 * Repeat for the whole displayed line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3669 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3670 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3671 {
6947
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
3672 #ifdef FEAT_CONCEAL
8907
5deb9e8f4292 commit https://github.com/vim/vim/commit/4d585022023b96f6507e8cae5ed8fc8d926f5140
Christian Brabandt <cb@256bit.org>
parents: 8872
diff changeset
3673 has_match_conc = 0;
6947
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
3674 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3675 /* Skip this quickly when working on the text. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3676 if (draw_state != WL_LINE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3677 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3678 #ifdef FEAT_CMDWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3679 if (draw_state == WL_CMDLINE - 1 && n_extra == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3680 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3681 draw_state = WL_CMDLINE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3682 if (cmdwin_type != 0 && wp == curwin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3683 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3684 /* Draw the cmdline character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3685 n_extra = 1;
1340
8e42199f5121 updated for version 7.1-054
vimboss
parents: 1331
diff changeset
3686 c_extra = cmdwin_type;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3687 char_attr = HL_ATTR(HLF_AT);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3688 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3689 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3690 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3691
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3692 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3693 if (draw_state == WL_FOLD - 1 && n_extra == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3694 {
6553
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
3695 int fdc = compute_foldcolumn(wp, 0);
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
3696
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3697 draw_state = WL_FOLD;
6553
0c8738124a7b updated for version 7.4.603
Bram Moolenaar <bram@vim.org>
parents: 6520
diff changeset
3698 if (fdc > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3699 {
10466
34b50194f82d commit https://github.com/vim/vim/commit/6270660611a151c5d0f614a5f0248ccdc80ed971
Christian Brabandt <cb@256bit.org>
parents: 10392
diff changeset
3700 /* Draw the 'foldcolumn'. Allocate a buffer, "extra" may
10538
c7f671dfd735 patch 8.0.0159: crash on startup when updating tabline
Christian Brabandt <cb@256bit.org>
parents: 10466
diff changeset
3701 * already be in use. */
10690
206ab11fa76e patch 8.0.0235: memory leak in diff mode
Christian Brabandt <cb@256bit.org>
parents: 10538
diff changeset
3702 vim_free(p_extra_free);
10466
34b50194f82d commit https://github.com/vim/vim/commit/6270660611a151c5d0f614a5f0248ccdc80ed971
Christian Brabandt <cb@256bit.org>
parents: 10392
diff changeset
3703 p_extra_free = alloc(12 + 1);
34b50194f82d commit https://github.com/vim/vim/commit/6270660611a151c5d0f614a5f0248ccdc80ed971
Christian Brabandt <cb@256bit.org>
parents: 10392
diff changeset
3704
34b50194f82d commit https://github.com/vim/vim/commit/6270660611a151c5d0f614a5f0248ccdc80ed971
Christian Brabandt <cb@256bit.org>
parents: 10392
diff changeset
3705 if (p_extra_free != NULL)
34b50194f82d commit https://github.com/vim/vim/commit/6270660611a151c5d0f614a5f0248ccdc80ed971
Christian Brabandt <cb@256bit.org>
parents: 10392
diff changeset
3706 {
34b50194f82d commit https://github.com/vim/vim/commit/6270660611a151c5d0f614a5f0248ccdc80ed971
Christian Brabandt <cb@256bit.org>
parents: 10392
diff changeset
3707 fill_foldcolumn(p_extra_free, wp, FALSE, lnum);
34b50194f82d commit https://github.com/vim/vim/commit/6270660611a151c5d0f614a5f0248ccdc80ed971
Christian Brabandt <cb@256bit.org>
parents: 10392
diff changeset
3708 n_extra = fdc;
34b50194f82d commit https://github.com/vim/vim/commit/6270660611a151c5d0f614a5f0248ccdc80ed971
Christian Brabandt <cb@256bit.org>
parents: 10392
diff changeset
3709 p_extra_free[n_extra] = NUL;
34b50194f82d commit https://github.com/vim/vim/commit/6270660611a151c5d0f614a5f0248ccdc80ed971
Christian Brabandt <cb@256bit.org>
parents: 10392
diff changeset
3710 p_extra = p_extra_free;
34b50194f82d commit https://github.com/vim/vim/commit/6270660611a151c5d0f614a5f0248ccdc80ed971
Christian Brabandt <cb@256bit.org>
parents: 10392
diff changeset
3711 c_extra = NUL;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3712 char_attr = HL_ATTR(HLF_FC);
10466
34b50194f82d commit https://github.com/vim/vim/commit/6270660611a151c5d0f614a5f0248ccdc80ed971
Christian Brabandt <cb@256bit.org>
parents: 10392
diff changeset
3713 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3714 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3715 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3716 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3717
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3718 #ifdef FEAT_SIGNS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3719 if (draw_state == WL_SIGN - 1 && n_extra == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3720 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3721 draw_state = WL_SIGN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3722 /* Show the sign column when there are any signs in this
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3723 * buffer or when using Netbeans. */
9852
4eea48b76d03 commit https://github.com/vim/vim/commit/95ec9d6a6ab3117d60ff638670a803d43974ba51
Christian Brabandt <cb@256bit.org>
parents: 9848
diff changeset
3724 if (signcolumn_on(wp))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3725 {
2661
a03f7551bacc updated for version 7.3.081
Bram Moolenaar <bram@vim.org>
parents: 2553
diff changeset
3726 int text_sign;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3727 # ifdef FEAT_SIGN_ICONS
2661
a03f7551bacc updated for version 7.3.081
Bram Moolenaar <bram@vim.org>
parents: 2553
diff changeset
3728 int icon_sign;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3729 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3730
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3731 /* Draw two cells with the sign value or blank. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3732 c_extra = ' ';
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3733 char_attr = HL_ATTR(HLF_SC);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3734 n_extra = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3735
5921
df141c80ea3a updated for version 7.4.302
Bram Moolenaar <bram@vim.org>
parents: 5905
diff changeset
3736 if (row == startrow
df141c80ea3a updated for version 7.4.302
Bram Moolenaar <bram@vim.org>
parents: 5905
diff changeset
3737 #ifdef FEAT_DIFF
df141c80ea3a updated for version 7.4.302
Bram Moolenaar <bram@vim.org>
parents: 5905
diff changeset
3738 + filler_lines && filler_todo <= 0
df141c80ea3a updated for version 7.4.302
Bram Moolenaar <bram@vim.org>
parents: 5905
diff changeset
3739 #endif
df141c80ea3a updated for version 7.4.302
Bram Moolenaar <bram@vim.org>
parents: 5905
diff changeset
3740 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3741 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3742 text_sign = buf_getsigntype(wp->w_buffer, lnum,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3743 SIGN_TEXT);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3744 # ifdef FEAT_SIGN_ICONS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3745 icon_sign = buf_getsigntype(wp->w_buffer, lnum,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3746 SIGN_ICON);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3747 if (gui.in_use && icon_sign != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3748 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3749 /* Use the image in this position. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3750 c_extra = SIGN_BYTE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3751 # ifdef FEAT_NETBEANS_INTG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3752 if (buf_signcount(wp->w_buffer, lnum) > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3753 c_extra = MULTISIGN_BYTE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3754 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3755 char_attr = icon_sign;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3756 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3757 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3758 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3759 if (text_sign != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3760 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3761 p_extra = sign_get_text(text_sign);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3762 if (p_extra != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3763 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3764 c_extra = NUL;
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 834
diff changeset
3765 n_extra = (int)STRLEN(p_extra);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3766 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3767 char_attr = sign_get_attr(text_sign, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3768 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3769 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3770 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3771 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3772 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3773
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3774 if (draw_state == WL_NR - 1 && n_extra == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3775 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3776 draw_state = WL_NR;
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
3777 /* Display the absolute or relative line number. After the
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
3778 * first fill with blanks when the 'n' flag isn't in 'cpo' */
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
3779 if ((wp->w_p_nu || wp->w_p_rnu)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3780 && (row == startrow
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3781 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3782 + filler_lines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3783 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3784 || vim_strchr(p_cpo, CPO_NUMCOL) == NULL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3785 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3786 /* Draw the line number (empty space after wrapping). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3787 if (row == startrow
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3788 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3789 + filler_lines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3790 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3791 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3792 {
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
3793 long num;
4065
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
3794 char *fmt = "%*ld ";
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
3795
4736
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
3796 if (wp->w_p_nu && !wp->w_p_rnu)
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
3797 /* 'number' + 'norelativenumber' */
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
3798 num = (long)lnum;
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
3799 else
4065
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
3800 {
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
3801 /* 'relativenumber', don't use negative numbers */
2675
f987220caa57 updated for version 7.3.094
Bram Moolenaar <bram@vim.org>
parents: 2661
diff changeset
3802 num = labs((long)get_cursor_rel_lnum(wp, lnum));
4736
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
3803 if (num == 0 && wp->w_p_nu && wp->w_p_rnu)
4065
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
3804 {
4736
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
3805 /* 'number' + 'relativenumber' */
4065
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
3806 num = lnum;
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
3807 fmt = "%-*ld ";
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
3808 }
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
3809 }
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
3810
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
3811 sprintf((char *)extra, fmt,
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
3812 number_width(wp), num);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3813 if (wp->w_skipcol > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3814 for (p_extra = extra; *p_extra == ' '; ++p_extra)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3815 *p_extra = '-';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3816 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3817 if (wp->w_p_rl) /* reverse line numbers */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3818 rl_mirror(extra);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3819 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3820 p_extra = extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3821 c_extra = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3822 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3823 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3824 c_extra = ' ';
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
3825 n_extra = number_width(wp) + 1;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3826 char_attr = HL_ATTR(HLF_N);
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3827 #ifdef FEAT_SYN_HL
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3828 /* When 'cursorline' is set highlight the line number of
3427
3db4282d5e6b updated for version 7.3.479
Bram Moolenaar <bram@vim.org>
parents: 3413
diff changeset
3829 * the current line differently.
3db4282d5e6b updated for version 7.3.479
Bram Moolenaar <bram@vim.org>
parents: 3413
diff changeset
3830 * TODO: Can we use CursorLine instead of CursorLineNr
3db4282d5e6b updated for version 7.3.479
Bram Moolenaar <bram@vim.org>
parents: 3413
diff changeset
3831 * when CursorLineNr isn't set? */
5078
22ac43fb6d30 updated for version 7.3.1282
Bram Moolenaar <bram@vim.org>
parents: 5068
diff changeset
3832 if ((wp->w_p_cul || wp->w_p_rnu)
4065
e1b98967a985 updated for version 7.3.787
Bram Moolenaar <bram@vim.org>
parents: 3986
diff changeset
3833 && lnum == wp->w_cursor.lnum)
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3834 char_attr = HL_ATTR(HLF_CLN);
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
3835 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3836 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3837 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3838
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3839 #ifdef FEAT_LINEBREAK
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3840 if (wp->w_p_brisbr && draw_state == WL_BRI - 1
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3841 && n_extra == 0 && *p_sbr != NUL)
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3842 /* draw indent after showbreak value */
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3843 draw_state = WL_BRI;
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3844 else if (wp->w_p_brisbr && draw_state == WL_SBR && n_extra == 0)
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3845 /* After the showbreak, draw the breakindent */
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3846 draw_state = WL_BRI - 1;
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3847
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3848 /* draw 'breakindent': indent wrapped text accordingly */
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3849 if (draw_state == WL_BRI - 1 && n_extra == 0)
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3850 {
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3851 draw_state = WL_BRI;
10392
957a1d560bda commit https://github.com/vim/vim/commit/6c896867c4f5d759616028ef7cbfce2a9ed32600
Christian Brabandt <cb@256bit.org>
parents: 10349
diff changeset
3852 /* if need_showbreak is set, breakindent also applies */
957a1d560bda commit https://github.com/vim/vim/commit/6c896867c4f5d759616028ef7cbfce2a9ed32600
Christian Brabandt <cb@256bit.org>
parents: 10349
diff changeset
3853 if (wp->w_p_bri && n_extra == 0
957a1d560bda commit https://github.com/vim/vim/commit/6c896867c4f5d759616028ef7cbfce2a9ed32600
Christian Brabandt <cb@256bit.org>
parents: 10349
diff changeset
3854 && (row != startrow || need_showbreak)
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3855 # ifdef FEAT_DIFF
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3856 && filler_lines == 0
6834
8730db0c187b patch 7.4.738
Bram Moolenaar <bram@vim.org>
parents: 6815
diff changeset
3857 # endif
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3858 )
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3859 {
10392
957a1d560bda commit https://github.com/vim/vim/commit/6c896867c4f5d759616028ef7cbfce2a9ed32600
Christian Brabandt <cb@256bit.org>
parents: 10349
diff changeset
3860 char_attr = 0;
6834
8730db0c187b patch 7.4.738
Bram Moolenaar <bram@vim.org>
parents: 6815
diff changeset
3861 # ifdef FEAT_DIFF
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3862 if (diff_hlf != (hlf_T)0)
6106
f051e50a6a5f updated for version 7.4.391
Bram Moolenaar <bram@vim.org>
parents: 6100
diff changeset
3863 {
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3864 char_attr = HL_ATTR(diff_hlf);
6834
8730db0c187b patch 7.4.738
Bram Moolenaar <bram@vim.org>
parents: 6815
diff changeset
3865 # ifdef FEAT_SYN_HL
6106
f051e50a6a5f updated for version 7.4.391
Bram Moolenaar <bram@vim.org>
parents: 6100
diff changeset
3866 if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
f051e50a6a5f updated for version 7.4.391
Bram Moolenaar <bram@vim.org>
parents: 6100
diff changeset
3867 char_attr = hl_combine_attr(char_attr,
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3868 HL_ATTR(HLF_CUL));
6834
8730db0c187b patch 7.4.738
Bram Moolenaar <bram@vim.org>
parents: 6815
diff changeset
3869 # endif
6106
f051e50a6a5f updated for version 7.4.391
Bram Moolenaar <bram@vim.org>
parents: 6100
diff changeset
3870 }
6834
8730db0c187b patch 7.4.738
Bram Moolenaar <bram@vim.org>
parents: 6815
diff changeset
3871 # endif
6028
5deaa4e9812d updated for version 7.4.354
Bram Moolenaar <bram@vim.org>
parents: 6026
diff changeset
3872 p_extra = NULL;
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3873 c_extra = ' ';
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3874 n_extra = get_breakindent_win(wp,
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3875 ml_get_buf(wp->w_buffer, lnum, FALSE));
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3876 /* Correct end of highlighted area for 'breakindent',
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3877 * required when 'linebreak' is also set. */
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3878 if (tocol == vcol)
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3879 tocol += n_extra;
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3880 }
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3881 }
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3882 #endif
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
3883
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3884 #if defined(FEAT_LINEBREAK) || defined(FEAT_DIFF)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3885 if (draw_state == WL_SBR - 1 && n_extra == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3886 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3887 draw_state = WL_SBR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3888 # ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3889 if (filler_todo > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3890 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3891 /* Draw "deleted" diff line(s). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3892 if (char2cells(fill_diff) > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3893 c_extra = '-';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3894 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3895 c_extra = fill_diff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3896 # ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3897 if (wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3898 n_extra = col + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3899 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3900 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3901 n_extra = W_WIDTH(wp) - col;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3902 char_attr = HL_ATTR(HLF_DED);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3903 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3904 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3905 # ifdef FEAT_LINEBREAK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3906 if (*p_sbr != NUL && need_showbreak)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3907 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3908 /* Draw 'showbreak' at the start of each broken line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3909 p_extra = p_sbr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3910 c_extra = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3911 n_extra = (int)STRLEN(p_sbr);
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3912 char_attr = HL_ATTR(HLF_AT);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3913 need_showbreak = FALSE;
6503
134a7d55f9fa updated for version 7.4.579
Bram Moolenaar <bram@vim.org>
parents: 6477
diff changeset
3914 vcol_sbr = vcol + MB_CHARLEN(p_sbr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3915 /* Correct end of highlighted area for 'showbreak',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3916 * required when 'linebreak' is also set. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3917 if (tocol == vcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3918 tocol += n_extra;
5068
6a7ae677d6a1 updated for version 7.3.1277
Bram Moolenaar <bram@vim.org>
parents: 4916
diff changeset
3919 #ifdef FEAT_SYN_HL
6a7ae677d6a1 updated for version 7.3.1277
Bram Moolenaar <bram@vim.org>
parents: 4916
diff changeset
3920 /* combine 'showbreak' with 'cursorline' */
5078
22ac43fb6d30 updated for version 7.3.1282
Bram Moolenaar <bram@vim.org>
parents: 5068
diff changeset
3921 if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
6106
f051e50a6a5f updated for version 7.4.391
Bram Moolenaar <bram@vim.org>
parents: 6100
diff changeset
3922 char_attr = hl_combine_attr(char_attr,
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
3923 HL_ATTR(HLF_CUL));
5068
6a7ae677d6a1 updated for version 7.3.1277
Bram Moolenaar <bram@vim.org>
parents: 4916
diff changeset
3924 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3925 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3926 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3927 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3928 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3929
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3930 if (draw_state == WL_LINE - 1 && n_extra == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3931 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3932 draw_state = WL_LINE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3933 if (saved_n_extra)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3934 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3935 /* Continue item from end of wrapped line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3936 n_extra = saved_n_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3937 c_extra = saved_c_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3938 p_extra = saved_p_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3939 char_attr = saved_char_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3940 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3941 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3942 char_attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3943 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3944 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3945
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3946 /* When still displaying '$' of change command, stop at cursor */
3318
c70c005f61fb updated for version 7.3.426
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
3947 if (dollar_vcol >= 0 && wp == curwin
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
3948 && lnum == wp->w_cursor.lnum && vcol >= (long)wp->w_virtcol
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3949 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3950 && filler_todo <= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3951 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3952 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3953 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3954 SCREEN_LINE(screen_row, W_WINCOL(wp), col, -(int)W_WIDTH(wp),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3955 wp->w_p_rl);
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
3956 /* Pretend we have finished updating the window. Except when
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
3957 * 'cursorcolumn' is set. */
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
3958 #ifdef FEAT_SYN_HL
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
3959 if (wp->w_p_cuc)
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
3960 row = wp->w_cline_row + wp->w_cline_height;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
3961 else
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
3962 #endif
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
3963 row = wp->w_height;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3964 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3965 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3966
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3967 if (draw_state == WL_LINE && area_highlighting)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3968 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3969 /* handle Visual or match highlighting in this line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3970 if (vcol == fromcol
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3971 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3972 || (has_mbyte && vcol + 1 == fromcol && n_extra == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3973 && (*mb_ptr2cells)(ptr) > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3974 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3975 || ((int)vcol_prev == fromcol_prev
1814
febddd8d11b0 updated for version 7.2-112
vimboss
parents: 1813
diff changeset
3976 && vcol_prev < vcol /* not at margin */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3977 && vcol < tocol))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3978 area_attr = attr; /* start highlighting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3979 else if (area_attr != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3980 && (vcol == tocol
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3981 || (noinvcur && (colnr_T)vcol == wp->w_virtcol)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3982 area_attr = 0; /* stop highlighting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3983
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3984 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3985 if (!n_extra)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3986 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3987 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3988 * Check for start/end of search pattern match.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3989 * After end, check for start/end of next match.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3990 * When another match, have to check for start again.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3991 * Watch out for matching an empty string!
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3992 * Do this for 'search_hl' and the match list (ordered by
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3993 * priority).
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3994 */
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
3995 v = (long)(ptr - line);
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3996 cur = wp->w_match_head;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3997 shl_flag = FALSE;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3998 while (cur != NULL || shl_flag == FALSE)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
3999 {
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4000 if (shl_flag == FALSE
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4001 && ((cur != NULL
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4002 && cur->priority > SEARCH_HL_PRIORITY)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4003 || cur == NULL))
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4004 {
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4005 shl = &search_hl;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4006 shl_flag = TRUE;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4007 }
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4008 else
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4009 shl = &cur->hl;
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
4010 if (cur != NULL)
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
4011 cur->pos.cur = 0;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
4012 pos_inprogress = TRUE;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
4013 while (shl->rm.regprog != NULL
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
4014 || (cur != NULL && pos_inprogress))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4015 {
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4016 if (shl->startcol != MAXCOL
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4017 && v >= (long)shl->startcol
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4018 && v < (long)shl->endcol)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4019 {
6430
d2239abd3edb updated for version 7.4.545
Bram Moolenaar <bram@vim.org>
parents: 6394
diff changeset
4020 #ifdef FEAT_MBYTE
d2239abd3edb updated for version 7.4.545
Bram Moolenaar <bram@vim.org>
parents: 6394
diff changeset
4021 int tmp_col = v + MB_PTR2LEN(ptr);
d2239abd3edb updated for version 7.4.545
Bram Moolenaar <bram@vim.org>
parents: 6394
diff changeset
4022
d2239abd3edb updated for version 7.4.545
Bram Moolenaar <bram@vim.org>
parents: 6394
diff changeset
4023 if (shl->endcol < tmp_col)
d2239abd3edb updated for version 7.4.545
Bram Moolenaar <bram@vim.org>
parents: 6394
diff changeset
4024 shl->endcol = tmp_col;
d2239abd3edb updated for version 7.4.545
Bram Moolenaar <bram@vim.org>
parents: 6394
diff changeset
4025 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4026 shl->attr_cur = shl->attr;
6947
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
4027 #ifdef FEAT_CONCEAL
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
4028 if (cur != NULL && syn_name2id((char_u *)"Conceal")
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
4029 == cur->hlg_id)
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
4030 {
8907
5deb9e8f4292 commit https://github.com/vim/vim/commit/4d585022023b96f6507e8cae5ed8fc8d926f5140
Christian Brabandt <cb@256bit.org>
parents: 8872
diff changeset
4031 has_match_conc =
5deb9e8f4292 commit https://github.com/vim/vim/commit/4d585022023b96f6507e8cae5ed8fc8d926f5140
Christian Brabandt <cb@256bit.org>
parents: 8872
diff changeset
4032 v == (long)shl->startcol ? 2 : 1;
6947
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
4033 match_conc = cur->conceal_char;
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
4034 }
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
4035 else
8907
5deb9e8f4292 commit https://github.com/vim/vim/commit/4d585022023b96f6507e8cae5ed8fc8d926f5140
Christian Brabandt <cb@256bit.org>
parents: 8872
diff changeset
4036 has_match_conc = match_conc = 0;
6947
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
4037 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4038 }
6430
d2239abd3edb updated for version 7.4.545
Bram Moolenaar <bram@vim.org>
parents: 6394
diff changeset
4039 else if (v == (long)shl->endcol)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4040 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4041 shl->attr_cur = 0;
9992
3e3b0ce24b61 commit https://github.com/vim/vim/commit/e17bdffff78ebd6a4e3cff26754cc667557ea810
Christian Brabandt <cb@256bit.org>
parents: 9939
diff changeset
4042 next_search_hl(wp, shl, lnum, (colnr_T)v,
3e3b0ce24b61 commit https://github.com/vim/vim/commit/e17bdffff78ebd6a4e3cff26754cc667557ea810
Christian Brabandt <cb@256bit.org>
parents: 9939
diff changeset
4043 shl == &search_hl ? NULL : cur);
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
4044 pos_inprogress = cur == NULL || cur->pos.cur == 0
6947
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
4045 ? FALSE : TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4046
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4047 /* Need to get the line again, a multi-line regexp
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4048 * may have made it invalid. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4049 line = ml_get_buf(wp->w_buffer, lnum, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4050 ptr = line + v;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4051
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4052 if (shl->lnum == lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4053 {
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4054 shl->startcol = shl->rm.startpos[0].col;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4055 if (shl->rm.endpos[0].lnum == 0)
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4056 shl->endcol = shl->rm.endpos[0].col;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4057 else
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4058 shl->endcol = MAXCOL;
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4059
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4060 if (shl->startcol == shl->endcol)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4061 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4062 /* highlight empty match, try again after
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4063 * it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4064 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4065 if (has_mbyte)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
4066 shl->endcol += (*mb_ptr2len)(line
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4067 + shl->endcol);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4068 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4069 #endif
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4070 ++shl->endcol;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4071 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4072
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4073 /* Loop to check if the match starts at the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4074 * current position */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4075 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4076 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4077 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4078 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4079 }
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4080 if (shl != &search_hl && cur != NULL)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4081 cur = cur->next;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4082 }
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4083
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4084 /* Use attributes from match with highest priority among
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4085 * 'search_hl' and the match list. */
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4086 search_attr = search_hl.attr_cur;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4087 cur = wp->w_match_head;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4088 shl_flag = FALSE;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4089 while (cur != NULL || shl_flag == FALSE)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4090 {
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4091 if (shl_flag == FALSE
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4092 && ((cur != NULL
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4093 && cur->priority > SEARCH_HL_PRIORITY)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4094 || cur == NULL))
699
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
4095 {
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4096 shl = &search_hl;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4097 shl_flag = TRUE;
699
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
4098 }
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4099 else
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4100 shl = &cur->hl;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4101 if (shl->attr_cur != 0)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4102 search_attr = shl->attr_cur;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4103 if (shl != &search_hl && cur != NULL)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4104 cur = cur->next;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4105 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4106 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4107 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4108
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4109 #ifdef FEAT_DIFF
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4110 if (diff_hlf != (hlf_T)0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4111 {
1295
b090b216a832 updated for version 7.1-009
vimboss
parents: 1213
diff changeset
4112 if (diff_hlf == HLF_CHD && ptr - line >= change_start
b090b216a832 updated for version 7.1-009
vimboss
parents: 1213
diff changeset
4113 && n_extra == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4114 diff_hlf = HLF_TXD; /* changed text */
1295
b090b216a832 updated for version 7.1-009
vimboss
parents: 1213
diff changeset
4115 if (diff_hlf == HLF_TXD && ptr - line > change_end
b090b216a832 updated for version 7.1-009
vimboss
parents: 1213
diff changeset
4116 && n_extra == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4117 diff_hlf = HLF_CHD; /* changed line */
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
4118 line_attr = HL_ATTR(diff_hlf);
6106
f051e50a6a5f updated for version 7.4.391
Bram Moolenaar <bram@vim.org>
parents: 6100
diff changeset
4119 if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
4120 line_attr = hl_combine_attr(line_attr, HL_ATTR(HLF_CUL));
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4121 }
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4122 #endif
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4123
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4124 /* Decide which of the highlight attributes to use. */
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4125 attr_pri = TRUE;
6717
f242cf1f9897 updated for version 7.4.682
Bram Moolenaar <bram@vim.org>
parents: 6693
diff changeset
4126 #ifdef LINE_ATTR
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4127 if (area_attr != 0)
6717
f242cf1f9897 updated for version 7.4.682
Bram Moolenaar <bram@vim.org>
parents: 6693
diff changeset
4128 char_attr = hl_combine_attr(line_attr, area_attr);
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4129 else if (search_attr != 0)
6717
f242cf1f9897 updated for version 7.4.682
Bram Moolenaar <bram@vim.org>
parents: 6693
diff changeset
4130 char_attr = hl_combine_attr(line_attr, search_attr);
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4131 /* Use line_attr when not in the Visual or 'incsearch' area
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4132 * (area_attr may be 0 when "noinvcur" is set). */
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4133 else if (line_attr != 0 && ((fromcol == -10 && tocol == MAXCOL)
1842
c1709e3f8536 updated for version 7.2-140
vimboss
parents: 1824
diff changeset
4134 || vcol < fromcol || vcol_prev < fromcol_prev
c1709e3f8536 updated for version 7.2-140
vimboss
parents: 1824
diff changeset
4135 || vcol >= tocol))
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4136 char_attr = line_attr;
6717
f242cf1f9897 updated for version 7.4.682
Bram Moolenaar <bram@vim.org>
parents: 6693
diff changeset
4137 #else
f242cf1f9897 updated for version 7.4.682
Bram Moolenaar <bram@vim.org>
parents: 6693
diff changeset
4138 if (area_attr != 0)
f242cf1f9897 updated for version 7.4.682
Bram Moolenaar <bram@vim.org>
parents: 6693
diff changeset
4139 char_attr = area_attr;
f242cf1f9897 updated for version 7.4.682
Bram Moolenaar <bram@vim.org>
parents: 6693
diff changeset
4140 else if (search_attr != 0)
f242cf1f9897 updated for version 7.4.682
Bram Moolenaar <bram@vim.org>
parents: 6693
diff changeset
4141 char_attr = search_attr;
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4142 #endif
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4143 else
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4144 {
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4145 attr_pri = FALSE;
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4146 #ifdef FEAT_SYN_HL
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4147 if (has_syntax)
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4148 char_attr = syntax_attr;
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4149 else
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4150 #endif
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4151 char_attr = 0;
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4152 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4153 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4154
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4155 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4156 * Get the next character to put on the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4157 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4158 /*
1340
8e42199f5121 updated for version 7.1-054
vimboss
parents: 1331
diff changeset
4159 * The "p_extra" points to the extra stuff that is inserted to
8e42199f5121 updated for version 7.1-054
vimboss
parents: 1331
diff changeset
4160 * represent special characters (non-printable stuff) and other
8e42199f5121 updated for version 7.1-054
vimboss
parents: 1331
diff changeset
4161 * things. When all characters are the same, c_extra is used.
8e42199f5121 updated for version 7.1-054
vimboss
parents: 1331
diff changeset
4162 * "p_extra" must end in a NUL to avoid mb_ptr2len() reads past
8e42199f5121 updated for version 7.1-054
vimboss
parents: 1331
diff changeset
4163 * "p_extra[n_extra]".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4164 * For the '$' of the 'list' option, n_extra == 1, p_extra == "".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4165 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4166 if (n_extra > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4167 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4168 if (c_extra != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4169 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4170 c = c_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4171 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4172 mb_c = c; /* doesn't handle non-utf-8 multi-byte! */
11269
121d29004998 patch 8.0.0520: using a function pointer while the function is known
Christian Brabandt <cb@256bit.org>
parents: 11265
diff changeset
4173 if (enc_utf8 && utf_char2len(c) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4174 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4175 mb_utf8 = TRUE;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4176 u8cc[0] = 0;
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
4177 c = 0xc0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4178 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4179 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4180 mb_utf8 = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4181 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4182 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4183 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4184 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4185 c = *p_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4186 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4187 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4188 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4189 mb_c = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4190 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4191 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4192 /* If the UTF-8 character is more than one byte:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4193 * Decode it into "mb_c". */
11269
121d29004998 patch 8.0.0520: using a function pointer while the function is known
Christian Brabandt <cb@256bit.org>
parents: 11265
diff changeset
4194 mb_l = utfc_ptr2len(p_extra);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4195 mb_utf8 = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4196 if (mb_l > n_extra)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4197 mb_l = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4198 else if (mb_l > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4199 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4200 mb_c = utfc_ptr2char(p_extra, u8cc);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4201 mb_utf8 = TRUE;
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
4202 c = 0xc0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4203 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4204 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4205 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4206 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4207 /* if this is a DBCS character, put it in "mb_c" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4208 mb_l = MB_BYTE2LEN(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4209 if (mb_l >= n_extra)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4210 mb_l = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4211 else if (mb_l > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4212 mb_c = (c << 8) + p_extra[1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4213 }
504
35cde31bdcbd updated for version 7.0141
vimboss
parents: 501
diff changeset
4214 if (mb_l == 0) /* at the NUL at end-of-line */
35cde31bdcbd updated for version 7.0141
vimboss
parents: 501
diff changeset
4215 mb_l = 1;
35cde31bdcbd updated for version 7.0141
vimboss
parents: 501
diff changeset
4216
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4217 /* If a double-width char doesn't fit display a '>' in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4218 * last column. */
504
35cde31bdcbd updated for version 7.0141
vimboss
parents: 501
diff changeset
4219 if ((
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4220 # ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4221 wp->w_p_rl ? (col <= 0) :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4222 # endif
504
35cde31bdcbd updated for version 7.0141
vimboss
parents: 501
diff changeset
4223 (col >= W_WIDTH(wp) - 1))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4224 && (*mb_char2cells)(mb_c) == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4225 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4226 c = '>';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4227 mb_c = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4228 mb_l = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4229 mb_utf8 = FALSE;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
4230 multi_attr = HL_ATTR(HLF_AT);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4231 /* put the pointer back to output the double-width
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4232 * character at the start of the next line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4233 ++n_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4234 --p_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4235 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4236 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4237 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4238 n_extra -= mb_l - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4239 p_extra += mb_l - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4240 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4241 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4242 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4243 ++p_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4244 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4245 --n_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4246 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4247 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4248 {
10986
62bcadce6c82 patch 8.0.0382: warning in tiny build for unused variable
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
4249 #ifdef FEAT_LINEBREAK
10982
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10928
diff changeset
4250 int c0;
10986
62bcadce6c82 patch 8.0.0382: warning in tiny build for unused variable
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
4251 #endif
10982
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10928
diff changeset
4252
6026
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4253 if (p_extra_free != NULL)
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4254 {
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4255 vim_free(p_extra_free);
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4256 p_extra_free = NULL;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4257 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4258 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4259 * Get a character from the line itself.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4260 */
10988
b5de553d6062 patch 8.0.0383: misplaced #ifdef
Christian Brabandt <cb@256bit.org>
parents: 10986
diff changeset
4261 c = *ptr;
10986
62bcadce6c82 patch 8.0.0382: warning in tiny build for unused variable
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
4262 #ifdef FEAT_LINEBREAK
10988
b5de553d6062 patch 8.0.0383: misplaced #ifdef
Christian Brabandt <cb@256bit.org>
parents: 10986
diff changeset
4263 c0 = *ptr;
10986
62bcadce6c82 patch 8.0.0382: warning in tiny build for unused variable
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
4264 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4265 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4266 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4267 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4268 mb_c = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4269 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4270 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4271 /* If the UTF-8 character is more than one byte: Decode it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4272 * into "mb_c". */
11269
121d29004998 patch 8.0.0520: using a function pointer while the function is known
Christian Brabandt <cb@256bit.org>
parents: 11265
diff changeset
4273 mb_l = utfc_ptr2len(ptr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4274 mb_utf8 = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4275 if (mb_l > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4276 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4277 mb_c = utfc_ptr2char(ptr, u8cc);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4278 /* Overlong encoded ASCII or ASCII with composing char
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4279 * is displayed normally, except a NUL. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4280 if (mb_c < 0x80)
10986
62bcadce6c82 patch 8.0.0382: warning in tiny build for unused variable
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
4281 {
62bcadce6c82 patch 8.0.0382: warning in tiny build for unused variable
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
4282 c = mb_c;
62bcadce6c82 patch 8.0.0382: warning in tiny build for unused variable
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
4283 # ifdef FEAT_LINEBREAK
62bcadce6c82 patch 8.0.0382: warning in tiny build for unused variable
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
4284 c0 = mb_c;
62bcadce6c82 patch 8.0.0382: warning in tiny build for unused variable
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
4285 # endif
62bcadce6c82 patch 8.0.0382: warning in tiny build for unused variable
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
4286 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4287 mb_utf8 = TRUE;
507
a1059cda45f2 updated for version 7.0142
vimboss
parents: 504
diff changeset
4288
a1059cda45f2 updated for version 7.0142
vimboss
parents: 504
diff changeset
4289 /* At start of the line we can have a composing char.
a1059cda45f2 updated for version 7.0142
vimboss
parents: 504
diff changeset
4290 * Draw it as a space with a composing char. */
a1059cda45f2 updated for version 7.0142
vimboss
parents: 504
diff changeset
4291 if (utf_iscomposing(mb_c))
a1059cda45f2 updated for version 7.0142
vimboss
parents: 504
diff changeset
4292 {
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4293 int i;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
4294
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4295 for (i = Screen_mco - 1; i > 0; --i)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4296 u8cc[i] = u8cc[i - 1];
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4297 u8cc[0] = mb_c;
507
a1059cda45f2 updated for version 7.0142
vimboss
parents: 504
diff changeset
4298 mb_c = ' ';
a1059cda45f2 updated for version 7.0142
vimboss
parents: 504
diff changeset
4299 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4300 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4301
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4302 if ((mb_l == 1 && c >= 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4303 || (mb_l >= 1 && mb_c == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4304 || (mb_l > 1 && (!vim_isprintc(mb_c)
1401
e351146e7974 updated for version 7.1-116
vimboss
parents: 1378
diff changeset
4305 # ifdef UNICODE16
e351146e7974 updated for version 7.1-116
vimboss
parents: 1378
diff changeset
4306 || mb_c >= 0x10000
e351146e7974 updated for version 7.1-116
vimboss
parents: 1378
diff changeset
4307 # endif
e351146e7974 updated for version 7.1-116
vimboss
parents: 1378
diff changeset
4308 )))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4309 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4310 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4311 * Illegal UTF-8 byte: display as <xx>.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4312 * Non-BMP character : display as ? or fullwidth ?.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4313 */
1401
e351146e7974 updated for version 7.1-116
vimboss
parents: 1378
diff changeset
4314 # ifdef UNICODE16
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4315 if (mb_c < 0x10000)
1401
e351146e7974 updated for version 7.1-116
vimboss
parents: 1378
diff changeset
4316 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4317 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4318 transchar_hex(extra, mb_c);
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4319 # ifdef FEAT_RIGHTLEFT
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4320 if (wp->w_p_rl) /* reverse */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4321 rl_mirror(extra);
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4322 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4323 }
1401
e351146e7974 updated for version 7.1-116
vimboss
parents: 1378
diff changeset
4324 # ifdef UNICODE16
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4325 else if (utf_char2cells(mb_c) != 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4326 STRCPY(extra, "?");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4327 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4328 /* 0xff1f in UTF-8: full-width '?' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4329 STRCPY(extra, "\357\274\237");
1401
e351146e7974 updated for version 7.1-116
vimboss
parents: 1378
diff changeset
4330 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4331
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4332 p_extra = extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4333 c = *p_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4334 mb_c = mb_ptr2char_adv(&p_extra);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4335 mb_utf8 = (c >= 0x80);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4336 n_extra = (int)STRLEN(p_extra);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4337 c_extra = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4338 if (area_attr == 0 && search_attr == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4339 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4340 n_attr = n_extra + 1;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
4341 extra_attr = HL_ATTR(HLF_8);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4342 saved_attr2 = char_attr; /* save current attr */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4343 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4344 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4345 else if (mb_l == 0) /* at the NUL at end-of-line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4346 mb_l = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4347 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4348 else if (p_arshape && !p_tbidi && ARABIC_CHAR(mb_c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4349 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4350 /* Do Arabic shaping. */
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4351 int pc, pc1, nc;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4352 int pcc[MAX_MCO];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4353
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4354 /* The idea of what is the previous and next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4355 * character depends on 'rightleft'. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4356 if (wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4357 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4358 pc = prev_c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4359 pc1 = prev_c1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4360 nc = utf_ptr2char(ptr + mb_l);
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4361 prev_c1 = u8cc[0];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4362 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4363 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4364 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4365 pc = utfc_ptr2char(ptr + mb_l, pcc);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4366 nc = prev_c;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4367 pc1 = pcc[0];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4368 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4369 prev_c = mb_c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4370
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4371 mb_c = arabic_shape(mb_c, &c, &u8cc[0], pc, pc1, nc);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4372 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4373 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4374 prev_c = mb_c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4375 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4376 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4377 else /* enc_dbcs */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4378 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4379 mb_l = MB_BYTE2LEN(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4380 if (mb_l == 0) /* at the NUL at end-of-line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4381 mb_l = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4382 else if (mb_l > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4383 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4384 /* We assume a second byte below 32 is illegal.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4385 * Hopefully this is OK for all double-byte encodings!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4386 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4387 if (ptr[1] >= 32)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4388 mb_c = (c << 8) + ptr[1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4389 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4390 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4391 if (ptr[1] == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4392 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4393 /* head byte at end of line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4394 mb_l = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4395 transchar_nonprint(extra, c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4396 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4397 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4398 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4399 /* illegal tail byte */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4400 mb_l = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4401 STRCPY(extra, "XX");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4402 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4403 p_extra = extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4404 n_extra = (int)STRLEN(extra) - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4405 c_extra = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4406 c = *p_extra++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4407 if (area_attr == 0 && search_attr == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4408 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4409 n_attr = n_extra + 1;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
4410 extra_attr = HL_ATTR(HLF_8);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4411 saved_attr2 = char_attr; /* save current attr */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4412 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4413 mb_c = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4414 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4415 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4416 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4417 /* If a double-width char doesn't fit display a '>' in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4418 * last column; the character is displayed at the start of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4419 * next line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4420 if ((
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4421 # ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4422 wp->w_p_rl ? (col <= 0) :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4423 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4424 (col >= W_WIDTH(wp) - 1))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4425 && (*mb_char2cells)(mb_c) == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4426 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4427 c = '>';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4428 mb_c = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4429 mb_utf8 = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4430 mb_l = 1;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
4431 multi_attr = HL_ATTR(HLF_AT);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4432 /* Put pointer back so that the character will be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4433 * displayed at the start of the next line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4434 --ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4435 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4436 else if (*ptr != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4437 ptr += mb_l - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4438
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4439 /* If a double-width char doesn't fit at the left side display
2509
6d6378ba18cb Fix: An unprintable multi-byte character at the start of the screen line
Bram Moolenaar <bram@vim.org>
parents: 2428
diff changeset
4440 * a '<' in the first column. Don't do this for unprintable
4352
04736b4030ec updated for version 7.3.925
Bram Moolenaar <bram@vim.org>
parents: 4107
diff changeset
4441 * characters. */
2509
6d6378ba18cb Fix: An unprintable multi-byte character at the start of the screen line
Bram Moolenaar <bram@vim.org>
parents: 2428
diff changeset
4442 if (n_skip > 0 && mb_l > 1 && n_extra == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4443 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4444 n_extra = 1;
3586
583e46e4a56c updated for version 7.3.553
Bram Moolenaar <bram@vim.org>
parents: 3572
diff changeset
4445 c_extra = MB_FILLER_CHAR;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4446 c = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4447 if (area_attr == 0 && search_attr == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4448 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4449 n_attr = n_extra + 1;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
4450 extra_attr = HL_ATTR(HLF_AT);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4451 saved_attr2 = char_attr; /* save current attr */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4452 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4453 mb_c = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4454 mb_utf8 = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4455 mb_l = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4456 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4457
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4458 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4459 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4460 ++ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4461
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4462 if (extra_check)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4463 {
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
4464 #ifdef FEAT_SPELL
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
4465 int can_spell = TRUE;
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
4466 #endif
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
4467
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
4468 #ifdef FEAT_SYN_HL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4469 /* Get syntax attribute, unless still at the start of the line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4470 * (double-wide char that doesn't fit). */
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
4471 v = (long)(ptr - line);
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
4472 if (has_syntax && v > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4473 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4474 /* Get the syntax attribute for the character. If there
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4475 * is an error, disable syntax highlighting. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4476 save_did_emsg = did_emsg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4477 did_emsg = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4478
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
4479 syntax_attr = get_syntax_attr((colnr_T)v - 1,
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
4480 # ifdef FEAT_SPELL
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
4481 has_spell ? &can_spell :
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
4482 # endif
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
4483 NULL, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4484
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4485 if (did_emsg)
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4486 {
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
4487 wp->w_s->b_syn_error = TRUE;
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4488 has_syntax = FALSE;
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4489 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4490 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4491 did_emsg = save_did_emsg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4492
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4493 /* Need to get the line again, a multi-line regexp may
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4494 * have made it invalid. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4495 line = ml_get_buf(wp->w_buffer, lnum, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4496 ptr = line + v;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4497
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4498 if (!attr_pri)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4499 char_attr = syntax_attr;
301
006e9c8a6a8a updated for version 7.0079
vimboss
parents: 277
diff changeset
4500 else
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 301
diff changeset
4501 char_attr = hl_combine_attr(syntax_attr, char_attr);
2364
151b037b7e74 Fix hang when resizing in diff mode and there are concealed items.
Bram Moolenaar <bram@vim.org>
parents: 2359
diff changeset
4502 # ifdef FEAT_CONCEAL
151b037b7e74 Fix hang when resizing in diff mode and there are concealed items.
Bram Moolenaar <bram@vim.org>
parents: 2359
diff changeset
4503 /* no concealing past the end of the line, it interferes
151b037b7e74 Fix hang when resizing in diff mode and there are concealed items.
Bram Moolenaar <bram@vim.org>
parents: 2359
diff changeset
4504 * with line highlighting */
151b037b7e74 Fix hang when resizing in diff mode and there are concealed items.
Bram Moolenaar <bram@vim.org>
parents: 2359
diff changeset
4505 if (c == NUL)
151b037b7e74 Fix hang when resizing in diff mode and there are concealed items.
Bram Moolenaar <bram@vim.org>
parents: 2359
diff changeset
4506 syntax_flags = 0;
2375
a96dd77ce213 For conceal mode: when two different syntax items follow each other, show the
Bram Moolenaar <bram@vim.org>
parents: 2364
diff changeset
4507 else
2392
0371401d9d33 Give each syntax item a sequence number, so that we know when it starts and
Bram Moolenaar <bram@vim.org>
parents: 2382
diff changeset
4508 syntax_flags = get_syntax_info(&syntax_seqnr);
2364
151b037b7e74 Fix hang when resizing in diff mode and there are concealed items.
Bram Moolenaar <bram@vim.org>
parents: 2359
diff changeset
4509 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4510 }
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
4511 #endif
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
4512
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
4513 #ifdef FEAT_SPELL
301
006e9c8a6a8a updated for version 7.0079
vimboss
parents: 277
diff changeset
4514 /* Check spelling (unless at the end of the line).
319
0ee579e01743 updated for version 7.0083
vimboss
parents: 303
diff changeset
4515 * Only do this when there is no syntax highlighting, the
0ee579e01743 updated for version 7.0083
vimboss
parents: 303
diff changeset
4516 * @Spell cluster is not used or the current syntax item
0ee579e01743 updated for version 7.0083
vimboss
parents: 303
diff changeset
4517 * contains the @Spell cluster. */
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4518 if (has_spell && v >= word_end && v > cur_checked_col)
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
4519 {
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 227
diff changeset
4520 spell_attr = 0;
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
4521 # ifdef FEAT_SYN_HL
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4522 if (!attr_pri)
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 227
diff changeset
4523 char_attr = syntax_attr;
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
4524 # endif
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
4525 if (c != 0 && (
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
4526 # ifdef FEAT_SYN_HL
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
4527 !has_syntax ||
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
4528 # endif
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
4529 can_spell))
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
4530 {
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4531 char_u *prev_ptr, *p;
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4532 int len;
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
4533 hlf_T spell_hlf = HLF_COUNT;
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
4534 # ifdef FEAT_MBYTE
336
2d8c2622e1fa updated for version 7.0087
vimboss
parents: 319
diff changeset
4535 if (has_mbyte)
2d8c2622e1fa updated for version 7.0087
vimboss
parents: 319
diff changeset
4536 {
2d8c2622e1fa updated for version 7.0087
vimboss
parents: 319
diff changeset
4537 prev_ptr = ptr - mb_l;
2d8c2622e1fa updated for version 7.0087
vimboss
parents: 319
diff changeset
4538 v -= mb_l - 1;
2d8c2622e1fa updated for version 7.0087
vimboss
parents: 319
diff changeset
4539 }
2d8c2622e1fa updated for version 7.0087
vimboss
parents: 319
diff changeset
4540 else
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
4541 # endif
336
2d8c2622e1fa updated for version 7.0087
vimboss
parents: 319
diff changeset
4542 prev_ptr = ptr - 1;
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4543
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4544 /* Use nextline[] if possible, it has the start of the
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4545 * next line concatenated. */
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4546 if ((prev_ptr - line) - nextlinecol >= 0)
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4547 p = nextline + (prev_ptr - line) - nextlinecol;
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4548 else
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4549 p = prev_ptr;
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 834
diff changeset
4550 cap_col -= (int)(prev_ptr - line);
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 574
diff changeset
4551 len = spell_check(wp, p, &spell_hlf, &cap_col,
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 574
diff changeset
4552 nochange);
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4553 word_end = v + len;
301
006e9c8a6a8a updated for version 7.0079
vimboss
parents: 277
diff changeset
4554
006e9c8a6a8a updated for version 7.0079
vimboss
parents: 277
diff changeset
4555 /* In Insert mode only highlight a word that
006e9c8a6a8a updated for version 7.0079
vimboss
parents: 277
diff changeset
4556 * doesn't touch the cursor. */
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
4557 if (spell_hlf != HLF_COUNT
301
006e9c8a6a8a updated for version 7.0079
vimboss
parents: 277
diff changeset
4558 && (State & INSERT) != 0
006e9c8a6a8a updated for version 7.0079
vimboss
parents: 277
diff changeset
4559 && wp->w_cursor.lnum == lnum
006e9c8a6a8a updated for version 7.0079
vimboss
parents: 277
diff changeset
4560 && wp->w_cursor.col >=
006e9c8a6a8a updated for version 7.0079
vimboss
parents: 277
diff changeset
4561 (colnr_T)(prev_ptr - line)
006e9c8a6a8a updated for version 7.0079
vimboss
parents: 277
diff changeset
4562 && wp->w_cursor.col < (colnr_T)word_end)
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
4563 {
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
4564 spell_hlf = HLF_COUNT;
301
006e9c8a6a8a updated for version 7.0079
vimboss
parents: 277
diff changeset
4565 spell_redraw_lnum = lnum;
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
4566 }
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4567
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
4568 if (spell_hlf == HLF_COUNT && p != prev_ptr
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4569 && (p - nextline) + len > nextline_idx)
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4570 {
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4571 /* Remember that the good word continues at the
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4572 * start of the next line. */
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4573 checked_lnum = lnum + 1;
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 834
diff changeset
4574 checked_col = (int)((p - nextline) + len - nextline_idx);
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4575 }
386
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
4576
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
4577 /* Turn index into actual attributes. */
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
4578 if (spell_hlf != HLF_COUNT)
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
4579 spell_attr = highlight_attr[spell_hlf];
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
4580
386
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
4581 if (cap_col > 0)
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
4582 {
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
4583 if (p != prev_ptr
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
4584 && (p - nextline) + cap_col >= nextline_idx)
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
4585 {
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
4586 /* Remember that the word in the next line
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
4587 * must start with a capital. */
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
4588 capcol_lnum = lnum + 1;
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 834
diff changeset
4589 cap_col = (int)((p - nextline) + cap_col
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 834
diff changeset
4590 - nextline_idx);
386
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
4591 }
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
4592 else
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
4593 /* Compute the actual column. */
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 834
diff changeset
4594 cap_col += (int)(prev_ptr - line);
386
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
4595 }
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
4596 }
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
4597 }
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
4598 if (spell_attr != 0)
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4599 {
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4600 if (!attr_pri)
348
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4601 char_attr = hl_combine_attr(char_attr, spell_attr);
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4602 else
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4603 char_attr = hl_combine_attr(spell_attr, char_attr);
7e819e81117e updated for version 7.0090
vimboss
parents: 336
diff changeset
4604 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4605 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4606 #ifdef FEAT_LINEBREAK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4607 /*
221
7fd4b5df33be updated for version 7.0062
vimboss
parents: 216
diff changeset
4608 * Found last space before word: check for line break.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4609 */
10982
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10928
diff changeset
4610 if (wp->w_p_lbr && c0 == c
11133
d8e830e32be9 patch 8.0.0454: compiler warnings for "always true" comparison
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
4611 && VIM_ISBREAK(c) && !VIM_ISBREAK((int)*ptr))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4612 {
6681
80abb7288d39 updated for version 7.4.665
Bram Moolenaar <bram@vim.org>
parents: 6679
diff changeset
4613 # ifdef FEAT_MBYTE
6693
8faab3792a92 updated for version 7.4.671
Bram Moolenaar <bram@vim.org>
parents: 6689
diff changeset
4614 int mb_off = has_mbyte ? (*mb_head_off)(line, ptr - 1) : 0;
6681
80abb7288d39 updated for version 7.4.665
Bram Moolenaar <bram@vim.org>
parents: 6679
diff changeset
4615 # endif
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
4616 char_u *p = ptr - (
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4617 # ifdef FEAT_MBYTE
6693
8faab3792a92 updated for version 7.4.671
Bram Moolenaar <bram@vim.org>
parents: 6689
diff changeset
4618 mb_off +
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4619 # endif
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
4620 1);
6681
80abb7288d39 updated for version 7.4.665
Bram Moolenaar <bram@vim.org>
parents: 6679
diff changeset
4621
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
4622 /* TODO: is passing p for start of the line OK? */
6026
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4623 n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol,
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
4624 NULL) - 1;
6371
93560d4bca68 updated for version 7.4.517
Bram Moolenaar <bram@vim.org>
parents: 6276
diff changeset
4625 if (c == TAB && n_extra + col > W_WIDTH(wp))
93560d4bca68 updated for version 7.4.517
Bram Moolenaar <bram@vim.org>
parents: 6276
diff changeset
4626 n_extra = (int)wp->w_buffer->b_p_ts
93560d4bca68 updated for version 7.4.517
Bram Moolenaar <bram@vim.org>
parents: 6276
diff changeset
4627 - vcol % (int)wp->w_buffer->b_p_ts - 1;
93560d4bca68 updated for version 7.4.517
Bram Moolenaar <bram@vim.org>
parents: 6276
diff changeset
4628
6681
80abb7288d39 updated for version 7.4.665
Bram Moolenaar <bram@vim.org>
parents: 6679
diff changeset
4629 # ifdef FEAT_MBYTE
6693
8faab3792a92 updated for version 7.4.671
Bram Moolenaar <bram@vim.org>
parents: 6689
diff changeset
4630 c_extra = mb_off > 0 ? MB_FILLER_CHAR : ' ';
6681
80abb7288d39 updated for version 7.4.665
Bram Moolenaar <bram@vim.org>
parents: 6679
diff changeset
4631 # else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4632 c_extra = ' ';
6681
80abb7288d39 updated for version 7.4.665
Bram Moolenaar <bram@vim.org>
parents: 6679
diff changeset
4633 # endif
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
4634 if (VIM_ISWHITE(c))
5174
42d592dbbec3 updated for version 7.4a.013
Bram Moolenaar <bram@vim.org>
parents: 5126
diff changeset
4635 {
42d592dbbec3 updated for version 7.4a.013
Bram Moolenaar <bram@vim.org>
parents: 5126
diff changeset
4636 #ifdef FEAT_CONCEAL
42d592dbbec3 updated for version 7.4a.013
Bram Moolenaar <bram@vim.org>
parents: 5126
diff changeset
4637 if (c == TAB)
42d592dbbec3 updated for version 7.4a.013
Bram Moolenaar <bram@vim.org>
parents: 5126
diff changeset
4638 /* See "Tab alignment" below. */
42d592dbbec3 updated for version 7.4a.013
Bram Moolenaar <bram@vim.org>
parents: 5126
diff changeset
4639 FIX_FOR_BOGUSCOLS;
42d592dbbec3 updated for version 7.4a.013
Bram Moolenaar <bram@vim.org>
parents: 5126
diff changeset
4640 #endif
6026
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4641 if (!wp->w_p_list)
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4642 c = ' ';
5174
42d592dbbec3 updated for version 7.4a.013
Bram Moolenaar <bram@vim.org>
parents: 5126
diff changeset
4643 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4644 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4645 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4646
7344
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4647 /* 'list': change char 160 to lcs_nbsp and space to lcs_space.
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4648 */
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4649 if (wp->w_p_list
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4650 && (((c == 160
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4651 #ifdef FEAT_MBYTE
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4652 || (mb_utf8 && (mb_c == 160 || mb_c == 0x202f))
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4653 #endif
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4654 ) && lcs_nbsp)
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4655 || (c == ' ' && lcs_space && ptr - line <= trailcol)))
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4656 {
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4657 c = (c == ' ') ? lcs_space : lcs_nbsp;
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4658 if (area_attr == 0 && search_attr == 0)
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4659 {
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4660 n_attr = 1;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
4661 extra_attr = HL_ATTR(HLF_8);
7344
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4662 saved_attr2 = char_attr; /* save current attr */
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4663 }
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4664 #ifdef FEAT_MBYTE
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4665 mb_c = c;
11269
121d29004998 patch 8.0.0520: using a function pointer while the function is known
Christian Brabandt <cb@256bit.org>
parents: 11265
diff changeset
4666 if (enc_utf8 && utf_char2len(c) > 1)
7344
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4667 {
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4668 mb_utf8 = TRUE;
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4669 u8cc[0] = 0;
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4670 c = 0xc0;
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4671 }
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4672 else
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4673 mb_utf8 = FALSE;
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4674 #endif
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4675 }
68f2cac6b0db commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Christian Brabandt <cb@256bit.org>
parents: 7287
diff changeset
4676
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4677 if (trailcol != MAXCOL && ptr > line + trailcol && c == ' ')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4678 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4679 c = lcs_trail;
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4680 if (!attr_pri)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4681 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4682 n_attr = 1;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
4683 extra_attr = HL_ATTR(HLF_8);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4684 saved_attr2 = char_attr; /* save current attr */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4685 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4686 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4687 mb_c = c;
11269
121d29004998 patch 8.0.0520: using a function pointer while the function is known
Christian Brabandt <cb@256bit.org>
parents: 11265
diff changeset
4688 if (enc_utf8 && utf_char2len(c) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4689 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4690 mb_utf8 = TRUE;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4691 u8cc[0] = 0;
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
4692 c = 0xc0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4693 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4694 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4695 mb_utf8 = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4696 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4697 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4698 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4699
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4700 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4701 * Handling of non-printable characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4702 */
7697
f04e2b6feea2 commit https://github.com/vim/vim/commit/88e8f9f14434a7cd538d0c159dc432bea869a5bd
Christian Brabandt <cb@256bit.org>
parents: 7603
diff changeset
4703 if (!vim_isprintc(c))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4704 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4705 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4706 * when getting a character from the file, we may have to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4707 * turn it into something else on the way to putting it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4708 * into "ScreenLines".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4709 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4710 if (c == TAB && (!wp->w_p_list || lcs_tab1))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4711 {
6026
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4712 int tab_len = 0;
6503
134a7d55f9fa updated for version 7.4.579
Bram Moolenaar <bram@vim.org>
parents: 6477
diff changeset
4713 long vcol_adjusted = vcol; /* removed showbreak length */
134a7d55f9fa updated for version 7.4.579
Bram Moolenaar <bram@vim.org>
parents: 6477
diff changeset
4714 #ifdef FEAT_LINEBREAK
134a7d55f9fa updated for version 7.4.579
Bram Moolenaar <bram@vim.org>
parents: 6477
diff changeset
4715 /* only adjust the tab_len, when at the first column
134a7d55f9fa updated for version 7.4.579
Bram Moolenaar <bram@vim.org>
parents: 6477
diff changeset
4716 * after the showbreak value was drawn */
134a7d55f9fa updated for version 7.4.579
Bram Moolenaar <bram@vim.org>
parents: 6477
diff changeset
4717 if (*p_sbr != NUL && vcol == vcol_sbr && wp->w_p_wrap)
134a7d55f9fa updated for version 7.4.579
Bram Moolenaar <bram@vim.org>
parents: 6477
diff changeset
4718 vcol_adjusted = vcol - MB_CHARLEN(p_sbr);
134a7d55f9fa updated for version 7.4.579
Bram Moolenaar <bram@vim.org>
parents: 6477
diff changeset
4719 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4720 /* tab amount depends on current column */
6026
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4721 tab_len = (int)wp->w_buffer->b_p_ts
6503
134a7d55f9fa updated for version 7.4.579
Bram Moolenaar <bram@vim.org>
parents: 6477
diff changeset
4722 - vcol_adjusted % (int)wp->w_buffer->b_p_ts - 1;
134a7d55f9fa updated for version 7.4.579
Bram Moolenaar <bram@vim.org>
parents: 6477
diff changeset
4723
6026
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4724 #ifdef FEAT_LINEBREAK
6100
76e7fb736c0e updated for version 7.4.388
Bram Moolenaar <bram@vim.org>
parents: 6064
diff changeset
4725 if (!wp->w_p_lbr || !wp->w_p_list)
6026
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4726 #endif
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4727 /* tab amount depends on current column */
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4728 n_extra = tab_len;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4729 #ifdef FEAT_LINEBREAK
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4730 else
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4731 {
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4732 char_u *p;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4733 int len = n_extra;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4734 int i;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4735 int saved_nextra = n_extra;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4736
6172
69da1498ce89 updated for version 7.4.422
Bram Moolenaar <bram@vim.org>
parents: 6134
diff changeset
4737 #ifdef FEAT_CONCEAL
6627
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4738 if (vcol_off > 0)
6172
69da1498ce89 updated for version 7.4.422
Bram Moolenaar <bram@vim.org>
parents: 6134
diff changeset
4739 /* there are characters to conceal */
69da1498ce89 updated for version 7.4.422
Bram Moolenaar <bram@vim.org>
parents: 6134
diff changeset
4740 tab_len += vcol_off;
6520
70793fedd25a updated for version 7.4.587
Bram Moolenaar <bram@vim.org>
parents: 6503
diff changeset
4741 /* boguscols before FIX_FOR_BOGUSCOLS macro from above
70793fedd25a updated for version 7.4.587
Bram Moolenaar <bram@vim.org>
parents: 6503
diff changeset
4742 */
70793fedd25a updated for version 7.4.587
Bram Moolenaar <bram@vim.org>
parents: 6503
diff changeset
4743 if (wp->w_p_list && lcs_tab1 && old_boguscols > 0
70793fedd25a updated for version 7.4.587
Bram Moolenaar <bram@vim.org>
parents: 6503
diff changeset
4744 && n_extra > tab_len)
70793fedd25a updated for version 7.4.587
Bram Moolenaar <bram@vim.org>
parents: 6503
diff changeset
4745 tab_len += n_extra - tab_len;
70793fedd25a updated for version 7.4.587
Bram Moolenaar <bram@vim.org>
parents: 6503
diff changeset
4746 #endif
70793fedd25a updated for version 7.4.587
Bram Moolenaar <bram@vim.org>
parents: 6503
diff changeset
4747
6026
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4748 /* if n_extra > 0, it gives the number of chars, to
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4749 * use for a tab, else we need to calculate the width
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4750 * for a tab */
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4751 #ifdef FEAT_MBYTE
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4752 len = (tab_len * mb_char2len(lcs_tab2));
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4753 if (n_extra > 0)
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4754 len += n_extra - tab_len;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4755 #endif
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4756 c = lcs_tab1;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4757 p = alloc((unsigned)(len + 1));
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4758 vim_memset(p, ' ', len);
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4759 p[len] = NUL;
10690
206ab11fa76e patch 8.0.0235: memory leak in diff mode
Christian Brabandt <cb@256bit.org>
parents: 10538
diff changeset
4760 vim_free(p_extra_free);
6026
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4761 p_extra_free = p;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4762 for (i = 0; i < tab_len; i++)
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4763 {
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4764 #ifdef FEAT_MBYTE
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4765 mb_char2bytes(lcs_tab2, p);
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4766 p += mb_char2len(lcs_tab2);
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4767 n_extra += mb_char2len(lcs_tab2)
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4768 - (saved_nextra > 0 ? 1 : 0);
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4769 #else
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4770 p[i] = lcs_tab2;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4771 #endif
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4772 }
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4773 p_extra = p_extra_free;
6172
69da1498ce89 updated for version 7.4.422
Bram Moolenaar <bram@vim.org>
parents: 6134
diff changeset
4774 #ifdef FEAT_CONCEAL
69da1498ce89 updated for version 7.4.422
Bram Moolenaar <bram@vim.org>
parents: 6134
diff changeset
4775 /* n_extra will be increased by FIX_FOX_BOGUSCOLS
69da1498ce89 updated for version 7.4.422
Bram Moolenaar <bram@vim.org>
parents: 6134
diff changeset
4776 * macro below, so need to adjust for that here */
6627
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4777 if (vcol_off > 0)
6172
69da1498ce89 updated for version 7.4.422
Bram Moolenaar <bram@vim.org>
parents: 6134
diff changeset
4778 n_extra -= vcol_off;
69da1498ce89 updated for version 7.4.422
Bram Moolenaar <bram@vim.org>
parents: 6134
diff changeset
4779 #endif
6026
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4780 }
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4781 #endif
3984
cd59ba19985a updated for version 7.3.747
Bram Moolenaar <bram@vim.org>
parents: 3839
diff changeset
4782 #ifdef FEAT_CONCEAL
6627
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4783 {
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4784 int vc_saved = vcol_off;
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4785
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4786 /* Tab alignment should be identical regardless of
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4787 * 'conceallevel' value. So tab compensates of all
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4788 * previous concealed characters, and thus resets
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4789 * vcol_off and boguscols accumulated so far in the
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4790 * line. Note that the tab can be longer than
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4791 * 'tabstop' when there are concealed characters. */
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4792 FIX_FOR_BOGUSCOLS;
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4793
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4794 /* Make sure, the highlighting for the tab char will be
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4795 * correctly set further below (effectively reverts the
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4796 * FIX_FOR_BOGSUCOLS macro */
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4797 if (n_extra == tab_len + vc_saved && wp->w_p_list
6520
70793fedd25a updated for version 7.4.587
Bram Moolenaar <bram@vim.org>
parents: 6503
diff changeset
4798 && lcs_tab1)
6627
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4799 tab_len += vc_saved;
43f444efe6a2 updated for version 7.4.639
Bram Moolenaar <bram@vim.org>
parents: 6602
diff changeset
4800 }
3984
cd59ba19985a updated for version 7.3.747
Bram Moolenaar <bram@vim.org>
parents: 3839
diff changeset
4801 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4802 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4803 mb_utf8 = FALSE; /* don't draw as UTF-8 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4804 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4805 if (wp->w_p_list)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4806 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4807 c = lcs_tab1;
6026
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4808 #ifdef FEAT_LINEBREAK
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4809 if (wp->w_p_lbr)
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4810 c_extra = NUL; /* using p_extra from above */
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4811 else
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4812 #endif
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4813 c_extra = lcs_tab2;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4814 n_attr = tab_len + 1;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
4815 extra_attr = HL_ATTR(HLF_8);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4816 saved_attr2 = char_attr; /* save current attr */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4817 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4818 mb_c = c;
11269
121d29004998 patch 8.0.0520: using a function pointer while the function is known
Christian Brabandt <cb@256bit.org>
parents: 11265
diff changeset
4819 if (enc_utf8 && utf_char2len(c) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4820 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4821 mb_utf8 = TRUE;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4822 u8cc[0] = 0;
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
4823 c = 0xc0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4824 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4825 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4826 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4827 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4828 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4829 c_extra = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4830 c = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4831 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4832 }
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4833 else if (c == NUL
6799
45d3208c8754 patch 7.4.721
Bram Moolenaar <bram@vim.org>
parents: 6795
diff changeset
4834 && (wp->w_p_list
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4835 || ((fromcol >= 0 || fromcol_prev >= 0)
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4836 && tocol > vcol
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4837 && VIsual_mode != Ctrl_V
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4838 && (
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4839 # ifdef FEAT_RIGHTLEFT
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4840 wp->w_p_rl ? (col >= 0) :
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4841 # endif
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4842 (col < W_WIDTH(wp)))
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4843 && !(noinvcur
1850
eaecfa88c246 updated for version 7.2-148
vimboss
parents: 1849
diff changeset
4844 && lnum == wp->w_cursor.lnum
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4845 && (colnr_T)vcol == wp->w_virtcol)))
6815
f0e7dc5e7282 patch 7.4.729
Bram Moolenaar <bram@vim.org>
parents: 6801
diff changeset
4846 && lcs_eol_one > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4847 {
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4848 /* Display a '$' after the line or highlight an extra
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4849 * character if the line break is included. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4850 #if defined(FEAT_DIFF) || defined(LINE_ATTR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4851 /* For a diff line the highlighting continues after the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4852 * "$". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4853 if (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4854 # ifdef FEAT_DIFF
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
4855 diff_hlf == (hlf_T)0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4856 # ifdef LINE_ATTR
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4857 &&
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4858 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4859 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4860 # ifdef LINE_ATTR
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4861 line_attr == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4862 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4863 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4864 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4865 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4866 #ifdef FEAT_VIRTUALEDIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4867 /* In virtualedit, visual selections may extend
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4868 * beyond end of line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4869 if (area_highlighting && virtual_active()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4870 && tocol != MAXCOL && vcol < tocol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4871 n_extra = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4872 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4873 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4874 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4875 p_extra = at_end_str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4876 n_extra = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4877 c_extra = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4878 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4879 }
6799
45d3208c8754 patch 7.4.721
Bram Moolenaar <bram@vim.org>
parents: 6795
diff changeset
4880 if (wp->w_p_list && lcs_eol > 0)
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4881 c = lcs_eol;
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4882 else
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
4883 c = ' ';
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4884 lcs_eol_one = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4885 --ptr; /* put it back at the NUL */
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4886 if (!attr_pri)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4887 {
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
4888 extra_attr = HL_ATTR(HLF_AT);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4889 n_attr = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4890 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4891 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4892 mb_c = c;
11269
121d29004998 patch 8.0.0520: using a function pointer while the function is known
Christian Brabandt <cb@256bit.org>
parents: 11265
diff changeset
4893 if (enc_utf8 && utf_char2len(c) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4894 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4895 mb_utf8 = TRUE;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
4896 u8cc[0] = 0;
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
4897 c = 0xc0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4898 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4899 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4900 mb_utf8 = FALSE; /* don't draw as UTF-8 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4901 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4902 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4903 else if (c != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4904 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4905 p_extra = transchar(c);
6064
d44f298c43c7 updated for version 7.4.371
Bram Moolenaar <bram@vim.org>
parents: 6045
diff changeset
4906 if (n_extra == 0)
d44f298c43c7 updated for version 7.4.371
Bram Moolenaar <bram@vim.org>
parents: 6045
diff changeset
4907 n_extra = byte2cells(c) - 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4908 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4909 if ((dy_flags & DY_UHEX) && wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4910 rl_mirror(p_extra); /* reverse "<12>" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4911 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4912 c_extra = NUL;
6026
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4913 #ifdef FEAT_LINEBREAK
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4914 if (wp->w_p_lbr)
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4915 {
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4916 char_u *p;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4917
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4918 c = *p_extra;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4919 p = alloc((unsigned)n_extra + 1);
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4920 vim_memset(p, ' ', n_extra);
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4921 STRNCPY(p, p_extra + 1, STRLEN(p_extra) - 1);
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4922 p[n_extra] = NUL;
10690
206ab11fa76e patch 8.0.0235: memory leak in diff mode
Christian Brabandt <cb@256bit.org>
parents: 10538
diff changeset
4923 vim_free(p_extra_free);
6026
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4924 p_extra_free = p_extra = p;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4925 }
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4926 else
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4927 #endif
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4928 {
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4929 n_extra = byte2cells(c) - 1;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4930 c = *p_extra++;
d42a1d3b74d4 updated for version 7.4.353
Bram Moolenaar <bram@vim.org>
parents: 6018
diff changeset
4931 }
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
4932 if (!attr_pri)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4933 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4934 n_attr = n_extra + 1;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
4935 extra_attr = HL_ATTR(HLF_8);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4936 saved_attr2 = char_attr; /* save current attr */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4937 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4938 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4939 mb_utf8 = FALSE; /* don't draw as UTF-8 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4940 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4941 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4942 #ifdef FEAT_VIRTUALEDIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4943 else if (VIsual_active
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4944 && (VIsual_mode == Ctrl_V
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4945 || VIsual_mode == 'v')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4946 && virtual_active()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4947 && tocol != MAXCOL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4948 && vcol < tocol
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4949 && (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4950 # ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4951 wp->w_p_rl ? (col >= 0) :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4952 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4953 (col < W_WIDTH(wp))))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4954 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4955 c = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4956 --ptr; /* put it back at the NUL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4957 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4958 #endif
910
abff2f6a3ad7 updated for version 7.0-036
vimboss
parents: 867
diff changeset
4959 #if defined(LINE_ATTR)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4960 else if ((
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4961 # ifdef FEAT_DIFF
910
abff2f6a3ad7 updated for version 7.0-036
vimboss
parents: 867
diff changeset
4962 diff_hlf != (hlf_T)0 ||
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4963 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4964 line_attr != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4965 ) && (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4966 # ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4967 wp->w_p_rl ? (col >= 0) :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4968 # endif
2553
37d3f90f5203 Conceal feature caused the 'cursorline' highlighting to stop early.
Bram Moolenaar <bram@vim.org>
parents: 2520
diff changeset
4969 (col
37d3f90f5203 Conceal feature caused the 'cursorline' highlighting to stop early.
Bram Moolenaar <bram@vim.org>
parents: 2520
diff changeset
4970 # ifdef FEAT_CONCEAL
37d3f90f5203 Conceal feature caused the 'cursorline' highlighting to stop early.
Bram Moolenaar <bram@vim.org>
parents: 2520
diff changeset
4971 - boguscols
37d3f90f5203 Conceal feature caused the 'cursorline' highlighting to stop early.
Bram Moolenaar <bram@vim.org>
parents: 2520
diff changeset
4972 # endif
37d3f90f5203 Conceal feature caused the 'cursorline' highlighting to stop early.
Bram Moolenaar <bram@vim.org>
parents: 2520
diff changeset
4973 < W_WIDTH(wp))))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4974 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4975 /* Highlight until the right side of the window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4976 c = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4977 --ptr; /* put it back at the NUL */
867
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
4978
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
4979 /* Remember we do the char for line highlighting. */
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
4980 ++did_line_attr;
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
4981
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
4982 /* don't do search HL for the rest of the line */
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
4983 if (line_attr != 0 && char_attr == search_attr && col > 0)
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
4984 char_attr = line_attr;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4985 # ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4986 if (diff_hlf == HLF_TXD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4987 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4988 diff_hlf = HLF_CHD;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4989 if (attr == 0 || char_attr != attr)
6106
f051e50a6a5f updated for version 7.4.391
Bram Moolenaar <bram@vim.org>
parents: 6100
diff changeset
4990 {
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
4991 char_attr = HL_ATTR(diff_hlf);
6106
f051e50a6a5f updated for version 7.4.391
Bram Moolenaar <bram@vim.org>
parents: 6100
diff changeset
4992 if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
f051e50a6a5f updated for version 7.4.391
Bram Moolenaar <bram@vim.org>
parents: 6100
diff changeset
4993 char_attr = hl_combine_attr(char_attr,
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
4994 HL_ATTR(HLF_CUL));
6106
f051e50a6a5f updated for version 7.4.391
Bram Moolenaar <bram@vim.org>
parents: 6100
diff changeset
4995 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4996 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4997 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4998 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4999 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5000 }
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5001
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5002 #ifdef FEAT_CONCEAL
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
5003 if ( wp->w_p_cole > 0
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
5004 && (wp != curwin || lnum != wp->w_cursor.lnum ||
6947
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
5005 conceal_cursor_line(wp) )
8907
5deb9e8f4292 commit https://github.com/vim/vim/commit/4d585022023b96f6507e8cae5ed8fc8d926f5140
Christian Brabandt <cb@256bit.org>
parents: 8872
diff changeset
5006 && ( (syntax_flags & HL_CONCEAL) != 0 || has_match_conc > 0)
2400
e6f1424dd66a Let 'v' flag in 'concealcursor' apply to all lines in the Visual area.
Bram Moolenaar <bram@vim.org>
parents: 2393
diff changeset
5007 && !(lnum_in_visual_area
e6f1424dd66a Let 'v' flag in 'concealcursor' apply to all lines in the Visual area.
Bram Moolenaar <bram@vim.org>
parents: 2393
diff changeset
5008 && vim_strchr(wp->w_p_cocu, 'v') == NULL))
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5009 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5010 char_attr = conceal_attr;
8907
5deb9e8f4292 commit https://github.com/vim/vim/commit/4d585022023b96f6507e8cae5ed8fc8d926f5140
Christian Brabandt <cb@256bit.org>
parents: 8872
diff changeset
5011 if ((prev_syntax_id != syntax_seqnr || has_match_conc > 1)
6947
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
5012 && (syn_get_sub_char() != NUL || match_conc
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
5013 || wp->w_p_cole == 1)
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
5014 && wp->w_p_cole != 3)
2375
a96dd77ce213 For conceal mode: when two different syntax items follow each other, show the
Bram Moolenaar <bram@vim.org>
parents: 2364
diff changeset
5015 {
a96dd77ce213 For conceal mode: when two different syntax items follow each other, show the
Bram Moolenaar <bram@vim.org>
parents: 2364
diff changeset
5016 /* First time at this concealed item: display one
a96dd77ce213 For conceal mode: when two different syntax items follow each other, show the
Bram Moolenaar <bram@vim.org>
parents: 2364
diff changeset
5017 * character. */
6947
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
5018 if (match_conc)
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
5019 c = match_conc;
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
5020 else if (syn_get_sub_char() != NUL)
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5021 c = syn_get_sub_char();
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5022 else if (lcs_conceal != NUL)
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5023 c = lcs_conceal;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5024 else
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5025 c = ' ';
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5026
2392
0371401d9d33 Give each syntax item a sequence number, so that we know when it starts and
Bram Moolenaar <bram@vim.org>
parents: 2382
diff changeset
5027 prev_syntax_id = syntax_seqnr;
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5028
2332
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5029 if (n_extra > 0)
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5030 vcol_off += n_extra;
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5031 vcol += n_extra;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5032 if (wp->w_p_wrap && n_extra > 0)
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5033 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5034 # ifdef FEAT_RIGHTLEFT
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5035 if (wp->w_p_rl)
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5036 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5037 col -= n_extra;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5038 boguscols -= n_extra;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5039 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5040 else
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5041 # endif
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5042 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5043 boguscols += n_extra;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5044 col += n_extra;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5045 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5046 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5047 n_extra = 0;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5048 n_attr = 0;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5049 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5050 else if (n_skip == 0)
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5051 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5052 is_concealing = TRUE;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5053 n_skip = 1;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5054 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5055 # ifdef FEAT_MBYTE
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5056 mb_c = c;
11269
121d29004998 patch 8.0.0520: using a function pointer while the function is known
Christian Brabandt <cb@256bit.org>
parents: 11265
diff changeset
5057 if (enc_utf8 && utf_char2len(c) > 1)
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5058 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5059 mb_utf8 = TRUE;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5060 u8cc[0] = 0;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5061 c = 0xc0;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5062 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5063 else
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5064 mb_utf8 = FALSE; /* don't draw as UTF-8 */
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5065 # endif
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5066 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5067 else
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5068 {
2375
a96dd77ce213 For conceal mode: when two different syntax items follow each other, show the
Bram Moolenaar <bram@vim.org>
parents: 2364
diff changeset
5069 prev_syntax_id = 0;
2348
8878a9f8db87 Rename w_p_conceal to w_p_conc for consistency.
Bram Moolenaar <bram@vim.org>
parents: 2346
diff changeset
5070 is_concealing = FALSE;
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5071 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5072 #endif /* FEAT_CONCEAL */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5073 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5074
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
5075 #ifdef FEAT_CONCEAL
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
5076 /* In the cursor line and we may be concealing characters: correct
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
5077 * the cursor column when we reach its position. */
2381
17bbb52ae218 Another conceal fix: cursor in wrong column when 'number' set.
Bram Moolenaar <bram@vim.org>
parents: 2380
diff changeset
5078 if (!did_wcol && draw_state == WL_LINE
17bbb52ae218 Another conceal fix: cursor in wrong column when 'number' set.
Bram Moolenaar <bram@vim.org>
parents: 2380
diff changeset
5079 && wp == curwin && lnum == wp->w_cursor.lnum
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
5080 && conceal_cursor_line(wp)
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
5081 && (int)wp->w_virtcol <= vcol + n_skip)
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
5082 {
7603
d3892f6c917e commit https://github.com/vim/vim/commit/e39b3d9fb4e4006684c33847d1ef6a0d742699dd
Christian Brabandt <cb@256bit.org>
parents: 7344
diff changeset
5083 # ifdef FEAT_RIGHTLEFT
d3892f6c917e commit https://github.com/vim/vim/commit/e39b3d9fb4e4006684c33847d1ef6a0d742699dd
Christian Brabandt <cb@256bit.org>
parents: 7344
diff changeset
5084 if (wp->w_p_rl)
d3892f6c917e commit https://github.com/vim/vim/commit/e39b3d9fb4e4006684c33847d1ef6a0d742699dd
Christian Brabandt <cb@256bit.org>
parents: 7344
diff changeset
5085 wp->w_wcol = W_WIDTH(wp) - col + boguscols - 1;
d3892f6c917e commit https://github.com/vim/vim/commit/e39b3d9fb4e4006684c33847d1ef6a0d742699dd
Christian Brabandt <cb@256bit.org>
parents: 7344
diff changeset
5086 else
d3892f6c917e commit https://github.com/vim/vim/commit/e39b3d9fb4e4006684c33847d1ef6a0d742699dd
Christian Brabandt <cb@256bit.org>
parents: 7344
diff changeset
5087 # endif
d3892f6c917e commit https://github.com/vim/vim/commit/e39b3d9fb4e4006684c33847d1ef6a0d742699dd
Christian Brabandt <cb@256bit.org>
parents: 7344
diff changeset
5088 wp->w_wcol = col - boguscols;
2393
210a5605e126 Fix for cursor position in wrapped line with concealed text.
Bram Moolenaar <bram@vim.org>
parents: 2392
diff changeset
5089 wp->w_wrow = row;
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
5090 did_wcol = TRUE;
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
5091 }
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
5092 #endif
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
5093
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5094 /* Don't override visual selection highlighting. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5095 if (n_attr > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5096 && draw_state == WL_LINE
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
5097 && !attr_pri)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5098 char_attr = extra_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5099
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 40
diff changeset
5100 #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5101 /* XIM don't send preedit_start and preedit_end, but they send
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5102 * preedit_changed and commit. Thus Vim can't set "im_is_active", use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5103 * im_is_preediting() here. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5104 if (xic != NULL
1850
eaecfa88c246 updated for version 7.2-148
vimboss
parents: 1849
diff changeset
5105 && lnum == wp->w_cursor.lnum
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5106 && (State & INSERT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5107 && !p_imdisable
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5108 && im_is_preediting()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5109 && draw_state == WL_LINE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5110 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5111 colnr_T tcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5112
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5113 if (preedit_end_col == MAXCOL)
1850
eaecfa88c246 updated for version 7.2-148
vimboss
parents: 1849
diff changeset
5114 getvcol(curwin, &(wp->w_cursor), &tcol, NULL, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5115 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5116 tcol = preedit_end_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5117 if ((long)preedit_start_col <= vcol && vcol < (long)tcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5118 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5119 if (feedback_old_attr < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5120 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5121 feedback_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5122 feedback_old_attr = char_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5123 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5124 char_attr = im_get_feedback_attr(feedback_col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5125 if (char_attr < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5126 char_attr = feedback_old_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5127 feedback_col++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5128 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5129 else if (feedback_old_attr >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5130 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5131 char_attr = feedback_old_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5132 feedback_old_attr = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5133 feedback_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5134 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5135 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5136 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5137 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5138 * Handle the case where we are in column 0 but not on the first
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5139 * character of the line and the user wants us to show us a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5140 * special character (via 'listchars' option "precedes:<char>".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5141 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5142 if (lcs_prec_todo != NUL
6276
af998690a884 updated for version 7.4.472
Bram Moolenaar <bram@vim.org>
parents: 6266
diff changeset
5143 && wp->w_p_list
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5144 && (wp->w_p_wrap ? wp->w_skipcol > 0 : wp->w_leftcol > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5145 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5146 && filler_todo <= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5147 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5148 && draw_state > WL_NR
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5149 && c != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5150 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5151 c = lcs_prec;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5152 lcs_prec_todo = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5153 #ifdef FEAT_MBYTE
3586
583e46e4a56c updated for version 7.3.553
Bram Moolenaar <bram@vim.org>
parents: 3572
diff changeset
5154 if (has_mbyte && (*mb_char2cells)(mb_c) > 1)
583e46e4a56c updated for version 7.3.553
Bram Moolenaar <bram@vim.org>
parents: 3572
diff changeset
5155 {
583e46e4a56c updated for version 7.3.553
Bram Moolenaar <bram@vim.org>
parents: 3572
diff changeset
5156 /* Double-width character being overwritten by the "precedes"
583e46e4a56c updated for version 7.3.553
Bram Moolenaar <bram@vim.org>
parents: 3572
diff changeset
5157 * character, need to fill up half the character. */
583e46e4a56c updated for version 7.3.553
Bram Moolenaar <bram@vim.org>
parents: 3572
diff changeset
5158 c_extra = MB_FILLER_CHAR;
583e46e4a56c updated for version 7.3.553
Bram Moolenaar <bram@vim.org>
parents: 3572
diff changeset
5159 n_extra = 1;
583e46e4a56c updated for version 7.3.553
Bram Moolenaar <bram@vim.org>
parents: 3572
diff changeset
5160 n_attr = 2;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
5161 extra_attr = HL_ATTR(HLF_AT);
3586
583e46e4a56c updated for version 7.3.553
Bram Moolenaar <bram@vim.org>
parents: 3572
diff changeset
5162 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5163 mb_c = c;
11269
121d29004998 patch 8.0.0520: using a function pointer while the function is known
Christian Brabandt <cb@256bit.org>
parents: 11265
diff changeset
5164 if (enc_utf8 && utf_char2len(c) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5165 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5166 mb_utf8 = TRUE;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5167 u8cc[0] = 0;
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
5168 c = 0xc0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5169 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5170 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5171 mb_utf8 = FALSE; /* don't draw as UTF-8 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5172 #endif
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 673
diff changeset
5173 if (!attr_pri)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5174 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5175 saved_attr3 = char_attr; /* save current attr */
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
5176 char_attr = HL_ATTR(HLF_AT); /* later copied to char_attr */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5177 n_attr3 = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5178 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5179 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5180
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5181 /*
867
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5182 * At end of the text line or just after the last character.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5183 */
867
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5184 if (c == NUL
910
abff2f6a3ad7 updated for version 7.0-036
vimboss
parents: 867
diff changeset
5185 #if defined(LINE_ATTR)
867
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5186 || did_line_attr == 1
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5187 #endif
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5188 )
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5189 {
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5190 #ifdef FEAT_SEARCH_EXTRA
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5191 long prevcol = (long)(ptr - line) - (c == NUL);
1437
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5192
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5193 /* we're not really at that column when skipping some text */
1439
a5b3a7fb6a5a updated for version 7.1-154
vimboss
parents: 1437
diff changeset
5194 if ((long)(wp->w_p_wrap ? wp->w_skipcol : wp->w_leftcol) > prevcol)
1437
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5195 ++prevcol;
867
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5196 #endif
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5197
2332
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5198 /* Invert at least one char, used for Visual and empty line or
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5199 * highlight match at end of line. If it's beyond the last
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5200 * char on the screen, just overwrite that one (tricky!) Not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5201 * needed when a '$' was displayed for 'list'. */
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5202 #ifdef FEAT_SEARCH_EXTRA
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5203 prevcol_hl_flag = FALSE;
9885
4e8b05fa12c6 commit https://github.com/vim/vim/commit/4f416e41243ca151b95d39d81ce23d00b1484755
Christian Brabandt <cb@256bit.org>
parents: 9877
diff changeset
5204 if (!search_hl.is_addpos && prevcol == (long)search_hl.startcol)
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5205 prevcol_hl_flag = TRUE;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5206 else
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5207 {
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5208 cur = wp->w_match_head;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5209 while (cur != NULL)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5210 {
9885
4e8b05fa12c6 commit https://github.com/vim/vim/commit/4f416e41243ca151b95d39d81ce23d00b1484755
Christian Brabandt <cb@256bit.org>
parents: 9877
diff changeset
5211 if (!cur->hl.is_addpos && prevcol == (long)cur->hl.startcol)
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5212 {
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5213 prevcol_hl_flag = TRUE;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5214 break;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5215 }
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5216 cur = cur->next;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5217 }
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5218 }
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5219 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5220 if (lcs_eol == lcs_eol_one
1850
eaecfa88c246 updated for version 7.2-148
vimboss
parents: 1849
diff changeset
5221 && ((area_attr != 0 && vcol == fromcol
eaecfa88c246 updated for version 7.2-148
vimboss
parents: 1849
diff changeset
5222 && (VIsual_mode != Ctrl_V
eaecfa88c246 updated for version 7.2-148
vimboss
parents: 1849
diff changeset
5223 || lnum == VIsual.lnum
eaecfa88c246 updated for version 7.2-148
vimboss
parents: 1849
diff changeset
5224 || lnum == curwin->w_cursor.lnum)
eaecfa88c246 updated for version 7.2-148
vimboss
parents: 1849
diff changeset
5225 && c == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5226 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5227 /* highlight 'hlsearch' match at end of line */
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5228 || (prevcol_hl_flag == TRUE
910
abff2f6a3ad7 updated for version 7.0-036
vimboss
parents: 867
diff changeset
5229 # if defined(LINE_ATTR)
867
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5230 && did_line_attr <= 1
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5231 # endif
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5232 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5233 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5234 ))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5235 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5236 int n = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5237
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5238 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5239 if (wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5240 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5241 if (col < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5242 n = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5243 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5244 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5245 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5246 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5247 if (col >= W_WIDTH(wp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5248 n = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5249 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5250 if (n != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5251 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5252 /* At the window boundary, highlight the last character
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5253 * instead (better than nothing). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5254 off += n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5255 col += n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5256 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5257 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5258 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5259 /* Add a blank character to highlight. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5260 ScreenLines[off] = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5261 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5262 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5263 ScreenLinesUC[off] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5264 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5265 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5266 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5267 if (area_attr == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5268 {
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5269 /* Use attributes from match with highest priority among
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5270 * 'search_hl' and the match list. */
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5271 char_attr = search_hl.attr;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5272 cur = wp->w_match_head;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5273 shl_flag = FALSE;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5274 while (cur != NULL || shl_flag == FALSE)
699
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
5275 {
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5276 if (shl_flag == FALSE
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5277 && ((cur != NULL
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5278 && cur->priority > SEARCH_HL_PRIORITY)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5279 || cur == NULL))
699
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
5280 {
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5281 shl = &search_hl;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5282 shl_flag = TRUE;
699
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
5283 }
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5284 else
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5285 shl = &cur->hl;
9885
4e8b05fa12c6 commit https://github.com/vim/vim/commit/4f416e41243ca151b95d39d81ce23d00b1484755
Christian Brabandt <cb@256bit.org>
parents: 9877
diff changeset
5286 if ((ptr - line) - 1 == (long)shl->startcol
4e8b05fa12c6 commit https://github.com/vim/vim/commit/4f416e41243ca151b95d39d81ce23d00b1484755
Christian Brabandt <cb@256bit.org>
parents: 9877
diff changeset
5287 && (shl == &search_hl || !shl->is_addpos))
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5288 char_attr = shl->attr;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5289 if (shl != &search_hl && cur != NULL)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5290 cur = cur->next;
699
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
5291 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5292 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5293 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5294 ScreenAttrs[off] = char_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5295 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5296 if (wp->w_p_rl)
1437
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5297 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5298 --col;
1437
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5299 --off;
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5300 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5301 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5302 #endif
1437
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5303 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5304 ++col;
1437
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5305 ++off;
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5306 }
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5307 ++vcol;
1437
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5308 #ifdef FEAT_SYN_HL
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5309 eol_hl_off = 1;
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5310 #endif
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5311 }
867
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5312 }
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5313
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5314 /*
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5315 * At end of the text line.
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5316 */
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5317 if (c == NUL)
a5677b7ce858 updated for version 7.0g04
vimboss
parents: 856
diff changeset
5318 {
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5319 #ifdef FEAT_SYN_HL
1850
eaecfa88c246 updated for version 7.2-148
vimboss
parents: 1849
diff changeset
5320 if (eol_hl_off > 0 && vcol - eol_hl_off == (long)wp->w_virtcol
eaecfa88c246 updated for version 7.2-148
vimboss
parents: 1849
diff changeset
5321 && lnum == wp->w_cursor.lnum)
1437
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5322 {
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5323 /* highlight last char after line */
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5324 --col;
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5325 --off;
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5326 --vcol;
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5327 }
8b2e9257cc11 updated for version 7.1-152
vimboss
parents: 1401
diff changeset
5328
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5329 /* Highlight 'cursorcolumn' & 'colorcolumn' past end of the line. */
758
d591d4ceeaee updated for version 7.0224
vimboss
parents: 743
diff changeset
5330 if (wp->w_p_wrap)
d591d4ceeaee updated for version 7.0224
vimboss
parents: 743
diff changeset
5331 v = wp->w_skipcol;
d591d4ceeaee updated for version 7.0224
vimboss
parents: 743
diff changeset
5332 else
d591d4ceeaee updated for version 7.0224
vimboss
parents: 743
diff changeset
5333 v = wp->w_leftcol;
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5334
820
57c7403f6599 updated for version 7.0c11
vimboss
parents: 819
diff changeset
5335 /* check if line ends before left margin */
57c7403f6599 updated for version 7.0c11
vimboss
parents: 819
diff changeset
5336 if (vcol < v + col - win_col_off(wp))
57c7403f6599 updated for version 7.0c11
vimboss
parents: 819
diff changeset
5337 vcol = v + col - win_col_off(wp);
2332
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5338 #ifdef FEAT_CONCEAL
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5339 /* Get rid of the boguscols now, we want to draw until the right
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5340 * edge for 'cursorcolumn'. */
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5341 col -= boguscols;
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5342 boguscols = 0;
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5343 #endif
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5344
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5345 if (draw_color_col)
2332
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5346 draw_color_col = advance_color_col(VCOL_HLC, &color_cols);
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5347
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5348 if (((wp->w_p_cuc
2332
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5349 && (int)wp->w_virtcol >= VCOL_HLC - eol_hl_off
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5350 && (int)wp->w_virtcol <
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5351 W_WIDTH(wp) * (row - startrow + 1) + v
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5352 && lnum != wp->w_cursor.lnum)
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5353 || draw_color_col)
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5354 # ifdef FEAT_RIGHTLEFT
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5355 && !wp->w_p_rl
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5356 # endif
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5357 )
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5358 {
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5359 int rightmost_vcol = 0;
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5360 int i;
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5361
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5362 if (wp->w_p_cuc)
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5363 rightmost_vcol = wp->w_virtcol;
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5364 if (draw_color_col)
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5365 /* determine rightmost colorcolumn to possibly draw */
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5366 for (i = 0; color_cols[i] >= 0; ++i)
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5367 if (rightmost_vcol < color_cols[i])
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5368 rightmost_vcol = color_cols[i];
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5369
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5370 while (col < W_WIDTH(wp))
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5371 {
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5372 ScreenLines[off] = ' ';
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5373 #ifdef FEAT_MBYTE
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5374 if (enc_utf8)
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5375 ScreenLinesUC[off] = 0;
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5376 #endif
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5377 ++col;
2356
eb1f2554cac5 Fix 'colorcolumn' adjecent columns not highlighted after end of line.
Bram Moolenaar <bram@vim.org>
parents: 2349
diff changeset
5378 if (draw_color_col)
eb1f2554cac5 Fix 'colorcolumn' adjecent columns not highlighted after end of line.
Bram Moolenaar <bram@vim.org>
parents: 2349
diff changeset
5379 draw_color_col = advance_color_col(VCOL_HLC,
eb1f2554cac5 Fix 'colorcolumn' adjecent columns not highlighted after end of line.
Bram Moolenaar <bram@vim.org>
parents: 2349
diff changeset
5380 &color_cols);
eb1f2554cac5 Fix 'colorcolumn' adjecent columns not highlighted after end of line.
Bram Moolenaar <bram@vim.org>
parents: 2349
diff changeset
5381
2332
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5382 if (wp->w_p_cuc && VCOL_HLC == (long)wp->w_virtcol)
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
5383 ScreenAttrs[off++] = HL_ATTR(HLF_CUC);
2332
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5384 else if (draw_color_col && VCOL_HLC == *color_cols)
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
5385 ScreenAttrs[off++] = HL_ATTR(HLF_MC);
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5386 else
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5387 ScreenAttrs[off++] = 0;
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5388
2332
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5389 if (VCOL_HLC >= rightmost_vcol)
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5390 break;
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5391
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5392 ++vcol;
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5393 }
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5394 }
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5395 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5396
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5397 SCREEN_LINE(screen_row, W_WINCOL(wp), col,
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5398 (int)W_WIDTH(wp), wp->w_p_rl);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5399 row++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5400
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5401 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5402 * Update w_cline_height and w_cline_folded if the cursor line was
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5403 * updated (saves a call to plines() later).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5404 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5405 if (wp == curwin && lnum == curwin->w_cursor.lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5406 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5407 curwin->w_cline_row = startrow;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5408 curwin->w_cline_height = row - startrow;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5409 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5410 curwin->w_cline_folded = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5411 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5412 curwin->w_valid |= (VALID_CHEIGHT|VALID_CROW);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5413 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5414
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5415 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5416 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5417
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5418 /* line continues beyond line end */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5419 if (lcs_ext
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5420 && !wp->w_p_wrap
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5421 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5422 && filler_todo <= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5423 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5424 && (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5425 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5426 wp->w_p_rl ? col == 0 :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5427 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5428 col == W_WIDTH(wp) - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5429 && (*ptr != NUL
1555
71db8539b8c4 updated for version 7.1-268
vimboss
parents: 1545
diff changeset
5430 || (wp->w_p_list && lcs_eol_one > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5431 || (n_extra && (c_extra != NUL || *p_extra != NUL))))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5432 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5433 c = lcs_ext;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
5434 char_attr = HL_ATTR(HLF_AT);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5435 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5436 mb_c = c;
11269
121d29004998 patch 8.0.0520: using a function pointer while the function is known
Christian Brabandt <cb@256bit.org>
parents: 11265
diff changeset
5437 if (enc_utf8 && utf_char2len(c) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5438 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5439 mb_utf8 = TRUE;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5440 u8cc[0] = 0;
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
5441 c = 0xc0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5442 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5443 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5444 mb_utf8 = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5445 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5446 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5447
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5448 #ifdef FEAT_SYN_HL
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5449 /* advance to the next 'colorcolumn' */
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5450 if (draw_color_col)
2332
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5451 draw_color_col = advance_color_col(VCOL_HLC, &color_cols);
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5452
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5453 /* Highlight the cursor column if 'cursorcolumn' is set. But don't
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5454 * highlight the cursor position itself.
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5455 * Also highlight the 'colorcolumn' if it is different than
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5456 * 'cursorcolumn' */
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5457 vcol_save_attr = -1;
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5458 if (draw_state == WL_LINE && !lnum_in_visual_area)
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5459 {
2332
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5460 if (wp->w_p_cuc && VCOL_HLC == (long)wp->w_virtcol
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5461 && lnum != wp->w_cursor.lnum)
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5462 {
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5463 vcol_save_attr = char_attr;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
5464 char_attr = hl_combine_attr(char_attr, HL_ATTR(HLF_CUC));
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5465 }
2346
b38c324bdc36 Fix: 'colorcolumn' interfered with concealed text.
Bram Moolenaar <bram@vim.org>
parents: 2338
diff changeset
5466 else if (draw_color_col && VCOL_HLC == *color_cols)
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5467 {
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5468 vcol_save_attr = char_attr;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
5469 char_attr = hl_combine_attr(char_attr, HL_ATTR(HLF_MC));
2314
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5470 }
233eb4412f5d Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
Bram Moolenaar <bram@vim.org>
parents: 2285
diff changeset
5471 }
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5472 #endif
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5473
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5474 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5475 * Store character to be displayed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5476 * Skip characters that are left of the screen for 'nowrap'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5477 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5478 vcol_prev = vcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5479 if (draw_state < WL_LINE || n_skip <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5480 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5481 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5482 * Store the character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5483 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5484 #if defined(FEAT_RIGHTLEFT) && defined(FEAT_MBYTE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5485 if (has_mbyte && wp->w_p_rl && (*mb_char2cells)(mb_c) > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5486 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5487 /* A double-wide character is: put first halve in left cell. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5488 --off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5489 --col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5490 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5491 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5492 ScreenLines[off] = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5493 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5494 if (enc_dbcs == DBCS_JPNU)
2069
63613d8d7e4d updated for version 7.2.354
Bram Moolenaar <bram@zimbu.org>
parents: 2055
diff changeset
5495 {
63613d8d7e4d updated for version 7.2.354
Bram Moolenaar <bram@zimbu.org>
parents: 2055
diff changeset
5496 if ((mb_c & 0xff00) == 0x8e00)
63613d8d7e4d updated for version 7.2.354
Bram Moolenaar <bram@zimbu.org>
parents: 2055
diff changeset
5497 ScreenLines[off] = 0x8e;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5498 ScreenLines2[off] = mb_c & 0xff;
2069
63613d8d7e4d updated for version 7.2.354
Bram Moolenaar <bram@zimbu.org>
parents: 2055
diff changeset
5499 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5500 else if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5501 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5502 if (mb_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5503 {
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5504 int i;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
5505
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5506 ScreenLinesUC[off] = mb_c;
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
5507 if ((c & 0xff) == 0)
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
5508 ScreenLines[off] = 0x80; /* avoid storing zero */
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5509 for (i = 0; i < Screen_mco; ++i)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5510 {
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5511 ScreenLinesC[i][off] = u8cc[i];
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5512 if (u8cc[i] == 0)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5513 break;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5514 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5515 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5516 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5517 ScreenLinesUC[off] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5518 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5519 if (multi_attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5520 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5521 ScreenAttrs[off] = multi_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5522 multi_attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5523 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5524 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5525 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5526 ScreenAttrs[off] = char_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5527
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5528 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5529 if (has_mbyte && (*mb_char2cells)(mb_c) > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5530 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5531 /* Need to fill two screen columns. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5532 ++off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5533 ++col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5534 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5535 /* UTF-8: Put a 0 in the second screen char. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5536 ScreenLines[off] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5537 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5538 /* DBCS: Put second byte in the second screen char. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5539 ScreenLines[off] = mb_c & 0xff;
7287
6fcadba9ec7a commit https://github.com/vim/vim/commit/32a214e78df0120f92fe049eab1385c60f0cdb0b
Christian Brabandt <cb@256bit.org>
parents: 7233
diff changeset
5540 if (draw_state > WL_NR
6fcadba9ec7a commit https://github.com/vim/vim/commit/32a214e78df0120f92fe049eab1385c60f0cdb0b
Christian Brabandt <cb@256bit.org>
parents: 7233
diff changeset
5541 #ifdef FEAT_DIFF
6fcadba9ec7a commit https://github.com/vim/vim/commit/32a214e78df0120f92fe049eab1385c60f0cdb0b
Christian Brabandt <cb@256bit.org>
parents: 7233
diff changeset
5542 && filler_todo <= 0
6fcadba9ec7a commit https://github.com/vim/vim/commit/32a214e78df0120f92fe049eab1385c60f0cdb0b
Christian Brabandt <cb@256bit.org>
parents: 7233
diff changeset
5543 #endif
6fcadba9ec7a commit https://github.com/vim/vim/commit/32a214e78df0120f92fe049eab1385c60f0cdb0b
Christian Brabandt <cb@256bit.org>
parents: 7233
diff changeset
5544 )
6fcadba9ec7a commit https://github.com/vim/vim/commit/32a214e78df0120f92fe049eab1385c60f0cdb0b
Christian Brabandt <cb@256bit.org>
parents: 7233
diff changeset
5545 ++vcol;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5546 /* When "tocol" is halfway a character, set it to the end of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5547 * the character, otherwise highlighting won't stop. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5548 if (tocol == vcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5549 ++tocol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5550 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5551 if (wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5552 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5553 /* now it's time to backup one cell */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5554 --off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5555 --col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5556 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5557 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5558 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5559 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5560 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5561 if (wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5562 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5563 --off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5564 --col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5565 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5566 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5567 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5568 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5569 ++off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5570 ++col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5571 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5572 }
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5573 #ifdef FEAT_CONCEAL
2378
85b7dc8da5eb Add the 'concealcursor' option to decide when the cursor line is to be
Bram Moolenaar <bram@vim.org>
parents: 2375
diff changeset
5574 else if (wp->w_p_cole > 0 && is_concealing)
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5575 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5576 --n_skip;
2332
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5577 ++vcol_off;
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5578 if (n_extra > 0)
b13079093ae1 Make 'cursorcolumn' work together with the conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2314
diff changeset
5579 vcol_off += n_extra;
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5580 if (wp->w_p_wrap)
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5581 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5582 /*
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5583 * Special voodoo required if 'wrap' is on.
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5584 *
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5585 * Advance the column indicator to force the line
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5586 * drawing to wrap early. This will make the line
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5587 * take up the same screen space when parts are concealed,
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5588 * so that cursor line computations aren't messed up.
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5589 *
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5590 * To avoid the fictitious advance of 'col' causing
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5591 * trailing junk to be written out of the screen line
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5592 * we are building, 'boguscols' keeps track of the number
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5593 * of bad columns we have advanced.
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5594 */
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5595 if (n_extra > 0)
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5596 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5597 vcol += n_extra;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5598 # ifdef FEAT_RIGHTLEFT
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5599 if (wp->w_p_rl)
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5600 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5601 col -= n_extra;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5602 boguscols -= n_extra;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5603 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5604 else
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5605 # endif
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5606 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5607 col += n_extra;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5608 boguscols += n_extra;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5609 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5610 n_extra = 0;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5611 n_attr = 0;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5612 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5613
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5614
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5615 # ifdef FEAT_MBYTE
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5616 if (has_mbyte && (*mb_char2cells)(mb_c) > 1)
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5617 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5618 /* Need to fill two screen columns. */
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5619 # ifdef FEAT_RIGHTLEFT
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5620 if (wp->w_p_rl)
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5621 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5622 --boguscols;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5623 --col;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5624 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5625 else
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5626 # endif
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5627 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5628 ++boguscols;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5629 ++col;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5630 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5631 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5632 # endif
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5633
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5634 # ifdef FEAT_RIGHTLEFT
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5635 if (wp->w_p_rl)
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5636 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5637 --boguscols;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5638 --col;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5639 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5640 else
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5641 # endif
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5642 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5643 ++boguscols;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5644 ++col;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5645 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5646 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5647 else
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5648 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5649 if (n_extra > 0)
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5650 {
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5651 vcol += n_extra;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5652 n_extra = 0;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5653 n_attr = 0;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5654 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5655 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5656
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5657 }
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5658 #endif /* FEAT_CONCEAL */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5659 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5660 --n_skip;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5661
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
5662 /* Only advance the "vcol" when after the 'number' or 'relativenumber'
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
5663 * column. */
1849
11a74d2cab9d updated for version 7.2-147
vimboss
parents: 1843
diff changeset
5664 if (draw_state > WL_NR
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5665 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5666 && filler_todo <= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5667 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5668 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5669 ++vcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5670
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5671 #ifdef FEAT_SYN_HL
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5672 if (vcol_save_attr >= 0)
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5673 char_attr = vcol_save_attr;
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5674 #endif
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5675
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5676 /* restore attributes after "predeces" in 'listchars' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5677 if (draw_state > WL_NR && n_attr3 > 0 && --n_attr3 == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5678 char_attr = saved_attr3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5679
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5680 /* restore attributes after last 'listchars' or 'number' char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5681 if (n_attr > 0 && draw_state == WL_LINE && --n_attr == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5682 char_attr = saved_attr2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5683
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5684 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5685 * At end of screen line and there is more to come: Display the line
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
5686 * so far. If there is no more to display it is caught above.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5687 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5688 if ((
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5689 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5690 wp->w_p_rl ? (col < 0) :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5691 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5692 (col >= W_WIDTH(wp)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5693 && (*ptr != NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5694 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5695 || filler_todo > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5696 #endif
2724
96a7b564c2f3 updated for version 7.3.140
Bram Moolenaar <bram@vim.org>
parents: 2699
diff changeset
5697 || (wp->w_p_list && lcs_eol != NUL && p_extra != at_end_str)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5698 || (n_extra != 0 && (c_extra != NUL || *p_extra != NUL)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5699 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5700 {
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5701 #ifdef FEAT_CONCEAL
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5702 SCREEN_LINE(screen_row, W_WINCOL(wp), col - boguscols,
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5703 (int)W_WIDTH(wp), wp->w_p_rl);
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5704 boguscols = 0;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5705 #else
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5706 SCREEN_LINE(screen_row, W_WINCOL(wp), col,
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5707 (int)W_WIDTH(wp), wp->w_p_rl);
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2237
diff changeset
5708 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5709 ++row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5710 ++screen_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5711
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5712 /* When not wrapping and finished diff lines, or when displayed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5713 * '$' and highlighting until last column, break here. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5714 if ((!wp->w_p_wrap
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5715 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5716 && filler_todo <= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5717 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5718 ) || lcs_eol_one == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5719 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5720
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5721 /* When the window is too narrow draw all "@" lines. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5722 if (draw_state != WL_LINE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5723 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5724 && filler_todo <= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5725 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5726 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5727 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5728 win_draw_end(wp, '@', ' ', row, wp->w_height, HLF_AT);
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
5729 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5730 draw_vsep_win(wp, row);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5731 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5732 row = endrow;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5733 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5734
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5735 /* When line got too long for screen break here. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5736 if (row == endrow)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5737 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5738 ++row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5739 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5740 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5741
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5742 if (screen_cur_row == screen_row - 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5743 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5744 && filler_todo <= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5745 #endif
10349
cf988222b150 commit https://github.com/vim/vim/commit/a1f4cb93ba50ea9e40cd4b1f5592b8a6d1398660
Christian Brabandt <cb@256bit.org>
parents: 10307
diff changeset
5746 #ifdef FEAT_WINDOWS
cf988222b150 commit https://github.com/vim/vim/commit/a1f4cb93ba50ea9e40cd4b1f5592b8a6d1398660
Christian Brabandt <cb@256bit.org>
parents: 10307
diff changeset
5747 && W_WIDTH(wp) == Columns
cf988222b150 commit https://github.com/vim/vim/commit/a1f4cb93ba50ea9e40cd4b1f5592b8a6d1398660
Christian Brabandt <cb@256bit.org>
parents: 10307
diff changeset
5748 #endif
cf988222b150 commit https://github.com/vim/vim/commit/a1f4cb93ba50ea9e40cd4b1f5592b8a6d1398660
Christian Brabandt <cb@256bit.org>
parents: 10307
diff changeset
5749 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5750 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5751 /* Remember that the line wraps, used for modeless copy. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5752 LineWraps[screen_row - 1] = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5753
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5754 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5755 * Special trick to make copy/paste of wrapped lines work with
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5756 * xterm/screen: write an extra character beyond the end of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5757 * the line. This will work with all terminal types
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5758 * (regardless of the xn,am settings).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5759 * Only do this on a fast tty.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5760 * Only do this if the cursor is on the current line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5761 * (something has been written in it).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5762 * Don't do this for the GUI.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5763 * Don't do this for double-width characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5764 * Don't do this for a window not at the right screen border.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5765 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5766 if (p_tf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5767 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5768 && !gui.in_use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5769 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5770 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5771 && !(has_mbyte
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
5772 && ((*mb_off2cells)(LineOffset[screen_row],
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
5773 LineOffset[screen_row] + screen_Columns)
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
5774 == 2
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5775 || (*mb_off2cells)(LineOffset[screen_row - 1]
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
5776 + (int)Columns - 2,
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
5777 LineOffset[screen_row] + screen_Columns)
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
5778 == 2))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5779 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5780 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5781 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5782 /* First make sure we are at the end of the screen line,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5783 * then output the same character again to let the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5784 * terminal know about the wrap. If the terminal doesn't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5785 * auto-wrap, we overwrite the character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5786 if (screen_cur_col != W_WIDTH(wp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5787 screen_char(LineOffset[screen_row - 1]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5788 + (unsigned)Columns - 1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5789 screen_row - 1, (int)(Columns - 1));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5790
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5791 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5792 /* When there is a multi-byte character, just output a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5793 * space to keep it simple. */
148
72aefd4c1e0d updated for version 7.0046
vimboss
parents: 119
diff changeset
5794 if (has_mbyte && MB_BYTE2LEN(ScreenLines[LineOffset[
72aefd4c1e0d updated for version 7.0046
vimboss
parents: 119
diff changeset
5795 screen_row - 1] + (Columns - 1)]) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5796 out_char(' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5797 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5798 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5799 out_char(ScreenLines[LineOffset[screen_row - 1]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5800 + (Columns - 1)]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5801 /* force a redraw of the first char on the next line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5802 ScreenAttrs[LineOffset[screen_row]] = (sattr_T)-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5803 screen_start(); /* don't know where cursor is now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5804 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5805 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5806
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5807 col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5808 off = (unsigned)(current_ScreenLine - ScreenLines);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5809 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5810 if (wp->w_p_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5811 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5812 col = W_WIDTH(wp) - 1; /* col is not used if breaking! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5813 off += col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5814 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5815 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5816
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5817 /* reset the drawing state for the start of a wrapped line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5818 draw_state = WL_START;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5819 saved_n_extra = n_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5820 saved_p_extra = p_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5821 saved_c_extra = c_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5822 saved_char_attr = char_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5823 n_extra = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5824 lcs_prec_todo = lcs_prec;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5825 #ifdef FEAT_LINEBREAK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5826 # ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5827 if (filler_todo <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5828 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5829 need_showbreak = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5830 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5831 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5832 --filler_todo;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5833 /* When the filler lines are actually below the last line of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5834 * file, don't draw the line itself, break here. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5835 if (filler_todo == 0 && wp->w_botfill)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5836 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5837 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5838 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5839
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5840 } /* for every character in the line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5841
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
5842 #ifdef FEAT_SPELL
386
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
5843 /* After an empty line check first word for capital. */
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
5844 if (*skipwhite(line) == NUL)
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
5845 {
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
5846 capcol_lnum = lnum + 1;
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
5847 cap_col = 0;
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
5848 }
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
5849 #endif
607d3cd9364f updated for version 7.0100
vimboss
parents: 378
diff changeset
5850
10690
206ab11fa76e patch 8.0.0235: memory leak in diff mode
Christian Brabandt <cb@256bit.org>
parents: 10538
diff changeset
5851 vim_free(p_extra_free);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5852 return row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5853 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5854
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5855 #ifdef FEAT_MBYTE
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
5856 static int comp_char_differs(int, int);
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5857
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5858 /*
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5859 * Return if the composing characters at "off_from" and "off_to" differ.
2124
dc8a5699253b updated for version 7.2.406
Bram Moolenaar <bram@zimbu.org>
parents: 2122
diff changeset
5860 * Only to be used when ScreenLinesUC[off_from] != 0.
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5861 */
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5862 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
5863 comp_char_differs(int off_from, int off_to)
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5864 {
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5865 int i;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5866
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5867 for (i = 0; i < Screen_mco; ++i)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5868 {
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5869 if (ScreenLinesC[i][off_from] != ScreenLinesC[i][off_to])
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5870 return TRUE;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5871 if (ScreenLinesC[i][off_from] == 0)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5872 break;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5873 }
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5874 return FALSE;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5875 }
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5876 #endif
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
5877
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5878 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5879 * Check whether the given character needs redrawing:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5880 * - the (first byte of the) character is different
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5881 * - the attributes are different
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5882 * - the character is multi-byte and the next byte is different
1616
dbef8434a2ea updated for version 7.1-329
vimboss
parents: 1588
diff changeset
5883 * - the character is two cells wide and the second cell differs.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5884 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5885 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
5886 char_needs_redraw(int off_from, int off_to, int cols)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5887 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5888 if (cols > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5889 && ((ScreenLines[off_from] != ScreenLines[off_to]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5890 || ScreenAttrs[off_from] != ScreenAttrs[off_to])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5891
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5892 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5893 || (enc_dbcs != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5894 && MB_BYTE2LEN(ScreenLines[off_from]) > 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5895 && (enc_dbcs == DBCS_JPNU && ScreenLines[off_from] == 0x8e
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5896 ? ScreenLines2[off_from] != ScreenLines2[off_to]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5897 : (cols > 1 && ScreenLines[off_from + 1]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5898 != ScreenLines[off_to + 1])))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5899 || (enc_utf8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5900 && (ScreenLinesUC[off_from] != ScreenLinesUC[off_to]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5901 || (ScreenLinesUC[off_from] != 0
1616
dbef8434a2ea updated for version 7.1-329
vimboss
parents: 1588
diff changeset
5902 && comp_char_differs(off_from, off_to))
3759
c0256c4bd91e updated for version 7.3.638
Bram Moolenaar <bram@vim.org>
parents: 3674
diff changeset
5903 || ((*mb_off2cells)(off_from, off_from + cols) > 1
c0256c4bd91e updated for version 7.3.638
Bram Moolenaar <bram@vim.org>
parents: 3674
diff changeset
5904 && ScreenLines[off_from + 1]
c0256c4bd91e updated for version 7.3.638
Bram Moolenaar <bram@vim.org>
parents: 3674
diff changeset
5905 != ScreenLines[off_to + 1])))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5906 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5907 ))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5908 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5909 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5910 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5911
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5912 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5913 * Move one "cooked" screen line to the screen, but only the characters that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5914 * have actually changed. Handle insert/delete character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5915 * "coloff" gives the first column on the screen for this line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5916 * "endcol" gives the columns where valid characters are.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5917 * "clear_width" is the width of the window. It's > 0 if the rest of the line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5918 * needs to be cleared, negative otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5919 * "rlflag" is TRUE in a rightleft window:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5920 * When TRUE and "clear_width" > 0, clear columns 0 to "endcol"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5921 * When FALSE and "clear_width" > 0, clear columns "endcol" to "clear_width"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5922 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5923 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
5924 screen_line(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
5925 int row,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
5926 int coloff,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
5927 int endcol,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
5928 int clear_width
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5929 #ifdef FEAT_RIGHTLEFT
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
5930 , int rlflag
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
5931 #endif
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
5932 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5933 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5934 unsigned off_from;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5935 unsigned off_to;
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
5936 #ifdef FEAT_MBYTE
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
5937 unsigned max_off_from;
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
5938 unsigned max_off_to;
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
5939 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5940 int col = 0;
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
5941 #if defined(FEAT_GUI) || defined(UNIX) || defined(FEAT_WINDOWS)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5942 int hl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5943 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5944 int force = FALSE; /* force update rest of the line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5945 int redraw_this /* bool: does character need redraw? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5946 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5947 = TRUE /* For GUI when while-loop empty */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5948 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5949 ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5950 int redraw_next; /* redraw_this for next character */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5951 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5952 int clear_next = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5953 int char_cells; /* 1: normal char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5954 /* 2: occupies two display cells */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5955 # define CHAR_CELLS char_cells
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5956 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5957 # define CHAR_CELLS 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5958 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5959
3413
8332129d9ae8 updated for version 7.3.472
Bram Moolenaar <bram@vim.org>
parents: 3318
diff changeset
5960 /* Check for illegal row and col, just in case. */
8332129d9ae8 updated for version 7.3.472
Bram Moolenaar <bram@vim.org>
parents: 3318
diff changeset
5961 if (row >= Rows)
8332129d9ae8 updated for version 7.3.472
Bram Moolenaar <bram@vim.org>
parents: 3318
diff changeset
5962 row = Rows - 1;
8332129d9ae8 updated for version 7.3.472
Bram Moolenaar <bram@vim.org>
parents: 3318
diff changeset
5963 if (endcol > Columns)
8332129d9ae8 updated for version 7.3.472
Bram Moolenaar <bram@vim.org>
parents: 3318
diff changeset
5964 endcol = Columns;
8332129d9ae8 updated for version 7.3.472
Bram Moolenaar <bram@vim.org>
parents: 3318
diff changeset
5965
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5966 # ifdef FEAT_CLIPBOARD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5967 clip_may_clear_selection(row, row);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5968 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5969
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5970 off_from = (unsigned)(current_ScreenLine - ScreenLines);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5971 off_to = LineOffset[row] + coloff;
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
5972 #ifdef FEAT_MBYTE
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
5973 max_off_from = off_from + screen_Columns;
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
5974 max_off_to = LineOffset[row] + screen_Columns;
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
5975 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5976
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5977 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5978 if (rlflag)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5979 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5980 /* Clear rest first, because it's left of the text. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5981 if (clear_width > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5982 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5983 while (col <= endcol && ScreenLines[off_to] == ' '
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5984 && ScreenAttrs[off_to] == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5985 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5986 && (!enc_utf8 || ScreenLinesUC[off_to] == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5987 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5988 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5989 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5990 ++off_to;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5991 ++col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5992 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5993 if (col <= endcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5994 screen_fill(row, row + 1, col + coloff,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5995 endcol + coloff + 1, ' ', ' ', 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5996 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5997 col = endcol + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5998 off_to = LineOffset[row] + col + coloff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5999 off_from += col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6000 endcol = (clear_width > 0 ? clear_width : -clear_width);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6001 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6002 #endif /* FEAT_RIGHTLEFT */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6003
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6004 redraw_next = char_needs_redraw(off_from, off_to, endcol - col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6005
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6006 while (col < endcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6007 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6008 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6009 if (has_mbyte && (col + 1 < endcol))
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
6010 char_cells = (*mb_off2cells)(off_from, max_off_from);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6011 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6012 char_cells = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6013 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6014
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6015 redraw_this = redraw_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6016 redraw_next = force || char_needs_redraw(off_from + CHAR_CELLS,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6017 off_to + CHAR_CELLS, endcol - col - CHAR_CELLS);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6018
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6019 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6020 /* If the next character was bold, then redraw the current character to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6021 * remove any pixels that might have spilt over into us. This only
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6022 * happens in the GUI.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6023 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6024 if (redraw_next && gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6025 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6026 hl = ScreenAttrs[off_to + CHAR_CELLS];
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
6027 if (hl > HL_ALL)
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
6028 hl = syn_attr2attr(hl);
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
6029 if (hl & HL_BOLD)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6030 redraw_this = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6031 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6032 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6033
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6034 if (redraw_this)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6035 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6036 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6037 * Special handling when 'xs' termcap flag set (hpterm):
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6038 * Attributes for characters are stored at the position where the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6039 * cursor is when writing the highlighting code. The
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6040 * start-highlighting code must be written with the cursor on the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6041 * first highlighted character. The stop-highlighting code must
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6042 * be written with the cursor just after the last highlighted
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6043 * character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6044 * Overwriting a character doesn't remove it's highlighting. Need
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6045 * to clear the rest of the line, and force redrawing it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6046 * completely.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6047 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6048 if ( p_wiv
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6049 && !force
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6050 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6051 && !gui.in_use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6052 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6053 && ScreenAttrs[off_to] != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6054 && ScreenAttrs[off_from] != ScreenAttrs[off_to])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6055 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6056 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6057 * Need to remove highlighting attributes here.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6058 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6059 windgoto(row, col + coloff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6060 out_str(T_CE); /* clear rest of this screen line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6061 screen_start(); /* don't know where cursor is now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6062 force = TRUE; /* force redraw of rest of the line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6063 redraw_next = TRUE; /* or else next char would miss out */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6064
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6065 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6066 * If the previous character was highlighted, need to stop
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6067 * highlighting at this character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6068 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6069 if (col + coloff > 0 && ScreenAttrs[off_to - 1] != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6070 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6071 screen_attr = ScreenAttrs[off_to - 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6072 term_windgoto(row, col + coloff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6073 screen_stop_highlight();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6074 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6075 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6076 screen_attr = 0; /* highlighting has stopped */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6077 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6078 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6079 if (enc_dbcs != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6080 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6081 /* Check if overwriting a double-byte with a single-byte or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6082 * the other way around requires another character to be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6083 * redrawn. For UTF-8 this isn't needed, because comparing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6084 * ScreenLinesUC[] is sufficient. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6085 if (char_cells == 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6086 && col + 1 < endcol
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
6087 && (*mb_off2cells)(off_to, max_off_to) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6088 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6089 /* Writing a single-cell character over a double-cell
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6090 * character: need to redraw the next cell. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6091 ScreenLines[off_to + 1] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6092 redraw_next = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6093 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6094 else if (char_cells == 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6095 && col + 2 < endcol
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
6096 && (*mb_off2cells)(off_to, max_off_to) == 1
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
6097 && (*mb_off2cells)(off_to + 1, max_off_to) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6098 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6099 /* Writing the second half of a double-cell character over
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6100 * a double-cell character: need to redraw the second
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6101 * cell. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6102 ScreenLines[off_to + 2] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6103 redraw_next = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6104 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6105
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6106 if (enc_dbcs == DBCS_JPNU)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6107 ScreenLines2[off_to] = ScreenLines2[off_from];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6108 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6109 /* When writing a single-width character over a double-width
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6110 * character and at the end of the redrawn text, need to clear out
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6111 * the right halve of the old character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6112 * Also required when writing the right halve of a double-width
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6113 * char over the left halve of an existing one. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6114 if (has_mbyte && col + char_cells == endcol
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6115 && ((char_cells == 1
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
6116 && (*mb_off2cells)(off_to, max_off_to) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6117 || (char_cells == 2
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
6118 && (*mb_off2cells)(off_to, max_off_to) == 1
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
6119 && (*mb_off2cells)(off_to + 1, max_off_to) > 1)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6120 clear_next = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6121 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6122
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6123 ScreenLines[off_to] = ScreenLines[off_from];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6124 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6125 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6126 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6127 ScreenLinesUC[off_to] = ScreenLinesUC[off_from];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6128 if (ScreenLinesUC[off_from] != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6129 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
6130 int i;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
6131
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
6132 for (i = 0; i < Screen_mco; ++i)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
6133 ScreenLinesC[i][off_to] = ScreenLinesC[i][off_from];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6134 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6135 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6136 if (char_cells == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6137 ScreenLines[off_to + 1] = ScreenLines[off_from + 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6138 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6139
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6140 #if defined(FEAT_GUI) || defined(UNIX)
1843
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
6141 /* The bold trick makes a single column of pixels appear in the
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
6142 * next character. When a bold character is removed, the next
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6143 * character should be redrawn too. This happens for our own GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6144 * and for some xterms. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6145 if (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6146 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6147 gui.in_use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6148 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6149 # if defined(FEAT_GUI) && defined(UNIX)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6150 ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6151 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6152 # ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6153 term_is_xterm
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6154 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6155 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6156 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6157 hl = ScreenAttrs[off_to];
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
6158 if (hl > HL_ALL)
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
6159 hl = syn_attr2attr(hl);
afac7b58ed46 updated for version 7.0222
vimboss
parents: 714
diff changeset
6160 if (hl & HL_BOLD)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6161 redraw_next = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6162 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6163 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6164 ScreenAttrs[off_to] = ScreenAttrs[off_from];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6165 #ifdef FEAT_MBYTE
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
6166 /* For simplicity set the attributes of second half of a
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
6167 * double-wide character equal to the first half. */
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
6168 if (char_cells == 2)
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
6169 ScreenAttrs[off_to + 1] = ScreenAttrs[off_from];
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
6170
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6171 if (enc_dbcs != 0 && char_cells == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6172 screen_char_2(off_to, row, col + coloff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6173 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6174 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6175 screen_char(off_to, row, col + coloff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6176 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6177 else if ( p_wiv
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6178 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6179 && !gui.in_use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6180 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6181 && col + coloff > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6182 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6183 if (ScreenAttrs[off_to] == ScreenAttrs[off_to - 1])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6184 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6185 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6186 * Don't output stop-highlight when moving the cursor, it will
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6187 * stop the highlighting when it should continue.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6188 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6189 screen_attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6190 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6191 else if (screen_attr != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6192 screen_stop_highlight();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6193 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6194
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6195 off_to += CHAR_CELLS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6196 off_from += CHAR_CELLS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6197 col += CHAR_CELLS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6198 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6199
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6200 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6201 if (clear_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6202 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6203 /* Clear the second half of a double-wide character of which the left
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6204 * half was overwritten with a single-wide character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6205 ScreenLines[off_to] = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6206 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6207 ScreenLinesUC[off_to] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6208 screen_char(off_to, row, col + coloff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6209 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6210 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6211
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6212 if (clear_width > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6213 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6214 && !rlflag
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6215 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6216 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6217 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6218 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6219 int startCol = col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6220 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6221
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6222 /* blank out the rest of the line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6223 while (col < clear_width && ScreenLines[off_to] == ' '
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6224 && ScreenAttrs[off_to] == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6225 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6226 && (!enc_utf8 || ScreenLinesUC[off_to] == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6227 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6228 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6229 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6230 ++off_to;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6231 ++col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6232 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6233 if (col < clear_width)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6234 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6235 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6236 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6237 * In the GUI, clearing the rest of the line may leave pixels
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6238 * behind if the first character cleared was bold. Some bold
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6239 * fonts spill over the left. In this case we redraw the previous
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6240 * character too. If we didn't skip any blanks above, then we
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6241 * only redraw if the character wasn't already redrawn anyway.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6242 */
996
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6243 if (gui.in_use && (col > startCol || !redraw_this))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6244 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6245 hl = ScreenAttrs[off_to];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6246 if (hl > HL_ALL || (hl & HL_BOLD))
996
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6247 {
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6248 int prev_cells = 1;
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6249 # ifdef FEAT_MBYTE
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6250 if (enc_utf8)
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6251 /* for utf-8, ScreenLines[char_offset + 1] == 0 means
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6252 * that its width is 2. */
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6253 prev_cells = ScreenLines[off_to - 1] == 0 ? 2 : 1;
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6254 else if (enc_dbcs != 0)
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6255 {
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6256 /* find previous character by counting from first
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6257 * column and get its width. */
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6258 unsigned off = LineOffset[row];
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
6259 unsigned max_off = LineOffset[row] + screen_Columns;
996
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6260
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6261 while (off < off_to)
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6262 {
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
6263 prev_cells = (*mb_off2cells)(off, max_off);
996
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6264 off += prev_cells;
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6265 }
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6266 }
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6267
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6268 if (enc_dbcs != 0 && prev_cells > 1)
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6269 screen_char_2(off_to - prev_cells, row,
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6270 col + coloff - prev_cells);
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6271 else
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6272 # endif
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6273 screen_char(off_to - prev_cells, row,
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6274 col + coloff - prev_cells);
5858c00d0f2c updated for version 7.0-122
vimboss
parents: 981
diff changeset
6275 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6276 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6277 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6278 screen_fill(row, row + 1, col + coloff, clear_width + coloff,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6279 ' ', ' ', 0);
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
6280 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6281 off_to += clear_width - col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6282 col = clear_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6283 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6284 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6285 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6286
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6287 if (clear_width > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6288 {
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
6289 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6290 /* For a window that's left of another, draw the separator char. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6291 if (col + coloff < Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6292 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6293 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6294
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6295 c = fillchar_vsep(&hl);
6477
0b245c8dbd19 updated for version 7.4.567
Bram Moolenaar <bram@vim.org>
parents: 6466
diff changeset
6296 if (ScreenLines[off_to] != (schar_T)c
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6297 # ifdef FEAT_MBYTE
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
6298 || (enc_utf8 && (int)ScreenLinesUC[off_to]
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
6299 != (c >= 0x80 ? c : 0))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6300 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6301 || ScreenAttrs[off_to] != hl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6302 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6303 ScreenLines[off_to] = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6304 ScreenAttrs[off_to] = hl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6305 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6306 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6307 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6308 if (c >= 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6309 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6310 ScreenLinesUC[off_to] = c;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
6311 ScreenLinesC[0][off_to] = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6312 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6313 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6314 ScreenLinesUC[off_to] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6315 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6316 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6317 screen_char(off_to, row, col + coloff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6318 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6319 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6320 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6321 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6322 LineWraps[row] = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6323 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6324 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6325
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
6326 #if defined(FEAT_RIGHTLEFT) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6327 /*
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
6328 * Mirror text "str" for right-left displaying.
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
6329 * Only works for single-byte characters (e.g., numbers).
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6330 */
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
6331 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6332 rl_mirror(char_u *str)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6333 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6334 char_u *p1, *p2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6335 int t;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6336
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6337 for (p1 = str, p2 = str + STRLEN(str) - 1; p1 < p2; ++p1, --p2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6338 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6339 t = *p1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6340 *p1 = *p2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6341 *p2 = t;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6342 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6343 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6344 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6345
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6346 #if defined(FEAT_WINDOWS) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6347 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6348 * mark all status lines for redraw; used after first :cd
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6349 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6350 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6351 status_redraw_all(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6352 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6353 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6354
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
6355 FOR_ALL_WINDOWS(wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6356 if (wp->w_status_height)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6357 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6358 wp->w_redr_status = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6359 redraw_later(VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6360 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6361 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6362
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6363 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6364 * mark all status lines of the current buffer for redraw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6365 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6366 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6367 status_redraw_curbuf(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6368 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6369 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6370
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
6371 FOR_ALL_WINDOWS(wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6372 if (wp->w_status_height != 0 && wp->w_buffer == curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6373 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6374 wp->w_redr_status = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6375 redraw_later(VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6376 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6377 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6378
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6379 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6380 * Redraw all status lines that need to be redrawn.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6381 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6382 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6383 redraw_statuslines(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6384 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6385 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6386
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
6387 FOR_ALL_WINDOWS(wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6388 if (wp->w_redr_status)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6389 win_redr_status(wp);
673
513866ffe6af updated for version 7.0200
vimboss
parents: 671
diff changeset
6390 if (redraw_tabline)
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
6391 draw_tabline();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6392 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6393 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6394
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
6395 #if (defined(FEAT_WILDMENU) && defined(FEAT_WINDOWS)) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6396 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6397 * Redraw all status lines at the bottom of frame "frp".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6398 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6399 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6400 win_redraw_last_status(frame_T *frp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6401 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6402 if (frp->fr_layout == FR_LEAF)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6403 frp->fr_win->w_redr_status = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6404 else if (frp->fr_layout == FR_ROW)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6405 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6406 for (frp = frp->fr_child; frp != NULL; frp = frp->fr_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6407 win_redraw_last_status(frp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6408 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6409 else /* frp->fr_layout == FR_COL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6410 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6411 frp = frp->fr_child;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6412 while (frp->fr_next != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6413 frp = frp->fr_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6414 win_redraw_last_status(frp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6415 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6416 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6417 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6418
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
6419 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6420 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6421 * Draw the verticap separator right of window "wp" starting with line "row".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6422 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6423 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6424 draw_vsep_win(win_T *wp, int row)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6425 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6426 int hl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6427 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6428
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6429 if (wp->w_vsep_width)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6430 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6431 /* draw the vertical separator right of this window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6432 c = fillchar_vsep(&hl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6433 screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + wp->w_height,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6434 W_ENDCOL(wp), W_ENDCOL(wp) + 1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6435 c, ' ', hl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6436 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6437 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6438 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6439
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6440 #ifdef FEAT_WILDMENU
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
6441 static int status_match_len(expand_T *xp, char_u *s);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
6442 static int skip_status_match_char(expand_T *xp, char_u *s);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6443
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6444 /*
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
6445 * Get the length of an item as it will be shown in the status line.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6446 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6447 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6448 status_match_len(expand_T *xp, char_u *s)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6449 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6450 int len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6451
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6452 #ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6453 int emenu = (xp->xp_context == EXPAND_MENUS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6454 || xp->xp_context == EXPAND_MENUNAMES);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6455
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6456 /* Check for menu separators - replace with '|'. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6457 if (emenu && menu_is_separator(s))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6458 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6459 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6460
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6461 while (*s != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6462 {
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1677
diff changeset
6463 s += skip_status_match_char(xp, s);
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 40
diff changeset
6464 len += ptr2cells(s);
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11121
diff changeset
6465 MB_PTR_ADV(s);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6466 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6467
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6468 return len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6469 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6470
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6471 /*
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1677
diff changeset
6472 * Return the number of characters that should be skipped in a status match.
277
fe16c18c24a7 updated for version 7.0074
vimboss
parents: 258
diff changeset
6473 * These are backslashes used for escaping. Do show backslashes in help tags.
fe16c18c24a7 updated for version 7.0074
vimboss
parents: 258
diff changeset
6474 */
fe16c18c24a7 updated for version 7.0074
vimboss
parents: 258
diff changeset
6475 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6476 skip_status_match_char(expand_T *xp, char_u *s)
277
fe16c18c24a7 updated for version 7.0074
vimboss
parents: 258
diff changeset
6477 {
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1677
diff changeset
6478 if ((rem_backslash(s) && xp->xp_context != EXPAND_HELP)
277
fe16c18c24a7 updated for version 7.0074
vimboss
parents: 258
diff changeset
6479 #ifdef FEAT_MENU
fe16c18c24a7 updated for version 7.0074
vimboss
parents: 258
diff changeset
6480 || ((xp->xp_context == EXPAND_MENUS
fe16c18c24a7 updated for version 7.0074
vimboss
parents: 258
diff changeset
6481 || xp->xp_context == EXPAND_MENUNAMES)
fe16c18c24a7 updated for version 7.0074
vimboss
parents: 258
diff changeset
6482 && (s[0] == '\t' || (s[0] == '\\' && s[1] != NUL)))
fe16c18c24a7 updated for version 7.0074
vimboss
parents: 258
diff changeset
6483 #endif
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1677
diff changeset
6484 )
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1677
diff changeset
6485 {
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1677
diff changeset
6486 #ifndef BACKSLASH_IN_FILENAME
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1677
diff changeset
6487 if (xp->xp_shell && csh_like_shell() && s[1] == '\\' && s[2] == '!')
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1677
diff changeset
6488 return 2;
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1677
diff changeset
6489 #endif
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1677
diff changeset
6490 return 1;
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1677
diff changeset
6491 }
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1677
diff changeset
6492 return 0;
277
fe16c18c24a7 updated for version 7.0074
vimboss
parents: 258
diff changeset
6493 }
fe16c18c24a7 updated for version 7.0074
vimboss
parents: 258
diff changeset
6494
fe16c18c24a7 updated for version 7.0074
vimboss
parents: 258
diff changeset
6495 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6496 * Show wildchar matches in the status line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6497 * Show at least the "match" item.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6498 * We start at item 'first_match' in the list and show all matches that fit.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6499 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6500 * If inversion is possible we use it. Else '=' characters are used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6501 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6502 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6503 win_redr_status_matches(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6504 expand_T *xp,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6505 int num_matches,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6506 char_u **matches, /* list of matches */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6507 int match,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6508 int showtail)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6509 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6510 #define L_MATCH(m) (showtail ? sm_gettail(matches[m]) : matches[m])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6511 int row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6512 char_u *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6513 int len;
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
6514 int clen; /* length in screen cells */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6515 int fillchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6516 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6517 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6518 int highlight = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6519 char_u *selstart = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6520 int selstart_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6521 char_u *selend = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6522 static int first_match = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6523 int add_left = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6524 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6525 #ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6526 int emenu;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6527 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6528 #if defined(FEAT_MBYTE) || defined(FEAT_MENU)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6529 int l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6530 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6531
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6532 if (matches == NULL) /* interrupted completion? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6533 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6534
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 36
diff changeset
6535 #ifdef FEAT_MBYTE
410fa1a31baf updated for version 7.0023
vimboss
parents: 36
diff changeset
6536 if (has_mbyte)
410fa1a31baf updated for version 7.0023
vimboss
parents: 36
diff changeset
6537 buf = alloc((unsigned)Columns * MB_MAXBYTES + 1);
410fa1a31baf updated for version 7.0023
vimboss
parents: 36
diff changeset
6538 else
410fa1a31baf updated for version 7.0023
vimboss
parents: 36
diff changeset
6539 #endif
410fa1a31baf updated for version 7.0023
vimboss
parents: 36
diff changeset
6540 buf = alloc((unsigned)Columns + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6541 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6542 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6543
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6544 if (match == -1) /* don't show match but original text */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6545 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6546 match = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6547 highlight = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6548 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6549 /* count 1 for the ending ">" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6550 clen = status_match_len(xp, L_MATCH(match)) + 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6551 if (match == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6552 first_match = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6553 else if (match < first_match)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6554 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6555 /* jumping left, as far as we can go */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6556 first_match = match;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6557 add_left = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6558 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6559 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6560 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6561 /* check if match fits on the screen */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6562 for (i = first_match; i < match; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6563 clen += status_match_len(xp, L_MATCH(i)) + 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6564 if (first_match > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6565 clen += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6566 /* jumping right, put match at the left */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6567 if ((long)clen > Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6568 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6569 first_match = match;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6570 /* if showing the last match, we can add some on the left */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6571 clen = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6572 for (i = match; i < num_matches; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6573 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6574 clen += status_match_len(xp, L_MATCH(i)) + 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6575 if ((long)clen >= Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6576 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6577 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6578 if (i == num_matches)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6579 add_left = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6580 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6581 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6582 if (add_left)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6583 while (first_match > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6584 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6585 clen += status_match_len(xp, L_MATCH(first_match - 1)) + 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6586 if ((long)clen >= Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6587 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6588 --first_match;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6589 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6590
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6591 fillchar = fillchar_status(&attr, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6592
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6593 if (first_match == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6594 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6595 *buf = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6596 len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6597 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6598 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6599 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6600 STRCPY(buf, "< ");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6601 len = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6602 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6603 clen = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6604
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6605 i = first_match;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6606 while ((long)(clen + status_match_len(xp, L_MATCH(i)) + 2) < Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6607 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6608 if (i == match)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6609 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6610 selstart = buf + len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6611 selstart_col = clen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6612 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6613
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6614 s = L_MATCH(i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6615 /* Check for menu separators - replace with '|' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6616 #ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6617 emenu = (xp->xp_context == EXPAND_MENUS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6618 || xp->xp_context == EXPAND_MENUNAMES);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6619 if (emenu && menu_is_separator(s))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6620 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6621 STRCPY(buf + len, transchar('|'));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6622 l = (int)STRLEN(buf + len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6623 len += l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6624 clen += l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6625 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6626 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6627 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6628 for ( ; *s != NUL; ++s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6629 {
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1677
diff changeset
6630 s += skip_status_match_char(xp, s);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6631 clen += ptr2cells(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6632 #ifdef FEAT_MBYTE
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
6633 if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6634 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6635 STRNCPY(buf + len, s, l);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6636 s += l - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6637 len += l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6638 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6639 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6640 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6641 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6642 STRCPY(buf + len, transchar_byte(*s));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6643 len += (int)STRLEN(buf + len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6644 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6645 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6646 if (i == match)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6647 selend = buf + len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6648
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6649 *(buf + len++) = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6650 *(buf + len++) = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6651 clen += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6652 if (++i == num_matches)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6653 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6654 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6655
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6656 if (i != num_matches)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6657 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6658 *(buf + len++) = '>';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6659 ++clen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6660 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6661
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6662 buf[len] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6663
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6664 row = cmdline_row - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6665 if (row >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6666 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6667 if (wild_menu_showing == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6668 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6669 if (msg_scrolled > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6670 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6671 /* Put the wildmenu just above the command line. If there is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6672 * no room, scroll the screen one line up. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6673 if (cmdline_row == Rows - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6674 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6675 screen_del_lines(0, 0, 1, (int)Rows, TRUE, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6676 ++msg_scrolled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6677 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6678 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6679 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6680 ++cmdline_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6681 ++row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6682 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6683 wild_menu_showing = WM_SCROLLED;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6684 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6685 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6686 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6687 /* Create status line if needed by setting 'laststatus' to 2.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6688 * Set 'winminheight' to zero to avoid that the window is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6689 * resized. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6690 if (lastwin->w_status_height == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6691 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6692 save_p_ls = p_ls;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6693 save_p_wmh = p_wmh;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6694 p_ls = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6695 p_wmh = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6696 last_status(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6697 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6698 wild_menu_showing = WM_SHOWN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6699 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6700 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6701
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6702 screen_puts(buf, row, 0, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6703 if (selstart != NULL && highlight)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6704 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6705 *selend = NUL;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
6706 screen_puts(selstart, row, selstart_col, HL_ATTR(HLF_WM));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6707 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6708
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6709 screen_fill(row, row + 1, clen, (int)Columns, fillchar, fillchar, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6710 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6711
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
6712 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6713 win_redraw_last_status(topframe);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6714 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6715 lastwin->w_redr_status = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6716 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6717 vim_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6718 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6719 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6720
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6721 #if defined(FEAT_WINDOWS) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6722 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6723 * Redraw the status line of window wp.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6724 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6725 * If inversion is possible we use it. Else '=' characters are used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6726 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6727 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6728 win_redr_status(win_T *wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6729 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6730 int row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6731 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6732 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6733 int fillchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6734 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6735 int this_ru_col;
1910
1287e2bbeb40 updated for version 7.2-207
vimboss
parents: 1906
diff changeset
6736 static int busy = FALSE;
1287e2bbeb40 updated for version 7.2-207
vimboss
parents: 1906
diff changeset
6737
1287e2bbeb40 updated for version 7.2-207
vimboss
parents: 1906
diff changeset
6738 /* It's possible to get here recursively when 'statusline' (indirectly)
1287e2bbeb40 updated for version 7.2-207
vimboss
parents: 1906
diff changeset
6739 * invokes ":redrawstatus". Simply ignore the call then. */
1287e2bbeb40 updated for version 7.2-207
vimboss
parents: 1906
diff changeset
6740 if (busy)
1287e2bbeb40 updated for version 7.2-207
vimboss
parents: 1906
diff changeset
6741 return;
1287e2bbeb40 updated for version 7.2-207
vimboss
parents: 1906
diff changeset
6742 busy = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6743
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6744 wp->w_redr_status = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6745 if (wp->w_status_height == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6746 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6747 /* no status line, can only be last window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6748 redraw_cmdline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6749 }
540
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
6750 else if (!redrawing()
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
6751 #ifdef FEAT_INS_EXPAND
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
6752 /* don't update status line when popup menu is visible and may be
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
6753 * drawn over it */
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
6754 || pum_visible()
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
6755 #endif
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
6756 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6757 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6758 /* Don't redraw right now, do it later. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6759 wp->w_redr_status = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6760 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6761 #ifdef FEAT_STL_OPT
40
f1d2a58883b9 updated for version 7.0024
vimboss
parents: 39
diff changeset
6762 else if (*p_stl != NUL || *wp->w_p_stl != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6763 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6764 /* redraw custom status line */
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
6765 redraw_custom_statusline(wp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6766 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6767 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6768 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6769 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6770 fillchar = fillchar_status(&attr, wp == curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6771
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
6772 get_trans_bufname(wp->w_buffer);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6773 p = NameBuff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6774 len = (int)STRLEN(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6775
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6776 if (wp->w_buffer->b_help
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6777 #ifdef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6778 || wp->w_p_pvw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6779 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6780 || bufIsChanged(wp->w_buffer)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6781 || wp->w_buffer->b_p_ro)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6782 *(p + len++) = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6783 if (wp->w_buffer->b_help)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6784 {
809
4f1b94b51e99 updated for version 7.0b02
vimboss
parents: 798
diff changeset
6785 STRCPY(p + len, _("[Help]"));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6786 len += (int)STRLEN(p + len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6787 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6788 #ifdef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6789 if (wp->w_p_pvw)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6790 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6791 STRCPY(p + len, _("[Preview]"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6792 len += (int)STRLEN(p + len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6793 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6794 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6795 if (bufIsChanged(wp->w_buffer))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6796 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6797 STRCPY(p + len, "[+]");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6798 len += 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6799 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6800 if (wp->w_buffer->b_p_ro)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6801 {
4795
8360a59aa04b updated for version 7.3.1144
Bram Moolenaar <bram@vim.org>
parents: 4736
diff changeset
6802 STRCPY(p + len, _("[RO]"));
10928
5b3e671ef6a2 patch 8.0.0353: if [RO] is translated it may be truncated
Christian Brabandt <cb@256bit.org>
parents: 10801
diff changeset
6803 len += (int)STRLEN(p + len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6804 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6805
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6806 this_ru_col = ru_col - (Columns - W_WIDTH(wp));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6807 if (this_ru_col < (W_WIDTH(wp) + 1) / 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6808 this_ru_col = (W_WIDTH(wp) + 1) / 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6809 if (this_ru_col <= 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6810 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6811 p = (char_u *)"<"; /* No room for file name! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6812 len = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6813 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6814 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6815 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6816 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6817 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6818 int clen = 0, i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6819
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6820 /* Count total number of display cells. */
2338
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2332
diff changeset
6821 clen = mb_string2cells(p, -1);
da6ec32d8d8f Added strwidth() and strchars() functions.
Bram Moolenaar <bram@vim.org>
parents: 2332
diff changeset
6822
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6823 /* Find first character that will fit.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6824 * Going from start to end is much faster for DBCS. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6825 for (i = 0; p[i] != NUL && clen >= this_ru_col - 1;
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
6826 i += (*mb_ptr2len)(p + i))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6827 clen -= (*mb_ptr2cells)(p + i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6828 len = clen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6829 if (i > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6830 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6831 p = p + i - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6832 *p = '<';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6833 ++len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6834 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6835
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6836 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6837 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6838 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6839 if (len > this_ru_col - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6840 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6841 p += len - (this_ru_col - 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6842 *p = '<';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6843 len = this_ru_col - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6844 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6845
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6846 row = W_WINROW(wp) + wp->w_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6847 screen_puts(p, row, W_WINCOL(wp), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6848 screen_fill(row, row + 1, len + W_WINCOL(wp),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6849 this_ru_col + W_WINCOL(wp), fillchar, fillchar, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6850
9645
123d3c102035 commit https://github.com/vim/vim/commit/73ac0c4281a3606651604a3cbcc334bfb3859a87
Christian Brabandt <cb@256bit.org>
parents: 9489
diff changeset
6851 if (get_keymap_str(wp, (char_u *)"<%s>", NameBuff, MAXPATHL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6852 && (int)(this_ru_col - len) > (int)(STRLEN(NameBuff) + 1))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6853 screen_puts(NameBuff, row, (int)(this_ru_col - STRLEN(NameBuff)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6854 - 1 + W_WINCOL(wp)), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6855
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6856 #ifdef FEAT_CMDL_INFO
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6857 win_redr_ruler(wp, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6858 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6859 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6860
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6861 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6862 * May need to draw the character below the vertical separator.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6863 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6864 if (wp->w_vsep_width != 0 && wp->w_status_height != 0 && redrawing())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6865 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6866 if (stl_connected(wp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6867 fillchar = fillchar_status(&attr, wp == curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6868 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6869 fillchar = fillchar_vsep(&attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6870 screen_putchar(fillchar, W_WINROW(wp) + wp->w_height, W_ENDCOL(wp),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6871 attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6872 }
1910
1287e2bbeb40 updated for version 7.2-207
vimboss
parents: 1906
diff changeset
6873 busy = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6874 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6875
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
6876 #ifdef FEAT_STL_OPT
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
6877 /*
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
6878 * Redraw the status line according to 'statusline' and take care of any
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
6879 * errors encountered.
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
6880 */
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
6881 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6882 redraw_custom_statusline(win_T *wp)
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
6883 {
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
6884 static int entered = FALSE;
8847
470ea7526cc6 commit https://github.com/vim/vim/commit/a742e084b677f76c67e9e52c4f9fb9ab24002e20
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
6885 int saved_did_emsg = did_emsg;
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
6886
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
6887 /* When called recursively return. This can happen when the statusline
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
6888 * contains an expression that triggers a redraw. */
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
6889 if (entered)
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
6890 return;
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
6891 entered = TRUE;
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
6892
8847
470ea7526cc6 commit https://github.com/vim/vim/commit/a742e084b677f76c67e9e52c4f9fb9ab24002e20
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
6893 did_emsg = FALSE;
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
6894 win_redr_custom(wp, FALSE);
8847
470ea7526cc6 commit https://github.com/vim/vim/commit/a742e084b677f76c67e9e52c4f9fb9ab24002e20
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
6895 if (did_emsg)
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
6896 {
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
6897 /* When there is an error disable the statusline, otherwise the
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
6898 * display is messed up with errors and a redraw triggers the problem
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
6899 * again and again. */
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
6900 set_string_option_direct((char_u *)"statusline", -1,
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
6901 (char_u *)"", OPT_FREE | (*wp->w_p_stl != NUL
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 688
diff changeset
6902 ? OPT_LOCAL : OPT_GLOBAL), SID_ERROR);
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
6903 }
8847
470ea7526cc6 commit https://github.com/vim/vim/commit/a742e084b677f76c67e9e52c4f9fb9ab24002e20
Christian Brabandt <cb@256bit.org>
parents: 8819
diff changeset
6904 did_emsg |= saved_did_emsg;
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
6905 entered = FALSE;
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
6906 }
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
6907 #endif
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
6908
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6909 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6910 * Return TRUE if the status line of window "wp" is connected to the status
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6911 * line of the window right of it. If not, then it's a vertical separator.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6912 * Only call if (wp->w_vsep_width != 0).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6913 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6914 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6915 stl_connected(win_T *wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6916 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6917 frame_T *fr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6918
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6919 fr = wp->w_frame;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6920 while (fr->fr_parent != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6921 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6922 if (fr->fr_parent->fr_layout == FR_COL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6923 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6924 if (fr->fr_next != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6925 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6926 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6927 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6928 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6929 if (fr->fr_next != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6930 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6931 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6932 fr = fr->fr_parent;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6933 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6934 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6935 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6936
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6937 #endif /* FEAT_WINDOWS */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6938
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6939 #if defined(FEAT_WINDOWS) || defined(FEAT_STL_OPT) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6940 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6941 * Get the value to show for the language mappings, active 'keymap'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6942 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6943 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6944 get_keymap_str(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6945 win_T *wp,
9645
123d3c102035 commit https://github.com/vim/vim/commit/73ac0c4281a3606651604a3cbcc334bfb3859a87
Christian Brabandt <cb@256bit.org>
parents: 9489
diff changeset
6946 char_u *fmt, /* format string containing one %s item */
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6947 char_u *buf, /* buffer for the result */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6948 int len) /* length of buffer */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6949 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6950 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6951
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6952 if (wp->w_buffer->b_p_iminsert != B_IMODE_LMAP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6953 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6954
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6955 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6956 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6957 buf_T *old_curbuf = curbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6958 win_T *old_curwin = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6959 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6960
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6961 curbuf = wp->w_buffer;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6962 curwin = wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6963 STRCPY(buf, "b:keymap_name"); /* must be writable */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6964 ++emsg_skip;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
6965 s = p = eval_to_string(buf, NULL, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6966 --emsg_skip;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6967 curbuf = old_curbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6968 curwin = old_curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6969 if (p == NULL || *p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6970 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6971 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6972 #ifdef FEAT_KEYMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6973 if (wp->w_buffer->b_kmap_state & KEYMAP_LOADED)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6974 p = wp->w_buffer->b_p_keymap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6975 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6976 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6977 p = (char_u *)"lang";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6978 }
9645
123d3c102035 commit https://github.com/vim/vim/commit/73ac0c4281a3606651604a3cbcc334bfb3859a87
Christian Brabandt <cb@256bit.org>
parents: 9489
diff changeset
6979 if (vim_snprintf((char *)buf, len, (char *)fmt, p) > len - 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6980 buf[0] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6981 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6982 vim_free(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6983 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6984 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6985 return buf[0] != NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6986 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6987 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6988
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6989 #if defined(FEAT_STL_OPT) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6990 /*
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
6991 * Redraw the status line or ruler of window "wp".
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
6992 * When "wp" is NULL redraw the tab pages line from 'tabline'.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6993 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6994 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6995 win_redr_custom(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6996 win_T *wp,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
6997 int draw_ruler) /* TRUE or FALSE */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6998 {
5539
62c720661f81 updated for version 7.4.118
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
6999 static int entered = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7000 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7001 int curattr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7002 int row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7003 int col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7004 int maxwidth;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7005 int width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7006 int n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7007 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7008 int fillchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7009 char_u buf[MAXPATHL];
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7010 char_u *stl;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7011 char_u *p;
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7012 struct stl_hlrec hltab[STL_MAX_ITEM];
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7013 struct stl_hlrec tabtab[STL_MAX_ITEM];
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7014 int use_sandbox = FALSE;
2693
0606065af0a0 updated for version 7.3.111
Bram Moolenaar <bram@vim.org>
parents: 2675
diff changeset
7015 win_T *ewp;
0606065af0a0 updated for version 7.3.111
Bram Moolenaar <bram@vim.org>
parents: 2675
diff changeset
7016 int p_crb_save;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7017
5539
62c720661f81 updated for version 7.4.118
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
7018 /* There is a tiny chance that this gets called recursively: When
62c720661f81 updated for version 7.4.118
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
7019 * redrawing a status line triggers redrawing the ruler or tabline.
62c720661f81 updated for version 7.4.118
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
7020 * Avoid trouble by not allowing recursion. */
62c720661f81 updated for version 7.4.118
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
7021 if (entered)
62c720661f81 updated for version 7.4.118
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
7022 return;
62c720661f81 updated for version 7.4.118
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
7023 entered = TRUE;
62c720661f81 updated for version 7.4.118
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
7024
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7025 /* setup environment for the task at hand */
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7026 if (wp == NULL)
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7027 {
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7028 /* Use 'tabline'. Always at the first line of the screen. */
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7029 stl = p_tal;
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7030 row = 0;
707
111b7dcc8a17 updated for version 7.0213
vimboss
parents: 699
diff changeset
7031 fillchar = ' ';
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
7032 attr = HL_ATTR(HLF_TPF);
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7033 maxwidth = Columns;
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7034 # ifdef FEAT_EVAL
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7035 use_sandbox = was_set_insecurely((char_u *)"tabline", 0);
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7036 # endif
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7037 }
40
f1d2a58883b9 updated for version 7.0024
vimboss
parents: 39
diff changeset
7038 else
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7039 {
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7040 row = W_WINROW(wp) + wp->w_height;
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7041 fillchar = fillchar_status(&attr, wp == curwin);
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7042 maxwidth = W_WIDTH(wp);
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7043
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7044 if (draw_ruler)
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7045 {
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7046 stl = p_ruf;
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7047 /* advance past any leading group spec - implicit in ru_col */
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7048 if (*stl == '%')
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7049 {
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7050 if (*++stl == '-')
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7051 stl++;
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7052 if (atoi((char *)stl))
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7053 while (VIM_ISDIGIT(*stl))
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7054 stl++;
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7055 if (*stl++ != '(')
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7056 stl = p_ruf;
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7057 }
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
7058 #ifdef FEAT_WINDOWS
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7059 col = ru_col - (Columns - W_WIDTH(wp));
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7060 if (col < (W_WIDTH(wp) + 1) / 2)
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7061 col = (W_WIDTH(wp) + 1) / 2;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7062 #else
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7063 col = ru_col;
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7064 if (col > (Columns + 1) / 2)
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7065 col = (Columns + 1) / 2;
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7066 #endif
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7067 maxwidth = W_WIDTH(wp) - col;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7068 #ifdef FEAT_WINDOWS
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7069 if (!wp->w_status_height)
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7070 #endif
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7071 {
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7072 row = Rows - 1;
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7073 --maxwidth; /* writing in last column may cause scrolling */
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7074 fillchar = ' ';
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7075 attr = 0;
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7076 }
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7077
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7078 # ifdef FEAT_EVAL
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7079 use_sandbox = was_set_insecurely((char_u *)"rulerformat", 0);
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7080 # endif
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7081 }
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7082 else
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7083 {
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7084 if (*wp->w_p_stl != NUL)
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7085 stl = wp->w_p_stl;
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7086 else
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7087 stl = p_stl;
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7088 # ifdef FEAT_EVAL
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7089 use_sandbox = was_set_insecurely((char_u *)"statusline",
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7090 *wp->w_p_stl == NUL ? 0 : OPT_LOCAL);
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7091 # endif
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7092 }
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7093
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
7094 #ifdef FEAT_WINDOWS
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7095 col += W_WINCOL(wp);
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7096 #endif
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7097 }
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7098
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7099 if (maxwidth <= 0)
5539
62c720661f81 updated for version 7.4.118
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
7100 goto theend;
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
7101
2693
0606065af0a0 updated for version 7.3.111
Bram Moolenaar <bram@vim.org>
parents: 2675
diff changeset
7102 /* Temporarily reset 'cursorbind', we don't want a side effect from moving
0606065af0a0 updated for version 7.3.111
Bram Moolenaar <bram@vim.org>
parents: 2675
diff changeset
7103 * the cursor away and back. */
0606065af0a0 updated for version 7.3.111
Bram Moolenaar <bram@vim.org>
parents: 2675
diff changeset
7104 ewp = wp == NULL ? curwin : wp;
0606065af0a0 updated for version 7.3.111
Bram Moolenaar <bram@vim.org>
parents: 2675
diff changeset
7105 p_crb_save = ewp->w_p_crb;
0606065af0a0 updated for version 7.3.111
Bram Moolenaar <bram@vim.org>
parents: 2675
diff changeset
7106 ewp->w_p_crb = FALSE;
0606065af0a0 updated for version 7.3.111
Bram Moolenaar <bram@vim.org>
parents: 2675
diff changeset
7107
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7108 /* Make a copy, because the statusline may include a function call that
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7109 * might change the option value and free the memory. */
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7110 stl = vim_strsave(stl);
2693
0606065af0a0 updated for version 7.3.111
Bram Moolenaar <bram@vim.org>
parents: 2675
diff changeset
7111 width = build_stl_str_hl(ewp, buf, sizeof(buf),
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7112 stl, use_sandbox,
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7113 fillchar, maxwidth, hltab, tabtab);
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
7114 vim_free(stl);
2693
0606065af0a0 updated for version 7.3.111
Bram Moolenaar <bram@vim.org>
parents: 2675
diff changeset
7115 ewp->w_p_crb = p_crb_save;
2661
a03f7551bacc updated for version 7.3.081
Bram Moolenaar <bram@vim.org>
parents: 2553
diff changeset
7116
a03f7551bacc updated for version 7.3.081
Bram Moolenaar <bram@vim.org>
parents: 2553
diff changeset
7117 /* Make all characters printable. */
a03f7551bacc updated for version 7.3.081
Bram Moolenaar <bram@vim.org>
parents: 2553
diff changeset
7118 p = transstr(buf);
a03f7551bacc updated for version 7.3.081
Bram Moolenaar <bram@vim.org>
parents: 2553
diff changeset
7119 if (p != NULL)
a03f7551bacc updated for version 7.3.081
Bram Moolenaar <bram@vim.org>
parents: 2553
diff changeset
7120 {
a03f7551bacc updated for version 7.3.081
Bram Moolenaar <bram@vim.org>
parents: 2553
diff changeset
7121 vim_strncpy(buf, p, sizeof(buf) - 1);
a03f7551bacc updated for version 7.3.081
Bram Moolenaar <bram@vim.org>
parents: 2553
diff changeset
7122 vim_free(p);
a03f7551bacc updated for version 7.3.081
Bram Moolenaar <bram@vim.org>
parents: 2553
diff changeset
7123 }
a03f7551bacc updated for version 7.3.081
Bram Moolenaar <bram@vim.org>
parents: 2553
diff changeset
7124
a03f7551bacc updated for version 7.3.081
Bram Moolenaar <bram@vim.org>
parents: 2553
diff changeset
7125 /* fill up with "fillchar" */
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 834
diff changeset
7126 len = (int)STRLEN(buf);
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1869
diff changeset
7127 while (width < maxwidth && len < (int)sizeof(buf) - 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7128 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7129 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7130 len += (*mb_char2bytes)(fillchar, buf + len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7131 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7132 buf[len++] = fillchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7133 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7134 ++width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7135 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7136 buf[len] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7137
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7138 /*
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7139 * Draw each snippet with the specified highlighting.
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7140 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7141 curattr = attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7142 p = buf;
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7143 for (n = 0; hltab[n].start != NULL; n++)
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7144 {
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7145 len = (int)(hltab[n].start - p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7146 screen_puts_len(p, len, row, col, curattr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7147 col += vim_strnsize(p, len);
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7148 p = hltab[n].start;
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7149
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7150 if (hltab[n].userhl == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7151 curattr = attr;
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7152 else if (hltab[n].userhl < 0)
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7153 curattr = syn_id2attr(-hltab[n].userhl);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7154 #ifdef FEAT_WINDOWS
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
7155 else if (wp != NULL && wp != curwin && wp->w_status_height != 0)
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7156 curattr = highlight_stlnc[hltab[n].userhl - 1];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7157 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7158 else
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7159 curattr = highlight_user[hltab[n].userhl - 1];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7160 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7161 screen_puts(p, row, col, curattr);
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7162
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7163 if (wp == NULL)
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7164 {
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7165 /* Fill the TabPageIdxs[] array for clicking in the tab pagesline. */
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7166 col = 0;
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7167 len = 0;
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7168 p = buf;
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7169 fillchar = 0;
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7170 for (n = 0; tabtab[n].start != NULL; n++)
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7171 {
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7172 len += vim_strnsize(p, (int)(tabtab[n].start - p));
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7173 while (col < len)
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7174 TabPageIdxs[col++] = fillchar;
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7175 p = tabtab[n].start;
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7176 fillchar = tabtab[n].userhl;
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7177 }
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7178 while (col < Columns)
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7179 TabPageIdxs[col++] = fillchar;
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7180 }
5539
62c720661f81 updated for version 7.4.118
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
7181
62c720661f81 updated for version 7.4.118
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
7182 theend:
62c720661f81 updated for version 7.4.118
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
7183 entered = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7184 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7185
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7186 #endif /* FEAT_STL_OPT */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7187
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7188 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7189 * Output a single character directly to the screen and update ScreenLines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7190 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7191 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7192 screen_putchar(int c, int row, int col, int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7193 {
3549
f52d2ea0f81c updated for version 7.3.535
Bram Moolenaar <bram@vim.org>
parents: 3427
diff changeset
7194 char_u buf[MB_MAXBYTES + 1];
f52d2ea0f81c updated for version 7.3.535
Bram Moolenaar <bram@vim.org>
parents: 3427
diff changeset
7195
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7196 #ifdef FEAT_MBYTE
3549
f52d2ea0f81c updated for version 7.3.535
Bram Moolenaar <bram@vim.org>
parents: 3427
diff changeset
7197 if (has_mbyte)
f52d2ea0f81c updated for version 7.3.535
Bram Moolenaar <bram@vim.org>
parents: 3427
diff changeset
7198 buf[(*mb_char2bytes)(c, buf)] = NUL;
f52d2ea0f81c updated for version 7.3.535
Bram Moolenaar <bram@vim.org>
parents: 3427
diff changeset
7199 else
f52d2ea0f81c updated for version 7.3.535
Bram Moolenaar <bram@vim.org>
parents: 3427
diff changeset
7200 #endif
f52d2ea0f81c updated for version 7.3.535
Bram Moolenaar <bram@vim.org>
parents: 3427
diff changeset
7201 {
f52d2ea0f81c updated for version 7.3.535
Bram Moolenaar <bram@vim.org>
parents: 3427
diff changeset
7202 buf[0] = c;
f52d2ea0f81c updated for version 7.3.535
Bram Moolenaar <bram@vim.org>
parents: 3427
diff changeset
7203 buf[1] = NUL;
f52d2ea0f81c updated for version 7.3.535
Bram Moolenaar <bram@vim.org>
parents: 3427
diff changeset
7204 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7205 screen_puts(buf, row, col, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7206 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7207
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7208 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7209 * Get a single character directly from ScreenLines into "bytes[]".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7210 * Also return its attribute in *attrp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7211 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7212 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7213 screen_getbytes(int row, int col, char_u *bytes, int *attrp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7214 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7215 unsigned off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7217 /* safety check */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7218 if (ScreenLines != NULL && row < screen_Rows && col < screen_Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7219 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7220 off = LineOffset[row] + col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7221 *attrp = ScreenAttrs[off];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7222 bytes[0] = ScreenLines[off];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7223 bytes[1] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7224
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7225 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7226 if (enc_utf8 && ScreenLinesUC[off] != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7227 bytes[utfc_char2bytes(off, bytes)] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7228 else if (enc_dbcs == DBCS_JPNU && ScreenLines[off] == 0x8e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7229 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7230 bytes[0] = ScreenLines[off];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7231 bytes[1] = ScreenLines2[off];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7232 bytes[2] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7233 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7234 else if (enc_dbcs && MB_BYTE2LEN(bytes[0]) > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7235 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7236 bytes[1] = ScreenLines[off + 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7237 bytes[2] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7238 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7239 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7240 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7241 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7242
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7243 #ifdef FEAT_MBYTE
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7697
diff changeset
7244 static int screen_comp_differs(int, int*);
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7245
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7246 /*
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7247 * Return TRUE if composing characters for screen posn "off" differs from
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7248 * composing characters in "u8cc".
2124
dc8a5699253b updated for version 7.2.406
Bram Moolenaar <bram@zimbu.org>
parents: 2122
diff changeset
7249 * Only to be used when ScreenLinesUC[off] != 0.
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7250 */
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7251 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7252 screen_comp_differs(int off, int *u8cc)
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7253 {
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7254 int i;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7255
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7256 for (i = 0; i < Screen_mco; ++i)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7257 {
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7258 if (ScreenLinesC[i][off] != (u8char_T)u8cc[i])
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7259 return TRUE;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7260 if (u8cc[i] == 0)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7261 break;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7262 }
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7263 return FALSE;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7264 }
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7265 #endif
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7266
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7267 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7268 * Put string '*text' on the screen at position 'row' and 'col', with
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7269 * attributes 'attr', and update ScreenLines[] and ScreenAttrs[].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7270 * Note: only outputs within one row, message is truncated at screen boundary!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7271 * Note: if ScreenLines[], row and/or col is invalid, nothing is done.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7272 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7273 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7274 screen_puts(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7275 char_u *text,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7276 int row,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7277 int col,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7278 int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7279 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7280 screen_puts_len(text, -1, row, col, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7281 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7282
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7283 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7284 * Like screen_puts(), but output "text[len]". When "len" is -1 output up to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7285 * a NUL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7286 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7287 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7288 screen_puts_len(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7289 char_u *text,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7290 int textlen,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7291 int row,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7292 int col,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7293 int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7294 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7295 unsigned off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7296 char_u *ptr = text;
5923
463ef551e9f6 updated for version 7.4.303
Bram Moolenaar <bram@vim.org>
parents: 5921
diff changeset
7297 int len = textlen;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7298 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7299 #ifdef FEAT_MBYTE
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
7300 unsigned max_off;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7301 int mbyte_blen = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7302 int mbyte_cells = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7303 int u8c = 0;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7304 int u8cc[MAX_MCO];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7305 int clear_next_cell = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7306 # ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7307 int prev_c = 0; /* previous Arabic character */
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7308 int pc, nc, nc1;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7309 int pcc[MAX_MCO];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7310 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7311 #endif
1843
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7312 #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7313 int force_redraw_this;
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7314 int force_redraw_next = FALSE;
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7315 #endif
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7316 int need_redraw;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7317
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7318 if (ScreenLines == NULL || row >= screen_Rows) /* safety check */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7319 return;
1843
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7320 off = LineOffset[row] + col;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7321
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
7322 #ifdef FEAT_MBYTE
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
7323 /* When drawing over the right halve of a double-wide char clear out the
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
7324 * left halve. Only needed in a terminal. */
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1677
diff changeset
7325 if (has_mbyte && col > 0 && col < screen_Columns
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
7326 # ifdef FEAT_GUI
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
7327 && !gui.in_use
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
7328 # endif
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
7329 && mb_fix_col(col, row) != col)
1843
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7330 {
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7331 ScreenLines[off - 1] = ' ';
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7332 ScreenAttrs[off - 1] = 0;
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7333 if (enc_utf8)
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7334 {
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7335 ScreenLinesUC[off - 1] = 0;
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7336 ScreenLinesC[0][off - 1] = 0;
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7337 }
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7338 /* redraw the previous cell, make it empty */
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7339 screen_char(off - 1, row, col - 1);
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7340 /* force the cell at "col" to be redrawn */
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7341 force_redraw_next = TRUE;
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7342 }
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7343 #endif
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7344
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
7345 #ifdef FEAT_MBYTE
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
7346 max_off = LineOffset[row] + screen_Columns;
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
7347 #endif
1340
8e42199f5121 updated for version 7.1-054
vimboss
parents: 1331
diff changeset
7348 while (col < screen_Columns
8e42199f5121 updated for version 7.1-054
vimboss
parents: 1331
diff changeset
7349 && (len < 0 || (int)(ptr - text) < len)
8e42199f5121 updated for version 7.1-054
vimboss
parents: 1331
diff changeset
7350 && *ptr != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7351 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7352 c = *ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7353 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7354 /* check if this is the first byte of a multibyte */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7355 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7356 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7357 if (enc_utf8 && len > 0)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
7358 mbyte_blen = utfc_ptr2len_len(ptr, (int)((text + len) - ptr));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7359 else
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
7360 mbyte_blen = (*mb_ptr2len)(ptr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7361 if (enc_dbcs == DBCS_JPNU && c == 0x8e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7362 mbyte_cells = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7363 else if (enc_dbcs != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7364 mbyte_cells = mbyte_blen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7365 else /* enc_utf8 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7366 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7367 if (len >= 0)
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7368 u8c = utfc_ptr2char_len(ptr, u8cc,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7369 (int)((text + len) - ptr));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7370 else
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7371 u8c = utfc_ptr2char(ptr, u8cc);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7372 mbyte_cells = utf_char2cells(u8c);
1401
e351146e7974 updated for version 7.1-116
vimboss
parents: 1378
diff changeset
7373 # ifdef UNICODE16
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7374 /* Non-BMP character: display as ? or fullwidth ?. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7375 if (u8c >= 0x10000)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7376 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7377 u8c = (mbyte_cells == 2) ? 0xff1f : (int)'?';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7378 if (attr == 0)
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
7379 attr = HL_ATTR(HLF_8);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7380 }
1401
e351146e7974 updated for version 7.1-116
vimboss
parents: 1378
diff changeset
7381 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7382 # ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7383 if (p_arshape && !p_tbidi && ARABIC_CHAR(u8c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7384 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7385 /* Do Arabic shaping. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7386 if (len >= 0 && (int)(ptr - text) + mbyte_blen >= len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7387 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7388 /* Past end of string to be displayed. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7389 nc = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7390 nc1 = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7391 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7392 else
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7393 {
1994
439f44b874a7 updated for version 7.2-291
vimboss
parents: 1984
diff changeset
7394 nc = utfc_ptr2char_len(ptr + mbyte_blen, pcc,
439f44b874a7 updated for version 7.2-291
vimboss
parents: 1984
diff changeset
7395 (int)((text + len) - ptr - mbyte_blen));
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7396 nc1 = pcc[0];
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7397 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7398 pc = prev_c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7399 prev_c = u8c;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7400 u8c = arabic_shape(u8c, &c, &u8cc[0], nc, nc1, pc);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7401 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7402 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7403 prev_c = u8c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7404 # endif
2055
4aa4510d548c updated for version 7.2.341
Bram Moolenaar <bram@zimbu.org>
parents: 2008
diff changeset
7405 if (col + mbyte_cells > screen_Columns)
4aa4510d548c updated for version 7.2.341
Bram Moolenaar <bram@zimbu.org>
parents: 2008
diff changeset
7406 {
4aa4510d548c updated for version 7.2.341
Bram Moolenaar <bram@zimbu.org>
parents: 2008
diff changeset
7407 /* Only 1 cell left, but character requires 2 cells:
4aa4510d548c updated for version 7.2.341
Bram Moolenaar <bram@zimbu.org>
parents: 2008
diff changeset
7408 * display a '>' in the last column to avoid wrapping. */
4aa4510d548c updated for version 7.2.341
Bram Moolenaar <bram@zimbu.org>
parents: 2008
diff changeset
7409 c = '>';
4aa4510d548c updated for version 7.2.341
Bram Moolenaar <bram@zimbu.org>
parents: 2008
diff changeset
7410 mbyte_cells = 1;
4aa4510d548c updated for version 7.2.341
Bram Moolenaar <bram@zimbu.org>
parents: 2008
diff changeset
7411 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7412 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7413 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7414 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7415
1843
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7416 #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7417 force_redraw_this = force_redraw_next;
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7418 force_redraw_next = FALSE;
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7419 #endif
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7420
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7421 need_redraw = ScreenLines[off] != c
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7422 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7423 || (mbyte_cells == 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7424 && ScreenLines[off + 1] != (enc_dbcs ? ptr[1] : 0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7425 || (enc_dbcs == DBCS_JPNU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7426 && c == 0x8e
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7427 && ScreenLines2[off] != ptr[1])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7428 || (enc_utf8
2124
dc8a5699253b updated for version 7.2.406
Bram Moolenaar <bram@zimbu.org>
parents: 2122
diff changeset
7429 && (ScreenLinesUC[off] !=
dc8a5699253b updated for version 7.2.406
Bram Moolenaar <bram@zimbu.org>
parents: 2122
diff changeset
7430 (u8char_T)(c < 0x80 && u8cc[0] == 0 ? 0 : u8c)
dc8a5699253b updated for version 7.2.406
Bram Moolenaar <bram@zimbu.org>
parents: 2122
diff changeset
7431 || (ScreenLinesUC[off] != 0
dc8a5699253b updated for version 7.2.406
Bram Moolenaar <bram@zimbu.org>
parents: 2122
diff changeset
7432 && screen_comp_differs(off, u8cc))))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7433 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7434 || ScreenAttrs[off] != attr
1843
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7435 || exmode_active;
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7436
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7437 if (need_redraw
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7438 #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7439 || force_redraw_this
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7440 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7441 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7442 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7443 #if defined(FEAT_GUI) || defined(UNIX)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7444 /* The bold trick makes a single row of pixels appear in the next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7445 * character. When a bold character is removed, the next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7446 * character should be redrawn too. This happens for our own GUI
1843
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7447 * and for some xterms. */
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7448 if (need_redraw && ScreenLines[off] != ' ' && (
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7449 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7450 gui.in_use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7451 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7452 # if defined(FEAT_GUI) && defined(UNIX)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7453 ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7454 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7455 # ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7456 term_is_xterm
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7457 # endif
1843
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7458 ))
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7459 {
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7460 int n = ScreenAttrs[off];
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7461
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7462 if (n > HL_ALL)
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7463 n = syn_attr2attr(n);
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7464 if (n & HL_BOLD)
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7465 force_redraw_next = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7466 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7467 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7468 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7469 /* When at the end of the text and overwriting a two-cell
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7470 * character with a one-cell character, need to clear the next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7471 * cell. Also when overwriting the left halve of a two-cell char
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7472 * with the right halve of a two-cell char. Do this only once
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7473 * (mb_off2cells() may return 2 on the right halve). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7474 if (clear_next_cell)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7475 clear_next_cell = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7476 else if (has_mbyte
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7477 && (len < 0 ? ptr[mbyte_blen] == NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7478 : ptr + mbyte_blen >= text + len)
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
7479 && ((mbyte_cells == 1 && (*mb_off2cells)(off, max_off) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7480 || (mbyte_cells == 2
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
7481 && (*mb_off2cells)(off, max_off) == 1
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
7482 && (*mb_off2cells)(off + 1, max_off) > 1)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7483 clear_next_cell = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7484
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7485 /* Make sure we never leave a second byte of a double-byte behind,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7486 * it confuses mb_off2cells(). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7487 if (enc_dbcs
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
7488 && ((mbyte_cells == 1 && (*mb_off2cells)(off, max_off) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7489 || (mbyte_cells == 2
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
7490 && (*mb_off2cells)(off, max_off) == 1
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
7491 && (*mb_off2cells)(off + 1, max_off) > 1)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7492 ScreenLines[off + mbyte_blen] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7493 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7494 ScreenLines[off] = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7495 ScreenAttrs[off] = attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7496 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7497 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7498 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7499 if (c < 0x80 && u8cc[0] == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7500 ScreenLinesUC[off] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7501 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7502 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7503 int i;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7504
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7505 ScreenLinesUC[off] = u8c;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7506 for (i = 0; i < Screen_mco; ++i)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7507 {
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7508 ScreenLinesC[i][off] = u8cc[i];
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7509 if (u8cc[i] == 0)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7510 break;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
7511 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7512 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7513 if (mbyte_cells == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7514 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7515 ScreenLines[off + 1] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7516 ScreenAttrs[off + 1] = attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7517 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7518 screen_char(off, row, col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7519 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7520 else if (mbyte_cells == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7521 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7522 ScreenLines[off + 1] = ptr[1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7523 ScreenAttrs[off + 1] = attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7524 screen_char_2(off, row, col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7525 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7526 else if (enc_dbcs == DBCS_JPNU && c == 0x8e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7527 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7528 ScreenLines2[off] = ptr[1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7529 screen_char(off, row, col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7530 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7531 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7532 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7533 screen_char(off, row, col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7534 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7535 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7536 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7537 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7538 off += mbyte_cells;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7539 col += mbyte_cells;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7540 ptr += mbyte_blen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7541 if (clear_next_cell)
5923
463ef551e9f6 updated for version 7.4.303
Bram Moolenaar <bram@vim.org>
parents: 5921
diff changeset
7542 {
463ef551e9f6 updated for version 7.4.303
Bram Moolenaar <bram@vim.org>
parents: 5921
diff changeset
7543 /* This only happens at the end, display one space next. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7544 ptr = (char_u *)" ";
5923
463ef551e9f6 updated for version 7.4.303
Bram Moolenaar <bram@vim.org>
parents: 5921
diff changeset
7545 len = -1;
463ef551e9f6 updated for version 7.4.303
Bram Moolenaar <bram@vim.org>
parents: 5921
diff changeset
7546 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7547 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7548 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7549 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7550 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7551 ++off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7552 ++col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7553 ++ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7554 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7555 }
1843
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7556
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7557 #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7558 /* If we detected the next character needs to be redrawn, but the text
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7559 * doesn't extend up to there, update the character here. */
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7560 if (force_redraw_next && col < screen_Columns)
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7561 {
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7562 # ifdef FEAT_MBYTE
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7563 if (enc_dbcs != 0 && dbcs_off2cells(off, max_off) > 1)
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7564 screen_char_2(off, row, col);
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7565 else
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7566 # endif
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7567 screen_char(off, row, col);
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7568 }
823e9ddf23f7 updated for version 7.2-141
vimboss
parents: 1842
diff changeset
7569 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7570 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7571
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7572 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7573 /*
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7574 * Prepare for 'hlsearch' highlighting.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7575 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7576 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7577 start_search_hl(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7578 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7579 if (p_hls && !no_hlsearch)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7580 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7581 last_pat_prog(&search_hl.rm);
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
7582 search_hl.attr = HL_ATTR(HLF_L);
1521
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1504
diff changeset
7583 # ifdef FEAT_RELTIME
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1504
diff changeset
7584 /* Set the time limit to 'redrawtime'. */
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1504
diff changeset
7585 profile_setlimit(p_rdt, &search_hl.tm);
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1504
diff changeset
7586 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7587 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7588 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7589
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7590 /*
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7591 * Clean up for 'hlsearch' highlighting.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7592 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7593 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7594 end_search_hl(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7595 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7596 if (search_hl.rm.regprog != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7597 {
4805
66803af09906 updated for version 7.3.1149
Bram Moolenaar <bram@vim.org>
parents: 4795
diff changeset
7598 vim_regfree(search_hl.rm.regprog);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7599 search_hl.rm.regprog = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7600 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7601 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7602
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7603 /*
2284
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7604 * Init for calling prepare_search_hl().
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7605 */
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7606 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7607 init_search_hl(win_T *wp)
2284
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7608 {
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7609 matchitem_T *cur;
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7610
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7611 /* Setup for match and 'hlsearch' highlighting. Disable any previous
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7612 * match */
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7613 cur = wp->w_match_head;
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7614 while (cur != NULL)
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7615 {
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7616 cur->hl.rm = cur->match;
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7617 if (cur->hlg_id == 0)
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7618 cur->hl.attr = 0;
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7619 else
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7620 cur->hl.attr = syn_id2attr(cur->hlg_id);
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7621 cur->hl.buf = wp->w_buffer;
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7622 cur->hl.lnum = 0;
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7623 cur->hl.first_lnum = 0;
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7624 # ifdef FEAT_RELTIME
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7625 /* Set the time limit to 'redrawtime'. */
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7626 profile_setlimit(p_rdt, &(cur->hl.tm));
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7627 # endif
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7628 cur = cur->next;
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7629 }
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7630 search_hl.buf = wp->w_buffer;
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7631 search_hl.lnum = 0;
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7632 search_hl.first_lnum = 0;
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7633 /* time limit is set at the toplevel, for all windows */
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7634 }
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7635
cca510a8b85b Better init for match highlighting when using conceal feature.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
7636 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7637 * Advance to the match in window "wp" line "lnum" or past it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7638 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7639 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7640 prepare_search_hl(win_T *wp, linenr_T lnum)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7641 {
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7642 matchitem_T *cur; /* points to the match list */
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7643 match_T *shl; /* points to search_hl or a match */
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7644 int shl_flag; /* flag to indicate whether search_hl
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7645 has been processed or not */
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7646 int pos_inprogress; /* marks that position match search is
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7647 in progress */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7648 int n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7649
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7650 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7651 * When using a multi-line pattern, start searching at the top
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7652 * of the window or just after a closed fold.
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7653 * Do this both for search_hl and the match list.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7654 */
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7655 cur = wp->w_match_head;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7656 shl_flag = FALSE;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7657 while (cur != NULL || shl_flag == FALSE)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7658 {
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7659 if (shl_flag == FALSE)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7660 {
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7661 shl = &search_hl;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7662 shl_flag = TRUE;
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7663 }
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7664 else
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7665 shl = &cur->hl;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7666 if (shl->rm.regprog != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7667 && shl->lnum == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7668 && re_multiline(shl->rm.regprog))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7669 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7670 if (shl->first_lnum == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7671 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7672 # ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7673 for (shl->first_lnum = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7674 shl->first_lnum > wp->w_topline; --shl->first_lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7675 if (hasFoldingWin(wp, shl->first_lnum - 1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7676 NULL, NULL, TRUE, NULL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7677 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7678 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7679 shl->first_lnum = wp->w_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7680 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7681 }
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7682 if (cur != NULL)
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7683 cur->pos.cur = 0;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7684 pos_inprogress = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7685 n = 0;
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7686 while (shl->first_lnum < lnum && (shl->rm.regprog != NULL
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7687 || (cur != NULL && pos_inprogress)))
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7688 {
9992
3e3b0ce24b61 commit https://github.com/vim/vim/commit/e17bdffff78ebd6a4e3cff26754cc667557ea810
Christian Brabandt <cb@256bit.org>
parents: 9939
diff changeset
7689 next_search_hl(wp, shl, shl->first_lnum, (colnr_T)n,
3e3b0ce24b61 commit https://github.com/vim/vim/commit/e17bdffff78ebd6a4e3cff26754cc667557ea810
Christian Brabandt <cb@256bit.org>
parents: 9939
diff changeset
7690 shl == &search_hl ? NULL : cur);
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7691 pos_inprogress = cur == NULL || cur->pos.cur == 0
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7692 ? FALSE : TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7693 if (shl->lnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7694 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7695 shl->first_lnum = shl->lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7696 + shl->rm.endpos[0].lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7697 - shl->rm.startpos[0].lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7698 n = shl->rm.endpos[0].col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7699 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7700 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7701 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7702 ++shl->first_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7703 n = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7704 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7705 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7706 }
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7707 if (shl != &search_hl && cur != NULL)
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7708 cur = cur->next;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7709 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7710 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7711
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7712 /*
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1295
diff changeset
7713 * Search for a next 'hlsearch' or match.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7714 * Uses shl->buf.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7715 * Sets shl->lnum and shl->rm contents.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7716 * Note: Assumes a previous match is always before "lnum", unless
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7717 * shl->lnum is zero.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7718 * Careful: Any pointers for buffer lines will become invalid.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7719 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7720 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7721 next_search_hl(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7722 win_T *win,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7723 match_T *shl, /* points to search_hl or a match */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7724 linenr_T lnum,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7725 colnr_T mincol, /* minimal column for a match */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7726 matchitem_T *cur) /* to retrieve match positions if any */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7727 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7728 linenr_T l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7729 colnr_T matchcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7730 long nmatched;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7731
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7732 if (shl->lnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7733 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7734 /* Check for three situations:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7735 * 1. If the "lnum" is below a previous match, start a new search.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7736 * 2. If the previous match includes "mincol", use it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7737 * 3. Continue after the previous match.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7738 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7739 l = shl->lnum + shl->rm.endpos[0].lnum - shl->rm.startpos[0].lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7740 if (lnum > l)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7741 shl->lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7742 else if (lnum < l || shl->rm.endpos[0].col > mincol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7743 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7744 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7745
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7746 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7747 * Repeat searching for a match until one is found that includes "mincol"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7748 * or none is found in this line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7749 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7750 called_emsg = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7751 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7752 {
1521
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1504
diff changeset
7753 #ifdef FEAT_RELTIME
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1504
diff changeset
7754 /* Stop searching after passing the time limit. */
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1504
diff changeset
7755 if (profile_passed_limit(&(shl->tm)))
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1504
diff changeset
7756 {
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1504
diff changeset
7757 shl->lnum = 0; /* no match found in time */
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1504
diff changeset
7758 break;
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1504
diff changeset
7759 }
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1504
diff changeset
7760 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7761 /* Three situations:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7762 * 1. No useful previous match: search from start of line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7763 * 2. Not Vi compatible or empty match: continue at next character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7764 * Break the loop if this is beyond the end of the line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7765 * 3. Vi compatible searching: continue at end of previous match.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7766 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7767 if (shl->lnum == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7768 matchcol = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7769 else if (vim_strchr(p_cpo, CPO_SEARCH) == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7770 || (shl->rm.endpos[0].lnum == 0
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
7771 && shl->rm.endpos[0].col <= shl->rm.startpos[0].col))
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
7772 {
688
bcd2edc4539e updated for version 7.0207
vimboss
parents: 685
diff changeset
7773 char_u *ml;
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
7774
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
7775 matchcol = shl->rm.startpos[0].col;
688
bcd2edc4539e updated for version 7.0207
vimboss
parents: 685
diff changeset
7776 ml = ml_get_buf(shl->buf, lnum, FALSE) + matchcol;
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
7777 if (*ml == NUL)
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
7778 {
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
7779 ++matchcol;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7780 shl->lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7781 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7782 }
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
7783 #ifdef FEAT_MBYTE
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
7784 if (has_mbyte)
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
7785 matchcol += mb_ptr2len(ml);
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
7786 else
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
7787 #endif
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
7788 ++matchcol;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7789 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7790 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7791 matchcol = shl->rm.endpos[0].col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7792
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7793 shl->lnum = lnum;
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7794 if (shl->rm.regprog != NULL)
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7795 {
6394
5f49ac8426df updated for version 7.4.528
Bram Moolenaar <bram@vim.org>
parents: 6371
diff changeset
7796 /* Remember whether shl->rm is using a copy of the regprog in
5f49ac8426df updated for version 7.4.528
Bram Moolenaar <bram@vim.org>
parents: 6371
diff changeset
7797 * cur->match. */
5f49ac8426df updated for version 7.4.528
Bram Moolenaar <bram@vim.org>
parents: 6371
diff changeset
7798 int regprog_is_copy = (shl != &search_hl && cur != NULL
5f49ac8426df updated for version 7.4.528
Bram Moolenaar <bram@vim.org>
parents: 6371
diff changeset
7799 && shl == &cur->hl
5f49ac8426df updated for version 7.4.528
Bram Moolenaar <bram@vim.org>
parents: 6371
diff changeset
7800 && cur->match.regprog == cur->hl.rm.regprog);
5f49ac8426df updated for version 7.4.528
Bram Moolenaar <bram@vim.org>
parents: 6371
diff changeset
7801
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7802 nmatched = vim_regexec_multi(&shl->rm, win, shl->buf, lnum,
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7803 matchcol,
1521
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1504
diff changeset
7804 #ifdef FEAT_RELTIME
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7805 &(shl->tm)
1521
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1504
diff changeset
7806 #else
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7807 NULL
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7808 #endif
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7809 );
6394
5f49ac8426df updated for version 7.4.528
Bram Moolenaar <bram@vim.org>
parents: 6371
diff changeset
7810 /* Copy the regprog, in case it got freed and recompiled. */
5f49ac8426df updated for version 7.4.528
Bram Moolenaar <bram@vim.org>
parents: 6371
diff changeset
7811 if (regprog_is_copy)
5f49ac8426df updated for version 7.4.528
Bram Moolenaar <bram@vim.org>
parents: 6371
diff changeset
7812 cur->match.regprog = cur->hl.rm.regprog;
5f49ac8426df updated for version 7.4.528
Bram Moolenaar <bram@vim.org>
parents: 6371
diff changeset
7813
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7814 if (called_emsg || got_int)
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7815 {
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7816 /* Error while handling regexp: stop using this regexp. */
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7817 if (shl == &search_hl)
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7818 {
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7819 /* don't free regprog in the match list, it's a copy */
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7820 vim_regfree(shl->rm.regprog);
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7821 SET_NO_HLSEARCH(TRUE);
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7822 }
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7823 shl->rm.regprog = NULL;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7824 shl->lnum = 0;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7825 got_int = FALSE; /* avoid the "Type :quit to exit Vim"
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7826 message */
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7827 break;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7828 }
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7829 }
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7830 else if (cur != NULL)
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7831 nmatched = next_search_hl_pos(shl, lnum, &(cur->pos), matchcol);
5987
03d260a8ea0c updated for version 7.4.334
Bram Moolenaar <bram@vim.org>
parents: 5985
diff changeset
7832 else
03d260a8ea0c updated for version 7.4.334
Bram Moolenaar <bram@vim.org>
parents: 5985
diff changeset
7833 nmatched = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7834 if (nmatched == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7835 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7836 shl->lnum = 0; /* no match found */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7837 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7838 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7839 if (shl->rm.startpos[0].lnum > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7840 || shl->rm.startpos[0].col >= mincol
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7841 || nmatched > 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7842 || shl->rm.endpos[0].col > mincol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7843 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7844 shl->lnum += shl->rm.startpos[0].lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7845 break; /* useful match found */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7846 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7847 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7848 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7849
10287
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7850 /*
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7851 * If there is a match fill "shl" and return one.
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7852 * Return zero otherwise.
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7853 */
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7854 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7855 next_search_hl_pos(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7856 match_T *shl, /* points to a match */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7857 linenr_T lnum,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7858 posmatch_T *posmatch, /* match positions */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7859 colnr_T mincol) /* minimal column for a match */
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7860 {
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7861 int i;
10287
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7862 int found = -1;
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7863
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7864 for (i = posmatch->cur; i < MAXPOSMATCH; i++)
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7865 {
10273
489eae19cad9 commit https://github.com/vim/vim/commit/a6c27ee6db2c328e0ab0e6d143e2a295a0bb9c9a
Christian Brabandt <cb@256bit.org>
parents: 10247
diff changeset
7866 llpos_T *pos = &posmatch->pos[i];
489eae19cad9 commit https://github.com/vim/vim/commit/a6c27ee6db2c328e0ab0e6d143e2a295a0bb9c9a
Christian Brabandt <cb@256bit.org>
parents: 10247
diff changeset
7867
489eae19cad9 commit https://github.com/vim/vim/commit/a6c27ee6db2c328e0ab0e6d143e2a295a0bb9c9a
Christian Brabandt <cb@256bit.org>
parents: 10247
diff changeset
7868 if (pos->lnum == 0)
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7869 break;
10287
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7870 if (pos->len == 0 && pos->col < mincol)
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7871 continue;
10273
489eae19cad9 commit https://github.com/vim/vim/commit/a6c27ee6db2c328e0ab0e6d143e2a295a0bb9c9a
Christian Brabandt <cb@256bit.org>
parents: 10247
diff changeset
7872 if (pos->lnum == lnum)
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7873 {
10287
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7874 if (found >= 0)
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7875 {
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7876 /* if this match comes before the one at "found" then swap
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7877 * them */
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7878 if (pos->col < posmatch->pos[found].col)
10273
489eae19cad9 commit https://github.com/vim/vim/commit/a6c27ee6db2c328e0ab0e6d143e2a295a0bb9c9a
Christian Brabandt <cb@256bit.org>
parents: 10247
diff changeset
7879 {
489eae19cad9 commit https://github.com/vim/vim/commit/a6c27ee6db2c328e0ab0e6d143e2a295a0bb9c9a
Christian Brabandt <cb@256bit.org>
parents: 10247
diff changeset
7880 llpos_T tmp = *pos;
489eae19cad9 commit https://github.com/vim/vim/commit/a6c27ee6db2c328e0ab0e6d143e2a295a0bb9c9a
Christian Brabandt <cb@256bit.org>
parents: 10247
diff changeset
7881
10287
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7882 *pos = posmatch->pos[found];
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7883 posmatch->pos[found] = tmp;
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7884 }
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7885 }
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7886 else
10287
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7887 found = i;
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7888 }
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7889 }
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7890 posmatch->cur = 0;
10287
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7891 if (found >= 0)
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7892 {
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7893 colnr_T start = posmatch->pos[found].col == 0
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7894 ? 0 : posmatch->pos[found].col - 1;
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7895 colnr_T end = posmatch->pos[found].col == 0
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7896 ? MAXCOL : start + posmatch->pos[found].len;
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7897
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7898 shl->lnum = lnum;
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7899 shl->rm.startpos[0].lnum = 0;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7900 shl->rm.startpos[0].col = start;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7901 shl->rm.endpos[0].lnum = 0;
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7902 shl->rm.endpos[0].col = end;
9885
4e8b05fa12c6 commit https://github.com/vim/vim/commit/4f416e41243ca151b95d39d81ce23d00b1484755
Christian Brabandt <cb@256bit.org>
parents: 9877
diff changeset
7903 shl->is_addpos = TRUE;
10287
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7904 posmatch->cur = found + 1;
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7905 return 1;
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7906 }
1c1fcf515607 commit https://github.com/vim/vim/commit/8507747600bddfd6a68aed057840856bf5548e61
Christian Brabandt <cb@256bit.org>
parents: 10273
diff changeset
7907 return 0;
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7908 }
5985
8ae50e3ef8bf updated for version 7.4.333
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
7909 #endif
5979
f9fa2e506b9f updated for version 7.4.330
Bram Moolenaar <bram@vim.org>
parents: 5946
diff changeset
7910
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7911 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
7912 screen_start_highlight(int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7913 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7914 attrentry_T *aep = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7915
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7916 screen_attr = attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7917 if (full_screen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7918 #ifdef WIN3264
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7919 && termcap_active
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7920 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7921 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7922 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7923 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7924 if (gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7925 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7926 char buf[20];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7927
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7928 /* The GUI handles this internally. */
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7929 sprintf(buf, IF_EB("\033|%dh", ESC_STR "|%dh"), attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7930 OUT_STR(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7931 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7932 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7933 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7934 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7935 if (attr > HL_ALL) /* special HL attr. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7936 {
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7937 if (IS_CTERM)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7938 aep = syn_cterm_attr2entry(attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7939 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7940 aep = syn_term_attr2entry(attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7941 if (aep == NULL) /* did ":syntax clear" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7942 attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7943 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7944 attr = aep->ae_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7945 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7946 if ((attr & HL_BOLD) && T_MD != NULL) /* bold */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7947 out_str(T_MD);
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7948 else if (aep != NULL && cterm_normal_fg_bold &&
9027
773d627cac0b commit https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162
Christian Brabandt <cb@256bit.org>
parents: 8977
diff changeset
7949 #ifdef FEAT_TERMGUICOLORS
773d627cac0b commit https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162
Christian Brabandt <cb@256bit.org>
parents: 8977
diff changeset
7950 (p_tgc ?
9939
ccb6461b82df commit https://github.com/vim/vim/commit/1b58cdd160c2e0ada0f638679a2aa27e4665fc48
Christian Brabandt <cb@256bit.org>
parents: 9885
diff changeset
7951 (aep->ae_u.cterm.fg_rgb != INVALCOLOR):
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7952 #endif
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7953 (t_colors > 1 && aep->ae_u.cterm.fg_color)
9027
773d627cac0b commit https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162
Christian Brabandt <cb@256bit.org>
parents: 8977
diff changeset
7954 #ifdef FEAT_TERMGUICOLORS
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7955 )
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7956 #endif
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7957 )
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7958 /* If the Normal FG color has BOLD attribute and the new HL
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7959 * has a FG color defined, clear BOLD. */
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
7960 out_str(T_ME);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7961 if ((attr & HL_STANDOUT) && T_SO != NULL) /* standout */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7962 out_str(T_SO);
205
d292c40ca788 updated for version 7.0060
vimboss
parents: 168
diff changeset
7963 if ((attr & (HL_UNDERLINE | HL_UNDERCURL)) && T_US != NULL)
d292c40ca788 updated for version 7.0060
vimboss
parents: 168
diff changeset
7964 /* underline or undercurl */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7965 out_str(T_US);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7966 if ((attr & HL_ITALIC) && T_CZH != NULL) /* italic */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7967 out_str(T_CZH);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7968 if ((attr & HL_INVERSE) && T_MR != NULL) /* inverse (reverse) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7969 out_str(T_MR);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7970
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7971 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7972 * Output the color or start string after bold etc., in case the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7973 * bold etc. override the color setting.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7974 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7975 if (aep != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7976 {
9027
773d627cac0b commit https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162
Christian Brabandt <cb@256bit.org>
parents: 8977
diff changeset
7977 #ifdef FEAT_TERMGUICOLORS
773d627cac0b commit https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162
Christian Brabandt <cb@256bit.org>
parents: 8977
diff changeset
7978 if (p_tgc)
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7979 {
9939
ccb6461b82df commit https://github.com/vim/vim/commit/1b58cdd160c2e0ada0f638679a2aa27e4665fc48
Christian Brabandt <cb@256bit.org>
parents: 9885
diff changeset
7980 if (aep->ae_u.cterm.fg_rgb != INVALCOLOR)
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7981 term_fg_rgb_color(aep->ae_u.cterm.fg_rgb);
9939
ccb6461b82df commit https://github.com/vim/vim/commit/1b58cdd160c2e0ada0f638679a2aa27e4665fc48
Christian Brabandt <cb@256bit.org>
parents: 9885
diff changeset
7982 if (aep->ae_u.cterm.bg_rgb != INVALCOLOR)
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7983 term_bg_rgb_color(aep->ae_u.cterm.bg_rgb);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7984 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7985 else
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7986 #endif
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7987 {
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7988 if (t_colors > 1)
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7989 {
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7990 if (aep->ae_u.cterm.fg_color)
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7991 term_fg_color(aep->ae_u.cterm.fg_color - 1);
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7992 if (aep->ae_u.cterm.bg_color)
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7993 term_bg_color(aep->ae_u.cterm.bg_color - 1);
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7994 }
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7995 else
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7996 {
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7997 if (aep->ae_u.term.start != NULL)
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7998 out_str(aep->ae_u.term.start);
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
7999 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8000 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8001 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8002 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8003 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8004 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8005
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8006 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8007 screen_stop_highlight(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8008 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8009 int do_ME = FALSE; /* output T_ME code */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8010
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8011 if (screen_attr != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8012 #ifdef WIN3264
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8013 && termcap_active
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8014 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8015 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8016 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8017 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8018 if (gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8019 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8020 char buf[20];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8021
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8022 /* use internal GUI code */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8023 sprintf(buf, IF_EB("\033|%dH", ESC_STR "|%dH"), screen_attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8024 OUT_STR(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8025 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8026 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8027 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8028 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8029 if (screen_attr > HL_ALL) /* special HL attr. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8030 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8031 attrentry_T *aep;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8032
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8033 if (IS_CTERM)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8034 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8035 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8036 * Assume that t_me restores the original colors!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8037 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8038 aep = syn_cterm_attr2entry(screen_attr);
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8039 if (aep != NULL &&
9027
773d627cac0b commit https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162
Christian Brabandt <cb@256bit.org>
parents: 8977
diff changeset
8040 #ifdef FEAT_TERMGUICOLORS
773d627cac0b commit https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162
Christian Brabandt <cb@256bit.org>
parents: 8977
diff changeset
8041 (p_tgc ?
9939
ccb6461b82df commit https://github.com/vim/vim/commit/1b58cdd160c2e0ada0f638679a2aa27e4665fc48
Christian Brabandt <cb@256bit.org>
parents: 9885
diff changeset
8042 (aep->ae_u.cterm.fg_rgb != INVALCOLOR
ccb6461b82df commit https://github.com/vim/vim/commit/1b58cdd160c2e0ada0f638679a2aa27e4665fc48
Christian Brabandt <cb@256bit.org>
parents: 9885
diff changeset
8043 || aep->ae_u.cterm.bg_rgb != INVALCOLOR):
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8044 #endif
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8045 (aep->ae_u.cterm.fg_color || aep->ae_u.cterm.bg_color)
9027
773d627cac0b commit https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162
Christian Brabandt <cb@256bit.org>
parents: 8977
diff changeset
8046 #ifdef FEAT_TERMGUICOLORS
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8047 )
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8048 #endif
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8049 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8050 do_ME = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8051 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8052 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8053 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8054 aep = syn_term_attr2entry(screen_attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8055 if (aep != NULL && aep->ae_u.term.stop != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8056 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8057 if (STRCMP(aep->ae_u.term.stop, T_ME) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8058 do_ME = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8059 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8060 out_str(aep->ae_u.term.stop);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8061 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8062 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8063 if (aep == NULL) /* did ":syntax clear" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8064 screen_attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8065 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8066 screen_attr = aep->ae_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8067 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8068
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8069 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8070 * Often all ending-codes are equal to T_ME. Avoid outputting the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8071 * same sequence several times.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8072 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8073 if (screen_attr & HL_STANDOUT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8074 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8075 if (STRCMP(T_SE, T_ME) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8076 do_ME = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8077 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8078 out_str(T_SE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8079 }
205
d292c40ca788 updated for version 7.0060
vimboss
parents: 168
diff changeset
8080 if (screen_attr & (HL_UNDERLINE | HL_UNDERCURL))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8081 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8082 if (STRCMP(T_UE, T_ME) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8083 do_ME = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8084 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8085 out_str(T_UE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8086 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8087 if (screen_attr & HL_ITALIC)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8088 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8089 if (STRCMP(T_CZR, T_ME) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8090 do_ME = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8091 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8092 out_str(T_CZR);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8093 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8094 if (do_ME || (screen_attr & (HL_BOLD | HL_INVERSE)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8095 out_str(T_ME);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8096
9027
773d627cac0b commit https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162
Christian Brabandt <cb@256bit.org>
parents: 8977
diff changeset
8097 #ifdef FEAT_TERMGUICOLORS
773d627cac0b commit https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162
Christian Brabandt <cb@256bit.org>
parents: 8977
diff changeset
8098 if (p_tgc)
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8099 {
9939
ccb6461b82df commit https://github.com/vim/vim/commit/1b58cdd160c2e0ada0f638679a2aa27e4665fc48
Christian Brabandt <cb@256bit.org>
parents: 9885
diff changeset
8100 if (cterm_normal_fg_gui_color != INVALCOLOR)
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8101 term_fg_rgb_color(cterm_normal_fg_gui_color);
9939
ccb6461b82df commit https://github.com/vim/vim/commit/1b58cdd160c2e0ada0f638679a2aa27e4665fc48
Christian Brabandt <cb@256bit.org>
parents: 9885
diff changeset
8102 if (cterm_normal_bg_gui_color != INVALCOLOR)
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8103 term_bg_rgb_color(cterm_normal_bg_gui_color);
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8104 }
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8105 else
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8106 #endif
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8107 {
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8108 if (t_colors > 1)
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8109 {
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8110 /* set Normal cterm colors */
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8111 if (cterm_normal_fg_color != 0)
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8112 term_fg_color(cterm_normal_fg_color - 1);
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8113 if (cterm_normal_bg_color != 0)
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8114 term_bg_color(cterm_normal_bg_color - 1);
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8115 if (cterm_normal_fg_bold)
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8116 out_str(T_MD);
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8117 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8118 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8119 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8120 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8121 screen_attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8122 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8123
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8124 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8125 * Reset the colors for a cterm. Used when leaving Vim.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8126 * The machine specific code may override this again.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8127 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8128 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8129 reset_cterm_colors(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8130 {
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8131 if (IS_CTERM)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8132 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8133 /* set Normal cterm colors */
9027
773d627cac0b commit https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162
Christian Brabandt <cb@256bit.org>
parents: 8977
diff changeset
8134 #ifdef FEAT_TERMGUICOLORS
9939
ccb6461b82df commit https://github.com/vim/vim/commit/1b58cdd160c2e0ada0f638679a2aa27e4665fc48
Christian Brabandt <cb@256bit.org>
parents: 9885
diff changeset
8135 if (p_tgc ? (cterm_normal_fg_gui_color != INVALCOLOR
ccb6461b82df commit https://github.com/vim/vim/commit/1b58cdd160c2e0ada0f638679a2aa27e4665fc48
Christian Brabandt <cb@256bit.org>
parents: 9885
diff changeset
8136 || cterm_normal_bg_gui_color != INVALCOLOR)
ccb6461b82df commit https://github.com/vim/vim/commit/1b58cdd160c2e0ada0f638679a2aa27e4665fc48
Christian Brabandt <cb@256bit.org>
parents: 9885
diff changeset
8137 : (cterm_normal_fg_color > 0 || cterm_normal_bg_color > 0))
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8138 #else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8139 if (cterm_normal_fg_color > 0 || cterm_normal_bg_color > 0)
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8140 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8141 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8142 out_str(T_OP);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8143 screen_attr = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8144 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8145 if (cterm_normal_fg_bold)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8146 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8147 out_str(T_ME);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8148 screen_attr = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8149 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8150 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8151 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8153 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8154 * Put character ScreenLines["off"] on the screen at position "row" and "col",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8155 * using the attributes from ScreenAttrs["off"].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8156 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8157 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8158 screen_char(unsigned off, int row, int col)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8159 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8160 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8161
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8162 /* Check for illegal values, just in case (could happen just after
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8163 * resizing). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8164 if (row >= screen_Rows || col >= screen_Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8165 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8166
6602
c77ef1bf9623 updated for version 7.4.627
Bram Moolenaar <bram@vim.org>
parents: 6553
diff changeset
8167 /* Outputting a character in the last cell on the screen may scroll the
c77ef1bf9623 updated for version 7.4.627
Bram Moolenaar <bram@vim.org>
parents: 6553
diff changeset
8168 * screen up. Only do it when the "xn" termcap property is set, otherwise
c77ef1bf9623 updated for version 7.4.627
Bram Moolenaar <bram@vim.org>
parents: 6553
diff changeset
8169 * mark the character invalid (update it when scrolled up). */
c77ef1bf9623 updated for version 7.4.627
Bram Moolenaar <bram@vim.org>
parents: 6553
diff changeset
8170 if (*T_XN == NUL
c77ef1bf9623 updated for version 7.4.627
Bram Moolenaar <bram@vim.org>
parents: 6553
diff changeset
8171 && row == screen_Rows - 1 && col == screen_Columns - 1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8172 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8173 /* account for first command-line character in rightleft mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8174 && !cmdmsg_rl
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8175 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8176 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8177 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8178 ScreenAttrs[off] = (sattr_T)-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8179 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8180 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8181
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8182 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8183 * Stop highlighting first, so it's easier to move the cursor.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8184 */
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
8185 #if defined(FEAT_CLIPBOARD) || defined(FEAT_WINDOWS)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8186 if (screen_char_attr != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8187 attr = screen_char_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8188 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8189 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8190 attr = ScreenAttrs[off];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8191 if (screen_attr != attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8192 screen_stop_highlight();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8193
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8194 windgoto(row, col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8195
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8196 if (screen_attr != attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8197 screen_start_highlight(attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8198
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8199 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8200 if (enc_utf8 && ScreenLinesUC[off] != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8201 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8202 char_u buf[MB_MAXBYTES + 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8203
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8204 /* Convert UTF-8 character to bytes and write it. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8205
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8206 buf[utfc_char2bytes(off, buf)] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8207
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8208 out_str(buf);
8819
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8817
diff changeset
8209 if (utf_ambiguous_width(ScreenLinesUC[off]))
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8817
diff changeset
8210 screen_cur_col = 9999;
a1132255e3e1 commit https://github.com/vim/vim/commit/cb0700844c1274fe8bc0ceaffaee0ad21c406f30
Christian Brabandt <cb@256bit.org>
parents: 8817
diff changeset
8211 else if (utf_char2cells(ScreenLinesUC[off]) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8212 ++screen_cur_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8213 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8214 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8215 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8216 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8217 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8218 out_flush_check();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8219 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8220 out_char(ScreenLines[off]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8221 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8222 /* double-byte character in single-width cell */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8223 if (enc_dbcs == DBCS_JPNU && ScreenLines[off] == 0x8e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8224 out_char(ScreenLines2[off]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8225 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8226 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8227
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8228 screen_cur_col++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8229 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8230
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8231 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8232
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8233 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8234 * Used for enc_dbcs only: Put one double-wide character at ScreenLines["off"]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8235 * on the screen at position 'row' and 'col'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8236 * The attributes of the first byte is used for all. This is required to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8237 * output the two bytes of a double-byte character with nothing in between.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8238 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8239 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8240 screen_char_2(unsigned off, int row, int col)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8241 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8242 /* Check for illegal values (could be wrong when screen was resized). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8243 if (off + 1 >= (unsigned)(screen_Rows * screen_Columns))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8244 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8245
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8246 /* Outputting the last character on the screen may scrollup the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8247 * Don't to it! Mark the character invalid (update it when scrolled up) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8248 if (row == screen_Rows - 1 && col >= screen_Columns - 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8249 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8250 ScreenAttrs[off] = (sattr_T)-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8251 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8252 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8253
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8254 /* Output the first byte normally (positions the cursor), then write the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8255 * second byte directly. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8256 screen_char(off, row, col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8257 out_char(ScreenLines[off + 1]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8258 ++screen_cur_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8259 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8260 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8261
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
8262 #if defined(FEAT_CLIPBOARD) || defined(FEAT_WINDOWS) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8263 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8264 * Draw a rectangle of the screen, inverted when "invert" is TRUE.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8265 * This uses the contents of ScreenLines[] and doesn't change it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8266 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8267 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8268 screen_draw_rectangle(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8269 int row,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8270 int col,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8271 int height,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8272 int width,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8273 int invert)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8274 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8275 int r, c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8276 int off;
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
8277 #ifdef FEAT_MBYTE
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
8278 int max_off;
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
8279 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8280
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
8281 /* Can't use ScreenLines unless initialized */
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
8282 if (ScreenLines == NULL)
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
8283 return;
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
8284
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8285 if (invert)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8286 screen_char_attr = HL_INVERSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8287 for (r = row; r < row + height; ++r)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8288 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8289 off = LineOffset[r];
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
8290 #ifdef FEAT_MBYTE
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
8291 max_off = off + screen_Columns;
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
8292 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8293 for (c = col; c < col + width; ++c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8294 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8295 #ifdef FEAT_MBYTE
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
8296 if (enc_dbcs != 0 && dbcs_off2cells(off + c, max_off) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8297 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8298 screen_char_2(off + c, r, c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8299 ++c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8300 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8301 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8302 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8303 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8304 screen_char(off + c, r, c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8305 #ifdef FEAT_MBYTE
1378
a4365075d05c updated for version 7.1-093
vimboss
parents: 1340
diff changeset
8306 if (utf_off2cells(off + c, max_off) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8307 ++c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8308 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8309 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8310 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8311 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8312 screen_char_attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8313 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8314 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8315
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
8316 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8317 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8318 * Redraw the characters for a vertically split window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8319 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8320 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8321 redraw_block(int row, int end, win_T *wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8322 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8323 int col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8324 int width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8325
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8326 # ifdef FEAT_CLIPBOARD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8327 clip_may_clear_selection(row, end - 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8328 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8329
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8330 if (wp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8331 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8332 col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8333 width = Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8334 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8335 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8336 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8337 col = wp->w_wincol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8338 width = wp->w_width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8339 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8340 screen_draw_rectangle(row, col, end - row, width, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8341 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8342 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8343
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8344 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8345 * Fill the screen from 'start_row' to 'end_row', from 'start_col' to 'end_col'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8346 * with character 'c1' in first column followed by 'c2' in the other columns.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8347 * Use attributes 'attr'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8348 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8349 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8350 screen_fill(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8351 int start_row,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8352 int end_row,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8353 int start_col,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8354 int end_col,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8355 int c1,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8356 int c2,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8357 int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8358 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8359 int row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8360 int col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8361 int off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8362 int end_off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8363 int did_delete;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8364 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8365 int norm_term;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8366 #if defined(FEAT_GUI) || defined(UNIX)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8367 int force_next = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8368 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8369
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8370 if (end_row > screen_Rows) /* safety check */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8371 end_row = screen_Rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8372 if (end_col > screen_Columns) /* safety check */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8373 end_col = screen_Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8374 if (ScreenLines == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8375 || start_row >= end_row
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8376 || start_col >= end_col) /* nothing to do */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8377 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8378
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8379 /* it's a "normal" terminal when not in a GUI or cterm */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8380 norm_term = (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8381 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8382 !gui.in_use &&
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8383 #endif
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
8384 !IS_CTERM);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8385 for (row = start_row; row < end_row; ++row)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8386 {
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
8387 #ifdef FEAT_MBYTE
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
8388 if (has_mbyte
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
8389 # ifdef FEAT_GUI
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
8390 && !gui.in_use
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
8391 # endif
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
8392 )
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
8393 {
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
8394 /* When drawing over the right halve of a double-wide char clear
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
8395 * out the left halve. When drawing over the left halve of a
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
8396 * double wide-char clear out the right halve. Only needed in a
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
8397 * terminal. */
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1677
diff changeset
8398 if (start_col > 0 && mb_fix_col(start_col, row) != start_col)
1670
d766b2ba2fc6 updated for version 7.2b-002
vimboss
parents: 1668
diff changeset
8399 screen_puts_len((char_u *)" ", 1, row, start_col - 1, 0);
1677
b98975453785 updated for version 7.2b-009
vimboss
parents: 1670
diff changeset
8400 if (end_col < screen_Columns && mb_fix_col(end_col, row) != end_col)
1670
d766b2ba2fc6 updated for version 7.2b-002
vimboss
parents: 1668
diff changeset
8401 screen_puts_len((char_u *)" ", 1, row, end_col, 0);
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
8402 }
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
8403 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8404 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8405 * Try to use delete-line termcap code, when no attributes or in a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8406 * "normal" terminal, where a bold/italic space is just a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8407 * space.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8408 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8409 did_delete = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8410 if (c2 == ' '
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8411 && end_col == Columns
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8412 && can_clear(T_CE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8413 && (attr == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8414 || (norm_term
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8415 && attr <= HL_ALL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8416 && ((attr & ~(HL_BOLD | HL_ITALIC)) == 0))))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8417 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8418 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8419 * check if we really need to clear something
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8420 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8421 col = start_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8422 if (c1 != ' ') /* don't clear first char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8423 ++col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8424
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8425 off = LineOffset[row] + col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8426 end_off = LineOffset[row] + end_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8427
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8428 /* skip blanks (used often, keep it fast!) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8429 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8430 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8431 while (off < end_off && ScreenLines[off] == ' '
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8432 && ScreenAttrs[off] == 0 && ScreenLinesUC[off] == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8433 ++off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8434 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8435 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8436 while (off < end_off && ScreenLines[off] == ' '
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8437 && ScreenAttrs[off] == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8438 ++off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8439 if (off < end_off) /* something to be cleared */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8440 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8441 col = off - LineOffset[row];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8442 screen_stop_highlight();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8443 term_windgoto(row, col);/* clear rest of this screen line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8444 out_str(T_CE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8445 screen_start(); /* don't know where cursor is now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8446 col = end_col - col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8447 while (col--) /* clear chars in ScreenLines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8448 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8449 ScreenLines[off] = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8450 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8451 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8452 ScreenLinesUC[off] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8453 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8454 ScreenAttrs[off] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8455 ++off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8456 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8457 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8458 did_delete = TRUE; /* the chars are cleared now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8459 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8460
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8461 off = LineOffset[row] + start_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8462 c = c1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8463 for (col = start_col; col < end_col; ++col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8464 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8465 if (ScreenLines[off] != c
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8466 #ifdef FEAT_MBYTE
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8467 || (enc_utf8 && (int)ScreenLinesUC[off]
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8468 != (c >= 0x80 ? c : 0))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8469 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8470 || ScreenAttrs[off] != attr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8471 #if defined(FEAT_GUI) || defined(UNIX)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8472 || force_next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8473 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8474 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8475 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8476 #if defined(FEAT_GUI) || defined(UNIX)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8477 /* The bold trick may make a single row of pixels appear in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8478 * the next character. When a bold character is removed, the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8479 * next character should be redrawn too. This happens for our
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8480 * own GUI and for some xterms. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8481 if (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8482 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8483 gui.in_use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8484 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8485 # if defined(FEAT_GUI) && defined(UNIX)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8486 ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8487 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8488 # ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8489 term_is_xterm
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8490 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8491 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8492 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8493 if (ScreenLines[off] != ' '
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8494 && (ScreenAttrs[off] > HL_ALL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8495 || ScreenAttrs[off] & HL_BOLD))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8496 force_next = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8497 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8498 force_next = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8499 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8500 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8501 ScreenLines[off] = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8502 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8503 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8504 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8505 if (c >= 0x80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8506 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8507 ScreenLinesUC[off] = c;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8508 ScreenLinesC[0][off] = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8509 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8510 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8511 ScreenLinesUC[off] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8512 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8513 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8514 ScreenAttrs[off] = attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8515 if (!did_delete || c != ' ')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8516 screen_char(off, row, col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8517 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8518 ++off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8519 if (col == start_col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8520 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8521 if (did_delete)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8522 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8523 c = c2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8524 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8525 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8526 if (end_col == Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8527 LineWraps[row] = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8528 if (row == Rows - 1) /* overwritten the command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8529 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8530 redraw_cmdline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8531 if (c1 == ' ' && c2 == ' ')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8532 clear_cmdline = FALSE; /* command line has been cleared */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 642
diff changeset
8533 if (start_col == 0)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 642
diff changeset
8534 mode_displayed = FALSE; /* mode cleared or overwritten */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8535 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8536 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8537 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8538
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8539 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8540 * Check if there should be a delay. Used before clearing or redrawing the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8541 * screen or the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8542 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8543 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8544 check_for_delay(int check_msg_scroll)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8545 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8546 if ((emsg_on_display || (check_msg_scroll && msg_scroll))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8547 && !did_wait_return
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8548 && emsg_silent == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8549 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8550 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8551 ui_delay(1000L, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8552 emsg_on_display = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8553 if (check_msg_scroll)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8554 msg_scroll = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8555 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8556 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8557
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8558 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8559 * screen_valid - allocate screen buffers if size changed
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3250
diff changeset
8560 * If "doclear" is TRUE: clear screen if it has been resized.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8561 * Returns TRUE if there is a valid screen to write to.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8562 * Returns FALSE when starting up and screen not initialized yet.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8563 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8564 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8565 screen_valid(int doclear)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8566 {
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3250
diff changeset
8567 screenalloc(doclear); /* allocate screen buffers if size changed */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8568 return (ScreenLines != NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8569 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8570
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8571 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8572 * Resize the shell to Rows and Columns.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8573 * Allocate ScreenLines[] and associated items.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8574 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8575 * There may be some time between setting Rows and Columns and (re)allocating
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8576 * ScreenLines[]. This happens when starting up and when (manually) changing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8577 * the shell size. Always use screen_Rows and screen_Columns to access items
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8578 * in ScreenLines[]. Use Rows and Columns for positioning text etc. where the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8579 * final size of the shell is needed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8580 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8581 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8582 screenalloc(int doclear)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8583 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8584 int new_row, old_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8585 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8586 int old_Rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8587 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8588 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8589 int outofmem = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8590 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8591 schar_T *new_ScreenLines;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8592 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8593 u8char_T *new_ScreenLinesUC = NULL;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8594 u8char_T *new_ScreenLinesC[MAX_MCO];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8595 schar_T *new_ScreenLines2 = NULL;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8596 int i;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8597 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8598 sattr_T *new_ScreenAttrs;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8599 unsigned *new_LineOffset;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8600 char_u *new_LineWraps;
671
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8601 #ifdef FEAT_WINDOWS
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
8602 short *new_TabPageIdxs;
671
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8603 tabpage_T *tp;
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8604 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8605 static int entered = FALSE; /* avoid recursiveness */
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 911
diff changeset
8606 static int done_outofmem_msg = FALSE; /* did outofmem message */
1824
3af28ecf9e56 updated for version 7.2-122
vimboss
parents: 1821
diff changeset
8607 #ifdef FEAT_AUTOCMD
3af28ecf9e56 updated for version 7.2-122
vimboss
parents: 1821
diff changeset
8608 int retry_count = 0;
3af28ecf9e56 updated for version 7.2-122
vimboss
parents: 1821
diff changeset
8609
3af28ecf9e56 updated for version 7.2-122
vimboss
parents: 1821
diff changeset
8610 retry:
3af28ecf9e56 updated for version 7.2-122
vimboss
parents: 1821
diff changeset
8611 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8612 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8613 * Allocation of the screen buffers is done only when the size changes and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8614 * when Rows and Columns have been set and we have started doing full
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8615 * screen stuff.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8616 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8617 if ((ScreenLines != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8618 && Rows == screen_Rows
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8619 && Columns == screen_Columns
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8620 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8621 && enc_utf8 == (ScreenLinesUC != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8622 && (enc_dbcs == DBCS_JPNU) == (ScreenLines2 != NULL)
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8623 && p_mco == Screen_mco
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8624 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8625 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8626 || Rows == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8627 || Columns == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8628 || (!full_screen && ScreenLines == NULL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8629 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8630
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8631 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8632 * It's possible that we produce an out-of-memory message below, which
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8633 * will cause this function to be called again. To break the loop, just
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8634 * return here.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8635 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8636 if (entered)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8637 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8638 entered = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8639
911
697dec8ec5e7 updated for version 7.0-037
vimboss
parents: 910
diff changeset
8640 /*
697dec8ec5e7 updated for version 7.0-037
vimboss
parents: 910
diff changeset
8641 * Note that the window sizes are updated before reallocating the arrays,
697dec8ec5e7 updated for version 7.0-037
vimboss
parents: 910
diff changeset
8642 * thus we must not redraw here!
697dec8ec5e7 updated for version 7.0-037
vimboss
parents: 910
diff changeset
8643 */
697dec8ec5e7 updated for version 7.0-037
vimboss
parents: 910
diff changeset
8644 ++RedrawingDisabled;
697dec8ec5e7 updated for version 7.0-037
vimboss
parents: 910
diff changeset
8645
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8646 win_new_shellsize(); /* fit the windows in the new sized shell */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8647
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8648 comp_col(); /* recompute columns for shown command and ruler */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8649
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8650 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8651 * We're changing the size of the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8652 * - Allocate new arrays for ScreenLines and ScreenAttrs.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8653 * - Move lines from the old arrays into the new arrays, clear extra
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8654 * lines (unless the screen is going to be cleared).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8655 * - Free the old arrays.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8656 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8657 * If anything fails, make ScreenLines NULL, so we don't do anything!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8658 * Continuing with the old ScreenLines may result in a crash, because the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8659 * size is wrong.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8660 */
671
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8661 FOR_ALL_TAB_WINDOWS(tp, wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8662 win_free_lsize(wp);
1946
a9f561ffbc53 updated for version 7.2-243
vimboss
parents: 1910
diff changeset
8663 #ifdef FEAT_AUTOCMD
a9f561ffbc53 updated for version 7.2-243
vimboss
parents: 1910
diff changeset
8664 if (aucmd_win != NULL)
a9f561ffbc53 updated for version 7.2-243
vimboss
parents: 1910
diff changeset
8665 win_free_lsize(aucmd_win);
a9f561ffbc53 updated for version 7.2-243
vimboss
parents: 1910
diff changeset
8666 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8667
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8668 new_ScreenLines = (schar_T *)lalloc((long_u)(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8669 (Rows + 1) * Columns * sizeof(schar_T)), FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8670 #ifdef FEAT_MBYTE
2122
476336a5ae95 updated for version 7.2.404
Bram Moolenaar <bram@zimbu.org>
parents: 2069
diff changeset
8671 vim_memset(new_ScreenLinesC, 0, sizeof(u8char_T *) * MAX_MCO);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8672 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8673 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8674 new_ScreenLinesUC = (u8char_T *)lalloc((long_u)(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8675 (Rows + 1) * Columns * sizeof(u8char_T)), FALSE);
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8676 for (i = 0; i < p_mco; ++i)
2124
dc8a5699253b updated for version 7.2.406
Bram Moolenaar <bram@zimbu.org>
parents: 2122
diff changeset
8677 new_ScreenLinesC[i] = (u8char_T *)lalloc_clear((long_u)(
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8678 (Rows + 1) * Columns * sizeof(u8char_T)), FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8679 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8680 if (enc_dbcs == DBCS_JPNU)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8681 new_ScreenLines2 = (schar_T *)lalloc((long_u)(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8682 (Rows + 1) * Columns * sizeof(schar_T)), FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8683 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8684 new_ScreenAttrs = (sattr_T *)lalloc((long_u)(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8685 (Rows + 1) * Columns * sizeof(sattr_T)), FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8686 new_LineOffset = (unsigned *)lalloc((long_u)(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8687 Rows * sizeof(unsigned)), FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8688 new_LineWraps = (char_u *)lalloc((long_u)(Rows * sizeof(char_u)), FALSE);
671
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8689 #ifdef FEAT_WINDOWS
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
8690 new_TabPageIdxs = (short *)lalloc((long_u)(Columns * sizeof(short)), FALSE);
671
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8691 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8692
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
8693 FOR_ALL_TAB_WINDOWS(tp, wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8694 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8695 if (win_alloc_lines(wp) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8696 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8697 outofmem = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8698 #ifdef FEAT_WINDOWS
1819
15130d4dfea1 updated for version 7.2-117
vimboss
parents: 1814
diff changeset
8699 goto give_up;
15130d4dfea1 updated for version 7.2-117
vimboss
parents: 1814
diff changeset
8700 #endif
15130d4dfea1 updated for version 7.2-117
vimboss
parents: 1814
diff changeset
8701 }
15130d4dfea1 updated for version 7.2-117
vimboss
parents: 1814
diff changeset
8702 }
1906
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1883
diff changeset
8703 #ifdef FEAT_AUTOCMD
1946
a9f561ffbc53 updated for version 7.2-243
vimboss
parents: 1910
diff changeset
8704 if (aucmd_win != NULL && aucmd_win->w_lines == NULL
a9f561ffbc53 updated for version 7.2-243
vimboss
parents: 1910
diff changeset
8705 && win_alloc_lines(aucmd_win) == FAIL)
1906
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1883
diff changeset
8706 outofmem = TRUE;
ff9ecf14efe3 updated for version 7.2-203
vimboss
parents: 1883
diff changeset
8707 #endif
1819
15130d4dfea1 updated for version 7.2-117
vimboss
parents: 1814
diff changeset
8708 #ifdef FEAT_WINDOWS
15130d4dfea1 updated for version 7.2-117
vimboss
parents: 1814
diff changeset
8709 give_up:
15130d4dfea1 updated for version 7.2-117
vimboss
parents: 1814
diff changeset
8710 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8711
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8712 #ifdef FEAT_MBYTE
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8713 for (i = 0; i < p_mco; ++i)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8714 if (new_ScreenLinesC[i] == NULL)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8715 break;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8716 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8717 if (new_ScreenLines == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8718 #ifdef FEAT_MBYTE
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8719 || (enc_utf8 && (new_ScreenLinesUC == NULL || i != p_mco))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8720 || (enc_dbcs == DBCS_JPNU && new_ScreenLines2 == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8721 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8722 || new_ScreenAttrs == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8723 || new_LineOffset == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8724 || new_LineWraps == NULL
671
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8725 #ifdef FEAT_WINDOWS
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8726 || new_TabPageIdxs == NULL
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8727 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8728 || outofmem)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8729 {
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 911
diff changeset
8730 if (ScreenLines != NULL || !done_outofmem_msg)
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
8731 {
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
8732 /* guess the size */
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
8733 do_outofmem_msg((long_u)((Rows + 1) * Columns));
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
8734
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
8735 /* Remember we did this to avoid getting outofmem messages over
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
8736 * and over again. */
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 911
diff changeset
8737 done_outofmem_msg = TRUE;
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
8738 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8739 vim_free(new_ScreenLines);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8740 new_ScreenLines = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8741 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8742 vim_free(new_ScreenLinesUC);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8743 new_ScreenLinesUC = NULL;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8744 for (i = 0; i < p_mco; ++i)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8745 {
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8746 vim_free(new_ScreenLinesC[i]);
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8747 new_ScreenLinesC[i] = NULL;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8748 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8749 vim_free(new_ScreenLines2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8750 new_ScreenLines2 = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8751 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8752 vim_free(new_ScreenAttrs);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8753 new_ScreenAttrs = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8754 vim_free(new_LineOffset);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8755 new_LineOffset = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8756 vim_free(new_LineWraps);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8757 new_LineWraps = NULL;
671
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8758 #ifdef FEAT_WINDOWS
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8759 vim_free(new_TabPageIdxs);
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8760 new_TabPageIdxs = NULL;
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8761 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8762 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8763 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8764 {
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 911
diff changeset
8765 done_outofmem_msg = FALSE;
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
8766
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8767 for (new_row = 0; new_row < Rows; ++new_row)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8768 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8769 new_LineOffset[new_row] = new_row * Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8770 new_LineWraps[new_row] = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8771
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8772 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8773 * If the screen is not going to be cleared, copy as much as
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8774 * possible from the old screen to the new one and clear the rest
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8775 * (used when resizing the window at the "--more--" prompt or when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8776 * executing an external command, for the GUI).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8777 */
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3250
diff changeset
8778 if (!doclear)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8779 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8780 (void)vim_memset(new_ScreenLines + new_row * Columns,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8781 ' ', (size_t)Columns * sizeof(schar_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8782 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8783 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8784 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8785 (void)vim_memset(new_ScreenLinesUC + new_row * Columns,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8786 0, (size_t)Columns * sizeof(u8char_T));
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8787 for (i = 0; i < p_mco; ++i)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8788 (void)vim_memset(new_ScreenLinesC[i]
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8789 + new_row * Columns,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8790 0, (size_t)Columns * sizeof(u8char_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8791 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8792 if (enc_dbcs == DBCS_JPNU)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8793 (void)vim_memset(new_ScreenLines2 + new_row * Columns,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8794 0, (size_t)Columns * sizeof(schar_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8795 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8796 (void)vim_memset(new_ScreenAttrs + new_row * Columns,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8797 0, (size_t)Columns * sizeof(sattr_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8798 old_row = new_row + (screen_Rows - Rows);
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 530
diff changeset
8799 if (old_row >= 0 && ScreenLines != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8800 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8801 if (screen_Columns < Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8802 len = screen_Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8803 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8804 len = Columns;
26
404aac550f35 updated for version 7.0017
vimboss
parents: 13
diff changeset
8805 #ifdef FEAT_MBYTE
571
0ae54f30d5bc updated for version 7.0162
vimboss
parents: 548
diff changeset
8806 /* When switching to utf-8 don't copy characters, they
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8807 * may be invalid now. Also when p_mco changes. */
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8808 if (!(enc_utf8 && ScreenLinesUC == NULL)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8809 && p_mco == Screen_mco)
26
404aac550f35 updated for version 7.0017
vimboss
parents: 13
diff changeset
8810 #endif
404aac550f35 updated for version 7.0017
vimboss
parents: 13
diff changeset
8811 mch_memmove(new_ScreenLines + new_LineOffset[new_row],
404aac550f35 updated for version 7.0017
vimboss
parents: 13
diff changeset
8812 ScreenLines + LineOffset[old_row],
404aac550f35 updated for version 7.0017
vimboss
parents: 13
diff changeset
8813 (size_t)len * sizeof(schar_T));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8814 #ifdef FEAT_MBYTE
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8815 if (enc_utf8 && ScreenLinesUC != NULL
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8816 && p_mco == Screen_mco)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8817 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8818 mch_memmove(new_ScreenLinesUC + new_LineOffset[new_row],
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8819 ScreenLinesUC + LineOffset[old_row],
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8820 (size_t)len * sizeof(u8char_T));
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8821 for (i = 0; i < p_mco; ++i)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8822 mch_memmove(new_ScreenLinesC[i]
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8823 + new_LineOffset[new_row],
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8824 ScreenLinesC[i] + LineOffset[old_row],
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8825 (size_t)len * sizeof(u8char_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8826 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8827 if (enc_dbcs == DBCS_JPNU && ScreenLines2 != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8828 mch_memmove(new_ScreenLines2 + new_LineOffset[new_row],
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8829 ScreenLines2 + LineOffset[old_row],
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8830 (size_t)len * sizeof(schar_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8831 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8832 mch_memmove(new_ScreenAttrs + new_LineOffset[new_row],
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8833 ScreenAttrs + LineOffset[old_row],
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8834 (size_t)len * sizeof(sattr_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8835 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8836 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8837 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8838 /* Use the last line of the screen for the current line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8839 current_ScreenLine = new_ScreenLines + Rows * Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8840 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8841
356
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 353
diff changeset
8842 free_screenlines();
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 353
diff changeset
8843
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8844 ScreenLines = new_ScreenLines;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8845 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8846 ScreenLinesUC = new_ScreenLinesUC;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8847 for (i = 0; i < p_mco; ++i)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8848 ScreenLinesC[i] = new_ScreenLinesC[i];
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8849 Screen_mco = p_mco;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8850 ScreenLines2 = new_ScreenLines2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8851 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8852 ScreenAttrs = new_ScreenAttrs;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8853 LineOffset = new_LineOffset;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8854 LineWraps = new_LineWraps;
671
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8855 #ifdef FEAT_WINDOWS
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8856 TabPageIdxs = new_TabPageIdxs;
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8857 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8858
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8859 /* It's important that screen_Rows and screen_Columns reflect the actual
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8860 * size of ScreenLines[]. Set them before calling anything. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8861 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8862 old_Rows = screen_Rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8863 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8864 screen_Rows = Rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8865 screen_Columns = Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8866
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8867 must_redraw = CLEAR; /* need to clear the screen later */
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3250
diff changeset
8868 if (doclear)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8869 screenclear2();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8870
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8871 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8872 else if (gui.in_use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8873 && !gui.starting
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8874 && ScreenLines != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8875 && old_Rows != Rows)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8876 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8877 (void)gui_redraw_block(0, 0, (int)Rows - 1, (int)Columns - 1, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8878 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8879 * Adjust the position of the cursor, for when executing an external
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8880 * command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8881 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8882 if (msg_row >= Rows) /* Rows got smaller */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8883 msg_row = Rows - 1; /* put cursor at last row */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8884 else if (Rows > old_Rows) /* Rows got bigger */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8885 msg_row += Rows - old_Rows; /* put cursor in same place */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8886 if (msg_col >= Columns) /* Columns got smaller */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8887 msg_col = Columns - 1; /* put cursor at last column */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8888 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8889 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8890
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8891 entered = FALSE;
911
697dec8ec5e7 updated for version 7.0-037
vimboss
parents: 910
diff changeset
8892 --RedrawingDisabled;
766
f0d0d3d3a1e2 updated for version 7.0225
vimboss
parents: 758
diff changeset
8893
f0d0d3d3a1e2 updated for version 7.0225
vimboss
parents: 758
diff changeset
8894 #ifdef FEAT_AUTOCMD
1824
3af28ecf9e56 updated for version 7.2-122
vimboss
parents: 1821
diff changeset
8895 /*
3af28ecf9e56 updated for version 7.2-122
vimboss
parents: 1821
diff changeset
8896 * Do not apply autocommands more than 3 times to avoid an endless loop
3af28ecf9e56 updated for version 7.2-122
vimboss
parents: 1821
diff changeset
8897 * in case applying autocommands always changes Rows or Columns.
3af28ecf9e56 updated for version 7.2-122
vimboss
parents: 1821
diff changeset
8898 */
3af28ecf9e56 updated for version 7.2-122
vimboss
parents: 1821
diff changeset
8899 if (starting == 0 && ++retry_count <= 3)
3af28ecf9e56 updated for version 7.2-122
vimboss
parents: 1821
diff changeset
8900 {
766
f0d0d3d3a1e2 updated for version 7.0225
vimboss
parents: 758
diff changeset
8901 apply_autocmds(EVENT_VIMRESIZED, NULL, NULL, FALSE, curbuf);
1824
3af28ecf9e56 updated for version 7.2-122
vimboss
parents: 1821
diff changeset
8902 /* In rare cases, autocommands may have altered Rows or Columns,
3af28ecf9e56 updated for version 7.2-122
vimboss
parents: 1821
diff changeset
8903 * jump back to check if we need to allocate the screen again. */
3af28ecf9e56 updated for version 7.2-122
vimboss
parents: 1821
diff changeset
8904 goto retry;
3af28ecf9e56 updated for version 7.2-122
vimboss
parents: 1821
diff changeset
8905 }
766
f0d0d3d3a1e2 updated for version 7.0225
vimboss
parents: 758
diff changeset
8906 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8907 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8908
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8909 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8910 free_screenlines(void)
356
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 353
diff changeset
8911 {
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 353
diff changeset
8912 #ifdef FEAT_MBYTE
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8913 int i;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8914
356
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 353
diff changeset
8915 vim_free(ScreenLinesUC);
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8916 for (i = 0; i < Screen_mco; ++i)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8917 vim_free(ScreenLinesC[i]);
356
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 353
diff changeset
8918 vim_free(ScreenLines2);
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 353
diff changeset
8919 #endif
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
8920 vim_free(ScreenLines);
356
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 353
diff changeset
8921 vim_free(ScreenAttrs);
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 353
diff changeset
8922 vim_free(LineOffset);
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 353
diff changeset
8923 vim_free(LineWraps);
671
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8924 #ifdef FEAT_WINDOWS
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8925 vim_free(TabPageIdxs);
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
8926 #endif
356
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 353
diff changeset
8927 }
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 353
diff changeset
8928
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 353
diff changeset
8929 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8930 screenclear(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8931 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8932 check_for_delay(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8933 screenalloc(FALSE); /* allocate screen buffers if size changed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8934 screenclear2(); /* clear the screen */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8935 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8936
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8937 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
8938 screenclear2(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8939 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8940 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8941
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8942 if (starting == NO_SCREEN || ScreenLines == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8943 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8944 || (gui.in_use && gui.starting)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8945 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8946 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8947 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8948
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8949 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8950 if (!gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8951 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8952 screen_attr = -1; /* force setting the Normal colors */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8953 screen_stop_highlight(); /* don't want highlighting here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8954
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8955 #ifdef FEAT_CLIPBOARD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8956 /* disable selection without redrawing it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8957 clip_scroll_selection(9999);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8958 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8959
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8960 /* blank out ScreenLines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8961 for (i = 0; i < Rows; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8962 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8963 lineclear(LineOffset[i], (int)Columns);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8964 LineWraps[i] = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8965 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8966
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8967 if (can_clear(T_CL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8968 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8969 out_str(T_CL); /* clear the display */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8970 clear_cmdline = FALSE;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 642
diff changeset
8971 mode_displayed = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8972 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8973 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8974 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8975 /* can't clear the screen, mark all chars with invalid attributes */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8976 for (i = 0; i < Rows; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8977 lineinvalid(LineOffset[i], (int)Columns);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8978 clear_cmdline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8979 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8980
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8981 screen_cleared = TRUE; /* can use contents of ScreenLines now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8982
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8983 win_rest_invalid(firstwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8984 redraw_cmdline = TRUE;
670
f892bda292a8 updated for version 7.0198
vimboss
parents: 667
diff changeset
8985 #ifdef FEAT_WINDOWS
673
513866ffe6af updated for version 7.0200
vimboss
parents: 671
diff changeset
8986 redraw_tabline = TRUE;
670
f892bda292a8 updated for version 7.0198
vimboss
parents: 667
diff changeset
8987 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8988 if (must_redraw == CLEAR) /* no need to clear again */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8989 must_redraw = NOT_VALID;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8990 compute_cmdrow();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8991 msg_row = cmdline_row; /* put cursor on last line for messages */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8992 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8993 screen_start(); /* don't know where cursor is now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8994 msg_scrolled = 0; /* can't scroll back */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8995 msg_didany = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8996 msg_didout = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8997 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8998
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8999 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9000 * Clear one line in ScreenLines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9001 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9002 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9003 lineclear(unsigned off, int width)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9004 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9005 (void)vim_memset(ScreenLines + off, ' ', (size_t)width * sizeof(schar_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9006 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9007 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9008 (void)vim_memset(ScreenLinesUC + off, 0,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9009 (size_t)width * sizeof(u8char_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9010 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9011 (void)vim_memset(ScreenAttrs + off, 0, (size_t)width * sizeof(sattr_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9012 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9013
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9014 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9015 * Mark one line in ScreenLines invalid by setting the attributes to an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9016 * invalid value.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9017 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9018 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9019 lineinvalid(unsigned off, int width)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9020 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9021 (void)vim_memset(ScreenAttrs + off, -1, (size_t)width * sizeof(sattr_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9022 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9023
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
9024 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9025 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9026 * Copy part of a Screenline for vertically split window "wp".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9027 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9028 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9029 linecopy(int to, int from, win_T *wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9030 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9031 unsigned off_to = LineOffset[to] + wp->w_wincol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9032 unsigned off_from = LineOffset[from] + wp->w_wincol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9033
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9034 mch_memmove(ScreenLines + off_to, ScreenLines + off_from,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9035 wp->w_width * sizeof(schar_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9036 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9037 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9038 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
9039 int i;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
9040
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9041 mch_memmove(ScreenLinesUC + off_to, ScreenLinesUC + off_from,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9042 wp->w_width * sizeof(u8char_T));
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
9043 for (i = 0; i < p_mco; ++i)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
9044 mch_memmove(ScreenLinesC[i] + off_to, ScreenLinesC[i] + off_from,
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 707
diff changeset
9045 wp->w_width * sizeof(u8char_T));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9046 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9047 if (enc_dbcs == DBCS_JPNU)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9048 mch_memmove(ScreenLines2 + off_to, ScreenLines2 + off_from,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9049 wp->w_width * sizeof(schar_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9050 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9051 mch_memmove(ScreenAttrs + off_to, ScreenAttrs + off_from,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9052 wp->w_width * sizeof(sattr_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9053 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9054 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9055
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9056 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9057 * Return TRUE if clearing with term string "p" would work.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9058 * It can't work when the string is empty or it won't set the right background.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9059 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9060 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9061 can_clear(char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9062 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9063 return (*p != NUL && (t_colors <= 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9064 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9065 || gui.in_use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9066 #endif
9027
773d627cac0b commit https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162
Christian Brabandt <cb@256bit.org>
parents: 8977
diff changeset
9067 #ifdef FEAT_TERMGUICOLORS
9939
ccb6461b82df commit https://github.com/vim/vim/commit/1b58cdd160c2e0ada0f638679a2aa27e4665fc48
Christian Brabandt <cb@256bit.org>
parents: 9885
diff changeset
9068 || (p_tgc && cterm_normal_bg_gui_color == INVALCOLOR)
9320
b6472fd9f5ba commit https://github.com/vim/vim/commit/d18f672fc9477f3c0cb7cc4ce8d9237ed825c612
Christian Brabandt <cb@256bit.org>
parents: 9282
diff changeset
9069 || (!p_tgc && cterm_normal_bg_color == 0)
b6472fd9f5ba commit https://github.com/vim/vim/commit/d18f672fc9477f3c0cb7cc4ce8d9237ed825c612
Christian Brabandt <cb@256bit.org>
parents: 9282
diff changeset
9070 #else
b6472fd9f5ba commit https://github.com/vim/vim/commit/d18f672fc9477f3c0cb7cc4ce8d9237ed825c612
Christian Brabandt <cb@256bit.org>
parents: 9282
diff changeset
9071 || cterm_normal_bg_color == 0
b6472fd9f5ba commit https://github.com/vim/vim/commit/d18f672fc9477f3c0cb7cc4ce8d9237ed825c612
Christian Brabandt <cb@256bit.org>
parents: 9282
diff changeset
9072 #endif
b6472fd9f5ba commit https://github.com/vim/vim/commit/d18f672fc9477f3c0cb7cc4ce8d9237ed825c612
Christian Brabandt <cb@256bit.org>
parents: 9282
diff changeset
9073 || *T_UT != NUL));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9074 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9075
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9076 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9077 * Reset cursor position. Use whenever cursor was moved because of outputting
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9078 * something directly to the screen (shell commands) or a terminal control
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9079 * code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9080 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9081 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9082 screen_start(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9083 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9084 screen_cur_row = screen_cur_col = 9999;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9085 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9086
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9087 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9088 * Move the cursor to position "row","col" in the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9089 * This tries to find the most efficient way to move, minimizing the number of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9090 * characters sent to the terminal.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9091 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9092 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9093 windgoto(int row, int col)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9094 {
205
d292c40ca788 updated for version 7.0060
vimboss
parents: 168
diff changeset
9095 sattr_T *p;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9096 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9097 int plan;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9098 int cost;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9099 int wouldbe_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9100 int noinvcurs;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9101 char_u *bs;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9102 int goto_cost;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9103 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9104
1213
8906c10ecbb0 updated for version 7.1b
vimboss
parents: 1112
diff changeset
9105 #define GOTO_COST 7 /* assume a term_windgoto() takes about 7 chars */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9106 #define HIGHL_COST 5 /* assume unhighlight takes 5 chars */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9107
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9108 #define PLAN_LE 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9109 #define PLAN_CR 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9110 #define PLAN_NL 3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9111 #define PLAN_WRITE 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9112 /* Can't use ScreenLines unless initialized */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9113 if (ScreenLines == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9114 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9115
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9116 if (col != screen_cur_col || row != screen_cur_row)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9117 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9118 /* Check for valid position. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9119 if (row < 0) /* window without text lines? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9120 row = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9121 if (row >= screen_Rows)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9122 row = screen_Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9123 if (col >= screen_Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9124 col = screen_Columns - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9125
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9126 /* check if no cursor movement is allowed in highlight mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9127 if (screen_attr && *T_MS == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9128 noinvcurs = HIGHL_COST;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9129 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9130 noinvcurs = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9131 goto_cost = GOTO_COST + noinvcurs;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9132
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9133 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9134 * Plan how to do the positioning:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9135 * 1. Use CR to move it to column 0, same row.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9136 * 2. Use T_LE to move it a few columns to the left.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9137 * 3. Use NL to move a few lines down, column 0.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9138 * 4. Move a few columns to the right with T_ND or by writing chars.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9139 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9140 * Don't do this if the cursor went beyond the last column, the cursor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9141 * position is unknown then (some terminals wrap, some don't )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9142 *
1213
8906c10ecbb0 updated for version 7.1b
vimboss
parents: 1112
diff changeset
9143 * First check if the highlighting attributes allow us to write
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9144 * characters to move the cursor to the right.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9145 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9146 if (row >= screen_cur_row && screen_cur_col < Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9147 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9148 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9149 * If the cursor is in the same row, bigger col, we can use CR
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9150 * or T_LE.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9151 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9152 bs = NULL; /* init for GCC */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9153 attr = screen_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9154 if (row == screen_cur_row && col < screen_cur_col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9155 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9156 /* "le" is preferred over "bc", because "bc" is obsolete */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9157 if (*T_LE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9158 bs = T_LE; /* "cursor left" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9159 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9160 bs = T_BC; /* "backspace character (old) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9161 if (*bs)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9162 cost = (screen_cur_col - col) * (int)STRLEN(bs);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9163 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9164 cost = 999;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9165 if (col + 1 < cost) /* using CR is less characters */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9166 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9167 plan = PLAN_CR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9168 wouldbe_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9169 cost = 1; /* CR is just one character */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9170 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9171 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9172 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9173 plan = PLAN_LE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9174 wouldbe_col = col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9175 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9176 if (noinvcurs) /* will stop highlighting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9177 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9178 cost += noinvcurs;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9179 attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9180 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9181 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9182
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9183 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9184 * If the cursor is above where we want to be, we can use CR LF.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9185 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9186 else if (row > screen_cur_row)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9187 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9188 plan = PLAN_NL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9189 wouldbe_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9190 cost = (row - screen_cur_row) * 2; /* CR LF */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9191 if (noinvcurs) /* will stop highlighting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9192 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9193 cost += noinvcurs;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9194 attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9195 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9196 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9197
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9198 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9199 * If the cursor is in the same row, smaller col, just use write.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9200 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9201 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9202 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9203 plan = PLAN_WRITE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9204 wouldbe_col = screen_cur_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9205 cost = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9206 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9207
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9208 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9209 * Check if any characters that need to be written have the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9210 * correct attributes. Also avoid UTF-8 characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9211 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9212 i = col - wouldbe_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9213 if (i > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9214 cost += i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9215 if (cost < goto_cost && i > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9216 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9217 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9218 * Check if the attributes are correct without additionally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9219 * stopping highlighting.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9220 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9221 p = ScreenAttrs + LineOffset[row] + wouldbe_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9222 while (i && *p++ == attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9223 --i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9224 if (i != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9225 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9226 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9227 * Try if it works when highlighting is stopped here.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9228 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9229 if (*--p == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9230 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9231 cost += noinvcurs;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9232 while (i && *p++ == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9233 --i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9234 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9235 if (i != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9236 cost = 999; /* different attributes, don't do it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9237 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9238 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9239 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9240 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9241 /* Don't use an UTF-8 char for positioning, it's slow. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9242 for (i = wouldbe_col; i < col; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9243 if (ScreenLinesUC[LineOffset[row] + i] != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9244 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9245 cost = 999;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9246 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9247 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9248 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9249 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9250 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9251
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9252 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9253 * We can do it without term_windgoto()!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9254 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9255 if (cost < goto_cost)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9256 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9257 if (plan == PLAN_LE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9258 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9259 if (noinvcurs)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9260 screen_stop_highlight();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9261 while (screen_cur_col > col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9262 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9263 out_str(bs);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9264 --screen_cur_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9265 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9266 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9267 else if (plan == PLAN_CR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9268 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9269 if (noinvcurs)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9270 screen_stop_highlight();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9271 out_char('\r');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9272 screen_cur_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9273 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9274 else if (plan == PLAN_NL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9275 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9276 if (noinvcurs)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9277 screen_stop_highlight();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9278 while (screen_cur_row < row)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9279 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9280 out_char('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9281 ++screen_cur_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9282 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9283 screen_cur_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9284 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9285
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9286 i = col - screen_cur_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9287 if (i > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9288 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9289 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9290 * Use cursor-right if it's one character only. Avoids
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9291 * removing a line of pixels from the last bold char, when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9292 * using the bold trick in the GUI.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9293 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9294 if (T_ND[0] != NUL && T_ND[1] == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9295 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9296 while (i-- > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9297 out_char(*T_ND);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9298 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9299 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9300 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9301 int off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9302
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9303 off = LineOffset[row] + screen_cur_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9304 while (i-- > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9305 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9306 if (ScreenAttrs[off] != screen_attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9307 screen_stop_highlight();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9308 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9309 out_flush_check();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9310 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9311 out_char(ScreenLines[off]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9312 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9313 if (enc_dbcs == DBCS_JPNU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9314 && ScreenLines[off] == 0x8e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9315 out_char(ScreenLines2[off]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9316 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9317 ++off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9318 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9319 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9320 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9321 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9322 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9323 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9324 cost = 999;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9325
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9326 if (cost >= goto_cost)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9327 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9328 if (noinvcurs)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9329 screen_stop_highlight();
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
9330 if (row == screen_cur_row && (col > screen_cur_col)
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5987
diff changeset
9331 && *T_CRI != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9332 term_cursor_right(col - screen_cur_col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9333 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9334 term_windgoto(row, col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9335 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9336 screen_cur_row = row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9337 screen_cur_col = col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9338 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9339 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9340
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9341 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9342 * Set cursor to its position in the current window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9343 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9344 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9345 setcursor(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9346 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9347 if (redrawing())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9348 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9349 validate_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9350 windgoto(W_WINROW(curwin) + curwin->w_wrow,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9351 W_WINCOL(curwin) + (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9352 #ifdef FEAT_RIGHTLEFT
1545
cbe70f2e756d updated for version 7.1-259
vimboss
parents: 1536
diff changeset
9353 /* With 'rightleft' set and the cursor on a double-wide
cbe70f2e756d updated for version 7.1-259
vimboss
parents: 1536
diff changeset
9354 * character, position it on the leftmost column. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9355 curwin->w_p_rl ? ((int)W_WIDTH(curwin) - curwin->w_wcol - (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9356 # ifdef FEAT_MBYTE
1545
cbe70f2e756d updated for version 7.1-259
vimboss
parents: 1536
diff changeset
9357 (has_mbyte
cbe70f2e756d updated for version 7.1-259
vimboss
parents: 1536
diff changeset
9358 && (*mb_ptr2cells)(ml_get_cursor()) == 2
cbe70f2e756d updated for version 7.1-259
vimboss
parents: 1536
diff changeset
9359 && vim_isprintc(gchar_cursor())) ? 2 :
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9360 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9361 1)) :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9362 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9363 curwin->w_wcol));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9364 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9365 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9366
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9367
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9368 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9369 * insert 'line_count' lines at 'row' in window 'wp'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9370 * if 'invalid' is TRUE the wp->w_lines[].wl_lnum is invalidated.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9371 * if 'mayclear' is TRUE the screen will be cleared if it is faster than
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9372 * scrolling.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9373 * Returns FAIL if the lines are not inserted, OK for success.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9374 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9375 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9376 win_ins_lines(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9377 win_T *wp,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9378 int row,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9379 int line_count,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9380 int invalid,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9381 int mayclear)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9382 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9383 int did_delete;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9384 int nextrow;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9385 int lastrow;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9386 int retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9387
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9388 if (invalid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9389 wp->w_lines_valid = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9390
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9391 if (wp->w_height < 5)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9392 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9393
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9394 if (line_count > wp->w_height - row)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9395 line_count = wp->w_height - row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9396
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9397 retval = win_do_lines(wp, row, line_count, mayclear, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9398 if (retval != MAYBE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9399 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9400
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9401 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9402 * If there is a next window or a status line, we first try to delete the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9403 * lines at the bottom to avoid messing what is after the window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9404 * If this fails and there are following windows, don't do anything to avoid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9405 * messing up those windows, better just redraw.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9406 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9407 did_delete = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9408 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9409 if (wp->w_next != NULL || wp->w_status_height)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9410 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9411 if (screen_del_lines(0, W_WINROW(wp) + wp->w_height - line_count,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9412 line_count, (int)Rows, FALSE, NULL) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9413 did_delete = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9414 else if (wp->w_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9415 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9416 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9417 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9418 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9419 * if no lines deleted, blank the lines that will end up below the window
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9420 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9421 if (!did_delete)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9422 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9423 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9424 wp->w_redr_status = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9425 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9426 redraw_cmdline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9427 nextrow = W_WINROW(wp) + wp->w_height + W_STATUS_HEIGHT(wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9428 lastrow = nextrow + line_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9429 if (lastrow > Rows)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9430 lastrow = Rows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9431 screen_fill(nextrow - line_count, lastrow - line_count,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9432 W_WINCOL(wp), (int)W_ENDCOL(wp),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9433 ' ', ' ', 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9434 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9435
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9436 if (screen_ins_lines(0, W_WINROW(wp) + row, line_count, (int)Rows, NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9437 == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9438 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9439 /* deletion will have messed up other windows */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9440 if (did_delete)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9441 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9442 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9443 wp->w_redr_status = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9444 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9445 win_rest_invalid(W_NEXT(wp));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9446 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9447 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9448 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9449
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9450 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9451 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9452
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9453 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9454 * delete "line_count" window lines at "row" in window "wp"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9455 * If "invalid" is TRUE curwin->w_lines[] is invalidated.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9456 * If "mayclear" is TRUE the screen will be cleared if it is faster than
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9457 * scrolling
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9458 * Return OK for success, FAIL if the lines are not deleted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9459 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9460 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9461 win_del_lines(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9462 win_T *wp,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9463 int row,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9464 int line_count,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9465 int invalid,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9466 int mayclear)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9467 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9468 int retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9469
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9470 if (invalid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9471 wp->w_lines_valid = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9472
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9473 if (line_count > wp->w_height - row)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9474 line_count = wp->w_height - row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9475
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9476 retval = win_do_lines(wp, row, line_count, mayclear, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9477 if (retval != MAYBE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9478 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9479
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9480 if (screen_del_lines(0, W_WINROW(wp) + row, line_count,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9481 (int)Rows, FALSE, NULL) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9482 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9483
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9484 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9485 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9486 * If there are windows or status lines below, try to put them at the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9487 * correct place. If we can't do that, they have to be redrawn.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9488 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9489 if (wp->w_next || wp->w_status_height || cmdline_row < Rows - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9490 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9491 if (screen_ins_lines(0, W_WINROW(wp) + wp->w_height - line_count,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9492 line_count, (int)Rows, NULL) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9493 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9494 wp->w_redr_status = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9495 win_rest_invalid(wp->w_next);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9496 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9497 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9498 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9499 * If this is the last window and there is no status line, redraw the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9500 * command line later.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9501 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9502 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9503 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9504 redraw_cmdline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9505 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9506 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9507
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9508 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9509 * Common code for win_ins_lines() and win_del_lines().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9510 * Returns OK or FAIL when the work has been done.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9511 * Returns MAYBE when not finished yet.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9512 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9513 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9514 win_do_lines(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9515 win_T *wp,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9516 int row,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9517 int line_count,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9518 int mayclear,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9519 int del)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9520 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9521 int retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9522
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9523 if (!redrawing() || line_count <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9524 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9525
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
9526 /* When inserting lines would result in loss of command output, just redraw
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
9527 * the lines. */
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
9528 if (no_win_do_lines_ins && !del)
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
9529 return FAIL;
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
9530
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9531 /* only a few lines left: redraw is faster */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9532 if (mayclear && Rows - line_count < 5
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
9533 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9534 && wp->w_width == Columns
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9535 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9536 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9537 {
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
9538 if (!no_win_do_lines_ins)
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
9539 screenclear(); /* will set wp->w_lines_valid to 0 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9540 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9541 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9542
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9543 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9544 * Delete all remaining lines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9545 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9546 if (row + line_count >= wp->w_height)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9547 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9548 screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + wp->w_height,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9549 W_WINCOL(wp), (int)W_ENDCOL(wp),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9550 ' ', ' ', 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9551 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9552 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9553
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9554 /*
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
9555 * When scrolling, the message on the command line should be cleared,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9556 * otherwise it will stay there forever.
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
9557 * Don't do this when avoiding to insert lines.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9558 */
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
9559 if (!no_win_do_lines_ins)
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11277
diff changeset
9560 clear_cmdline = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9561
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9562 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9563 * If the terminal can set a scroll region, use that.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9564 * Always do this in a vertically split window. This will redraw from
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9565 * ScreenLines[] when t_CV isn't defined. That's faster than using
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9566 * win_line().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9567 * Don't use a scroll region when we are going to redraw the text, writing
8212
05b88224cea1 commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents: 7833
diff changeset
9568 * a character in the lower right corner of the scroll region may cause a
05b88224cea1 commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents: 7833
diff changeset
9569 * scroll-up .
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9570 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9571 if (scroll_region
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
9572 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9573 || W_WIDTH(wp) != Columns
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9574 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9575 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9576 {
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
9577 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9578 if (scroll_region && (wp->w_width == Columns || *T_CSV != NUL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9579 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9580 scroll_region_set(wp, row);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9581 if (del)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9582 retval = screen_del_lines(W_WINROW(wp) + row, 0, line_count,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9583 wp->w_height - row, FALSE, wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9584 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9585 retval = screen_ins_lines(W_WINROW(wp) + row, 0, line_count,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9586 wp->w_height - row, wp);
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
9587 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9588 if (scroll_region && (wp->w_width == Columns || *T_CSV != NUL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9589 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9590 scroll_region_reset();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9591 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9592 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9593
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9594 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9595 if (wp->w_next != NULL && p_tf) /* don't delete/insert on fast terminal */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9596 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9597 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9598
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9599 return MAYBE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9600 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9601
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9602 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9603 * window 'wp' and everything after it is messed up, mark it for redraw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9604 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9605 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9606 win_rest_invalid(win_T *wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9607 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9608 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9609 while (wp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9610 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9611 if (wp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9612 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9613 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9614 redraw_win_later(wp, NOT_VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9615 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9616 wp->w_redr_status = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9617 wp = wp->w_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9618 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9619 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9620 redraw_cmdline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9621 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9622
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9623 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9624 * The rest of the routines in this file perform screen manipulations. The
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9625 * given operation is performed physically on the screen. The corresponding
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9626 * change is also made to the internal screen image. In this way, the editor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9627 * anticipates the effect of editing changes on the appearance of the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9628 * That way, when we call screenupdate a complete redraw isn't usually
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9629 * necessary. Another advantage is that we can keep adding code to anticipate
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9630 * screen changes, and in the meantime, everything still works.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9631 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9632
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9633 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9634 * types for inserting or deleting lines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9635 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9636 #define USE_T_CAL 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9637 #define USE_T_CDL 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9638 #define USE_T_AL 3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9639 #define USE_T_CE 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9640 #define USE_T_DL 5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9641 #define USE_T_SR 6
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9642 #define USE_NL 7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9643 #define USE_T_CD 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9644 #define USE_REDRAW 9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9645
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9646 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9647 * insert lines on the screen and update ScreenLines[]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9648 * 'end' is the line after the scrolled part. Normally it is Rows.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9649 * When scrolling region used 'off' is the offset from the top for the region.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9650 * 'row' and 'end' are relative to the start of the region.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9651 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9652 * return FAIL for failure, OK for success.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9653 */
446
7472c565592a updated for version 7.0117
vimboss
parents: 422
diff changeset
9654 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9655 screen_ins_lines(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9656 int off,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9657 int row,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9658 int line_count,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9659 int end,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9660 win_T *wp) /* NULL or window to use width from */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9661 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9662 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9663 int j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9664 unsigned temp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9665 int cursor_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9666 int type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9667 int result_empty;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9668 int can_ce = can_clear(T_CE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9669
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9670 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9671 * FAIL if
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9672 * - there is no valid screen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9673 * - the screen has to be redrawn completely
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9674 * - the line count is less than one
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9675 * - the line count is more than 'ttyscroll'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9676 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9677 if (!screen_valid(TRUE) || line_count <= 0 || line_count > p_ttyscroll)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9678 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9679
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9680 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9681 * There are seven ways to insert lines:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9682 * 0. When in a vertically split window and t_CV isn't set, redraw the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9683 * characters from ScreenLines[].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9684 * 1. Use T_CD (clear to end of display) if it exists and the result of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9685 * the insert is just empty lines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9686 * 2. Use T_CAL (insert multiple lines) if it exists and T_AL is not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9687 * present or line_count > 1. It looks better if we do all the inserts
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9688 * at once.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9689 * 3. Use T_CDL (delete multiple lines) if it exists and the result of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9690 * insert is just empty lines and T_CE is not present or line_count >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9691 * 1.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9692 * 4. Use T_AL (insert line) if it exists.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9693 * 5. Use T_CE (erase line) if it exists and the result of the insert is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9694 * just empty lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9695 * 6. Use T_DL (delete line) if it exists and the result of the insert is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9696 * just empty lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9697 * 7. Use T_SR (scroll reverse) if it exists and inserting at row 0 and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9698 * the 'da' flag is not set or we have clear line capability.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9699 * 8. redraw the characters from ScreenLines[].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9700 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9701 * Careful: In a hpterm scroll reverse doesn't work as expected, it moves
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9702 * the scrollbar for the window. It does have insert line, use that if it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9703 * exists.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9704 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9705 result_empty = (row + line_count >= end);
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
9706 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9707 if (wp != NULL && wp->w_width != Columns && *T_CSV == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9708 type = USE_REDRAW;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9709 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9710 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9711 if (can_clear(T_CD) && result_empty)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9712 type = USE_T_CD;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9713 else if (*T_CAL != NUL && (line_count > 1 || *T_AL == NUL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9714 type = USE_T_CAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9715 else if (*T_CDL != NUL && result_empty && (line_count > 1 || !can_ce))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9716 type = USE_T_CDL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9717 else if (*T_AL != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9718 type = USE_T_AL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9719 else if (can_ce && result_empty)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9720 type = USE_T_CE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9721 else if (*T_DL != NUL && result_empty)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9722 type = USE_T_DL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9723 else if (*T_SR != NUL && row == 0 && (*T_DA == NUL || can_ce))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9724 type = USE_T_SR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9725 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9726 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9727
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9728 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9729 * For clearing the lines screen_del_lines() is used. This will also take
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9730 * care of t_db if necessary.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9731 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9732 if (type == USE_T_CD || type == USE_T_CDL ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9733 type == USE_T_CE || type == USE_T_DL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9734 return screen_del_lines(off, row, line_count, end, FALSE, wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9735
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9736 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9737 * If text is retained below the screen, first clear or delete as many
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9738 * lines at the bottom of the window as are about to be inserted so that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9739 * the deleted lines won't later surface during a screen_del_lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9740 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9741 if (*T_DB)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9742 screen_del_lines(off, end - line_count, line_count, end, FALSE, wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9743
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9744 #ifdef FEAT_CLIPBOARD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9745 /* Remove a modeless selection when inserting lines halfway the screen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9746 * or not the full width of the screen. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9747 if (off + row > 0
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
9748 # ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9749 || (wp != NULL && wp->w_width != Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9750 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9751 )
3674
b9aa7fb4a928 updated for version 7.3.597
Bram Moolenaar <bram@vim.org>
parents: 3586
diff changeset
9752 clip_clear_selection(&clip_star);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9753 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9754 clip_scroll_selection(-line_count);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9755 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9756
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9757 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9758 /* Don't update the GUI cursor here, ScreenLines[] is invalid until the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9759 * scrolling is actually carried out. */
9848
664276833670 commit https://github.com/vim/vim/commit/107abd2ca53c31fd3bb40d77ff296e98eaae2975
Christian Brabandt <cb@256bit.org>
parents: 9754
diff changeset
9760 gui_dont_update_cursor(row + off <= gui.cursor_row);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9761 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9762
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9763 if (*T_CCS != NUL) /* cursor relative to region */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9764 cursor_row = row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9765 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9766 cursor_row = row + off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9767
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9768 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9769 * Shift LineOffset[] line_count down to reflect the inserted lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9770 * Clear the inserted lines in ScreenLines[].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9771 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9772 row += off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9773 end += off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9774 for (i = 0; i < line_count; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9775 {
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
9776 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9777 if (wp != NULL && wp->w_width != Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9778 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9779 /* need to copy part of a line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9780 j = end - 1 - i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9781 while ((j -= line_count) >= row)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9782 linecopy(j + line_count, j, wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9783 j += line_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9784 if (can_clear((char_u *)" "))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9785 lineclear(LineOffset[j] + wp->w_wincol, wp->w_width);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9786 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9787 lineinvalid(LineOffset[j] + wp->w_wincol, wp->w_width);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9788 LineWraps[j] = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9789 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9790 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9791 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9792 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9793 j = end - 1 - i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9794 temp = LineOffset[j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9795 while ((j -= line_count) >= row)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9796 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9797 LineOffset[j + line_count] = LineOffset[j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9798 LineWraps[j + line_count] = LineWraps[j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9799 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9800 LineOffset[j + line_count] = temp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9801 LineWraps[j + line_count] = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9802 if (can_clear((char_u *)" "))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9803 lineclear(temp, (int)Columns);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9804 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9805 lineinvalid(temp, (int)Columns);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9806 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9807 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9808
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9809 screen_stop_highlight();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9810 windgoto(cursor_row, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9811
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
9812 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9813 /* redraw the characters */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9814 if (type == USE_REDRAW)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9815 redraw_block(row, end, wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9816 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9817 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9818 if (type == USE_T_CAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9819 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9820 term_append_lines(line_count);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9821 screen_start(); /* don't know where cursor is now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9822 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9823 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9824 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9825 for (i = 0; i < line_count; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9826 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9827 if (type == USE_T_AL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9828 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9829 if (i && cursor_row != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9830 windgoto(cursor_row, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9831 out_str(T_AL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9832 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9833 else /* type == USE_T_SR */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9834 out_str(T_SR);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9835 screen_start(); /* don't know where cursor is now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9836 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9837 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9838
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9839 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9840 * With scroll-reverse and 'da' flag set we need to clear the lines that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9841 * have been scrolled down into the region.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9842 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9843 if (type == USE_T_SR && *T_DA)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9844 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9845 for (i = 0; i < line_count; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9846 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9847 windgoto(off + i, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9848 out_str(T_CE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9849 screen_start(); /* don't know where cursor is now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9850 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9851 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9852
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9853 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9854 gui_can_update_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9855 if (gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9856 out_flush(); /* always flush after a scroll */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9857 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9858 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9859 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9860
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9861 /*
9848
664276833670 commit https://github.com/vim/vim/commit/107abd2ca53c31fd3bb40d77ff296e98eaae2975
Christian Brabandt <cb@256bit.org>
parents: 9754
diff changeset
9862 * Delete lines on the screen and update ScreenLines[].
664276833670 commit https://github.com/vim/vim/commit/107abd2ca53c31fd3bb40d77ff296e98eaae2975
Christian Brabandt <cb@256bit.org>
parents: 9754
diff changeset
9863 * "end" is the line after the scrolled part. Normally it is Rows.
664276833670 commit https://github.com/vim/vim/commit/107abd2ca53c31fd3bb40d77ff296e98eaae2975
Christian Brabandt <cb@256bit.org>
parents: 9754
diff changeset
9864 * When scrolling region used "off" is the offset from the top for the region.
664276833670 commit https://github.com/vim/vim/commit/107abd2ca53c31fd3bb40d77ff296e98eaae2975
Christian Brabandt <cb@256bit.org>
parents: 9754
diff changeset
9865 * "row" and "end" are relative to the start of the region.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9866 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9867 * Return OK for success, FAIL if the lines are not deleted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9868 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9869 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9870 screen_del_lines(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9871 int off,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9872 int row,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9873 int line_count,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9874 int end,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9875 int force, /* even when line_count > p_ttyscroll */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
9876 win_T *wp UNUSED) /* NULL or window to use width from */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9877 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9878 int j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9879 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9880 unsigned temp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9881 int cursor_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9882 int cursor_end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9883 int result_empty; /* result is empty until end of region */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9884 int can_delete; /* deleting line codes can be used */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9885 int type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9886
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9887 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9888 * FAIL if
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9889 * - there is no valid screen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9890 * - the screen has to be redrawn completely
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9891 * - the line count is less than one
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9892 * - the line count is more than 'ttyscroll'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9893 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9894 if (!screen_valid(TRUE) || line_count <= 0 ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9895 (!force && line_count > p_ttyscroll))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9896 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9897
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9898 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9899 * Check if the rest of the current region will become empty.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9900 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9901 result_empty = row + line_count >= end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9902
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9903 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9904 * We can delete lines only when 'db' flag not set or when 'ce' option
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9905 * available.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9906 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9907 can_delete = (*T_DB == NUL || can_clear(T_CE));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9908
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9909 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9910 * There are six ways to delete lines:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9911 * 0. When in a vertically split window and t_CV isn't set, redraw the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9912 * characters from ScreenLines[].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9913 * 1. Use T_CD if it exists and the result is empty.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9914 * 2. Use newlines if row == 0 and count == 1 or T_CDL does not exist.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9915 * 3. Use T_CDL (delete multiple lines) if it exists and line_count > 1 or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9916 * none of the other ways work.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9917 * 4. Use T_CE (erase line) if the result is empty.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9918 * 5. Use T_DL (delete line) if it exists.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9919 * 6. redraw the characters from ScreenLines[].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9920 */
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
9921 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9922 if (wp != NULL && wp->w_width != Columns && *T_CSV == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9923 type = USE_REDRAW;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9924 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9925 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9926 if (can_clear(T_CD) && result_empty)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9927 type = USE_T_CD;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9928 #if defined(__BEOS__) && defined(BEOS_DR8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9929 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9930 * USE_NL does not seem to work in Terminal of DR8 so we set T_DB="" in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9931 * its internal termcap... this works okay for tests which test *T_DB !=
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9932 * NUL. It has the disadvantage that the user cannot use any :set t_*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9933 * command to get T_DB (back) to empty_option, only :set term=... will do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9934 * the trick...
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9935 * Anyway, this hack will hopefully go away with the next OS release.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9936 * (Olaf Seibert)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9937 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9938 else if (row == 0 && T_DB == empty_option
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9939 && (line_count == 1 || *T_CDL == NUL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9940 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9941 else if (row == 0 && (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9942 #ifndef AMIGA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9943 /* On the Amiga, somehow '\n' on the last line doesn't always scroll
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9944 * up, so use delete-line command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9945 line_count == 1 ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9946 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9947 *T_CDL == NUL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9948 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9949 type = USE_NL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9950 else if (*T_CDL != NUL && line_count > 1 && can_delete)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9951 type = USE_T_CDL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9952 else if (can_clear(T_CE) && result_empty
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
9953 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9954 && (wp == NULL || wp->w_width == Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9955 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9956 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9957 type = USE_T_CE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9958 else if (*T_DL != NUL && can_delete)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9959 type = USE_T_DL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9960 else if (*T_CDL != NUL && can_delete)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9961 type = USE_T_CDL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9962 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9963 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9964
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9965 #ifdef FEAT_CLIPBOARD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9966 /* Remove a modeless selection when deleting lines halfway the screen or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9967 * not the full width of the screen. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9968 if (off + row > 0
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
9969 # ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9970 || (wp != NULL && wp->w_width != Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9971 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9972 )
3674
b9aa7fb4a928 updated for version 7.3.597
Bram Moolenaar <bram@vim.org>
parents: 3586
diff changeset
9973 clip_clear_selection(&clip_star);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9974 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9975 clip_scroll_selection(line_count);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9976 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9977
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9978 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9979 /* Don't update the GUI cursor here, ScreenLines[] is invalid until the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9980 * scrolling is actually carried out. */
9848
664276833670 commit https://github.com/vim/vim/commit/107abd2ca53c31fd3bb40d77ff296e98eaae2975
Christian Brabandt <cb@256bit.org>
parents: 9754
diff changeset
9981 gui_dont_update_cursor(gui.cursor_row >= row + off
664276833670 commit https://github.com/vim/vim/commit/107abd2ca53c31fd3bb40d77ff296e98eaae2975
Christian Brabandt <cb@256bit.org>
parents: 9754
diff changeset
9982 && gui.cursor_row < end + off);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9983 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9984
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9985 if (*T_CCS != NUL) /* cursor relative to region */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9986 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9987 cursor_row = row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9988 cursor_end = end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9989 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9990 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9991 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9992 cursor_row = row + off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9993 cursor_end = end + off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9994 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9995
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9996 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9997 * Now shift LineOffset[] line_count up to reflect the deleted lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9998 * Clear the inserted lines in ScreenLines[].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9999 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10000 row += off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10001 end += off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10002 for (i = 0; i < line_count; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10003 {
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
10004 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10005 if (wp != NULL && wp->w_width != Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10006 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10007 /* need to copy part of a line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10008 j = row + i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10009 while ((j += line_count) <= end - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10010 linecopy(j - line_count, j, wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10011 j -= line_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10012 if (can_clear((char_u *)" "))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10013 lineclear(LineOffset[j] + wp->w_wincol, wp->w_width);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10014 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10015 lineinvalid(LineOffset[j] + wp->w_wincol, wp->w_width);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10016 LineWraps[j] = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10017 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10018 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10019 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10020 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10021 /* whole width, moving the line pointers is faster */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10022 j = row + i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10023 temp = LineOffset[j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10024 while ((j += line_count) <= end - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10025 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10026 LineOffset[j - line_count] = LineOffset[j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10027 LineWraps[j - line_count] = LineWraps[j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10028 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10029 LineOffset[j - line_count] = temp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10030 LineWraps[j - line_count] = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10031 if (can_clear((char_u *)" "))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10032 lineclear(temp, (int)Columns);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10033 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10034 lineinvalid(temp, (int)Columns);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10035 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10036 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10037
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10038 screen_stop_highlight();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10039
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
10040 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10041 /* redraw the characters */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10042 if (type == USE_REDRAW)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10043 redraw_block(row, end, wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10044 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10045 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10046 if (type == USE_T_CD) /* delete the lines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10047 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10048 windgoto(cursor_row, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10049 out_str(T_CD);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10050 screen_start(); /* don't know where cursor is now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10051 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10052 else if (type == USE_T_CDL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10053 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10054 windgoto(cursor_row, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10055 term_delete_lines(line_count);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10056 screen_start(); /* don't know where cursor is now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10057 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10058 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10059 * Deleting lines at top of the screen or scroll region: Just scroll
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10060 * the whole screen (scroll region) up by outputting newlines on the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10061 * last line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10062 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10063 else if (type == USE_NL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10064 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10065 windgoto(cursor_end - 1, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10066 for (i = line_count; --i >= 0; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10067 out_char('\n'); /* cursor will remain on same line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10068 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10069 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10070 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10071 for (i = line_count; --i >= 0; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10072 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10073 if (type == USE_T_DL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10074 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10075 windgoto(cursor_row, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10076 out_str(T_DL); /* delete a line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10077 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10078 else /* type == USE_T_CE */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10079 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10080 windgoto(cursor_row + i, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10081 out_str(T_CE); /* erase a line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10082 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10083 screen_start(); /* don't know where cursor is now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10084 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10085 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10086
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10087 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10088 * If the 'db' flag is set, we need to clear the lines that have been
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10089 * scrolled up at the bottom of the region.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10090 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10091 if (*T_DB && (type == USE_T_DL || type == USE_T_CDL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10092 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10093 for (i = line_count; i > 0; --i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10094 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10095 windgoto(cursor_end - i, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10096 out_str(T_CE); /* erase a line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10097 screen_start(); /* don't know where cursor is now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10098 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10099 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10100
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10101 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10102 gui_can_update_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10103 if (gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10104 out_flush(); /* always flush after a scroll */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10105 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10106
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10107 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10108 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10109
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10110 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10111 * show the current mode and ruler
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10112 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10113 * If clear_cmdline is TRUE, clear the rest of the cmdline.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10114 * If clear_cmdline is FALSE there may be a message there that needs to be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10115 * cleared only if a mode is shown.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10116 * Return the length of the message (0 if no message).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10117 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10118 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
10119 showmode(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10120 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10121 int need_clear;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10122 int length = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10123 int do_mode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10124 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10125 int nwr_save;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10126 #ifdef FEAT_INS_EXPAND
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10127 int sub_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10128 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10129
642
2392a6da4aa4 updated for version 7.0186
vimboss
parents: 639
diff changeset
10130 do_mode = ((p_smd && msg_silent == 0)
2392a6da4aa4 updated for version 7.0186
vimboss
parents: 639
diff changeset
10131 && ((State & INSERT)
2392a6da4aa4 updated for version 7.0186
vimboss
parents: 639
diff changeset
10132 || restart_edit
5735
50dbef5e774a updated for version 7.4.212
Bram Moolenaar <bram@vim.org>
parents: 5539
diff changeset
10133 || VIsual_active));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10134 if (do_mode || Recording)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10135 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10136 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10137 * Don't show mode right now, when not redrawing or inside a mapping.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10138 * Call char_avail() only when we are going to show something, because
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10139 * it takes a bit of time.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10140 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10141 if (!redrawing() || (char_avail() && !KeyTyped) || msg_silent != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10142 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10143 redraw_cmdline = TRUE; /* show mode later */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10144 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10145 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10146
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10147 nwr_save = need_wait_return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10148
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10149 /* wait a bit before overwriting an important message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10150 check_for_delay(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10151
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10152 /* if the cmdline is more than one line high, erase top lines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10153 need_clear = clear_cmdline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10154 if (clear_cmdline && cmdline_row < Rows - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10155 msg_clr_cmdline(); /* will reset clear_cmdline */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10156
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10157 /* Position on the last line in the window, column 0 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10158 msg_pos_mode();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10159 cursor_off();
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
10160 attr = HL_ATTR(HLF_CM); /* Highlight mode */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10161 if (do_mode)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10162 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10163 MSG_PUTS_ATTR("--", attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10164 #if defined(FEAT_XIM)
2520
6768ebd0bc04 Remove unused code.
Bram Moolenaar <bram@vim.org>
parents: 2509
diff changeset
10165 if (
6768ebd0bc04 Remove unused code.
Bram Moolenaar <bram@vim.org>
parents: 2509
diff changeset
10166 # ifdef FEAT_GUI_GTK
6768ebd0bc04 Remove unused code.
Bram Moolenaar <bram@vim.org>
parents: 2509
diff changeset
10167 preedit_get_status()
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
10168 # else
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
10169 im_get_status()
2520
6768ebd0bc04 Remove unused code.
Bram Moolenaar <bram@vim.org>
parents: 2509
diff changeset
10170 # endif
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1621
diff changeset
10171 )
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 2269
diff changeset
10172 # ifdef FEAT_GUI_GTK /* most of the time, it's not XIM being used */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10173 MSG_PUTS_ATTR(" IM", attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10174 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10175 MSG_PUTS_ATTR(" XIM", attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10176 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10177 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10178 #if defined(FEAT_HANGULIN) && defined(FEAT_GUI)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10179 if (gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10180 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10181 if (hangul_input_state_get())
7208
2c00f6b312bf commit https://github.com/vim/vim/commit/72f4cc4a987d123c0ed909c85b9a05f65cef7202
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
10182 {
2c00f6b312bf commit https://github.com/vim/vim/commit/72f4cc4a987d123c0ed909c85b9a05f65cef7202
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
10183 /* HANGUL */
2c00f6b312bf commit https://github.com/vim/vim/commit/72f4cc4a987d123c0ed909c85b9a05f65cef7202
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
10184 if (enc_utf8)
2c00f6b312bf commit https://github.com/vim/vim/commit/72f4cc4a987d123c0ed909c85b9a05f65cef7202
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
10185 MSG_PUTS_ATTR(" \355\225\234\352\270\200", attr);
2c00f6b312bf commit https://github.com/vim/vim/commit/72f4cc4a987d123c0ed909c85b9a05f65cef7202
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
10186 else
2c00f6b312bf commit https://github.com/vim/vim/commit/72f4cc4a987d123c0ed909c85b9a05f65cef7202
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
10187 MSG_PUTS_ATTR(" \307\321\261\333", attr);
2c00f6b312bf commit https://github.com/vim/vim/commit/72f4cc4a987d123c0ed909c85b9a05f65cef7202
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
10188 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10189 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10190 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10191 #ifdef FEAT_INS_EXPAND
5946
4d7af1962d6c updated for version 7.4.314
Bram Moolenaar <bram@vim.org>
parents: 5923
diff changeset
10192 /* CTRL-X in Insert mode */
4d7af1962d6c updated for version 7.4.314
Bram Moolenaar <bram@vim.org>
parents: 5923
diff changeset
10193 if (edit_submode != NULL && !shortmess(SHM_COMPLETIONMENU))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10194 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10195 /* These messages can get long, avoid a wrap in a narrow
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10196 * window. Prefer showing edit_submode_extra. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10197 length = (Rows - msg_row) * Columns - 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10198 if (edit_submode_extra != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10199 length -= vim_strsize(edit_submode_extra);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10200 if (length > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10201 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10202 if (edit_submode_pre != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10203 length -= vim_strsize(edit_submode_pre);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10204 if (length - vim_strsize(edit_submode) > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10205 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10206 if (edit_submode_pre != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10207 msg_puts_attr(edit_submode_pre, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10208 msg_puts_attr(edit_submode, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10209 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10210 if (edit_submode_extra != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10211 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10212 MSG_PUTS_ATTR(" ", attr); /* add a space in between */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10213 if ((int)edit_submode_highl < (int)HLF_COUNT)
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
10214 sub_attr = HL_ATTR(edit_submode_highl);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10215 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10216 sub_attr = attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10217 msg_puts_attr(edit_submode_extra, sub_attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10218 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10219 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10220 length = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10221 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10222 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10223 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10224 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10225 #ifdef FEAT_VREPLACE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10226 if (State & VREPLACE_FLAG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10227 MSG_PUTS_ATTR(_(" VREPLACE"), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10228 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10229 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10230 if (State & REPLACE_FLAG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10231 MSG_PUTS_ATTR(_(" REPLACE"), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10232 else if (State & INSERT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10233 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10234 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10235 if (p_ri)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10236 MSG_PUTS_ATTR(_(" REVERSE"), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10237 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10238 MSG_PUTS_ATTR(_(" INSERT"), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10239 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10240 else if (restart_edit == 'I')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10241 MSG_PUTS_ATTR(_(" (insert)"), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10242 else if (restart_edit == 'R')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10243 MSG_PUTS_ATTR(_(" (replace)"), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10244 else if (restart_edit == 'V')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10245 MSG_PUTS_ATTR(_(" (vreplace)"), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10246 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10247 if (p_hkmap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10248 MSG_PUTS_ATTR(_(" Hebrew"), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10249 # ifdef FEAT_FKMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10250 if (p_fkmap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10251 MSG_PUTS_ATTR(farsi_text_5, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10252 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10253 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10254 #ifdef FEAT_KEYMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10255 if (State & LANGMAP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10256 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10257 # ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10258 if (curwin->w_p_arab)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10259 MSG_PUTS_ATTR(_(" Arabic"), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10260 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10261 # endif
9645
123d3c102035 commit https://github.com/vim/vim/commit/73ac0c4281a3606651604a3cbcc334bfb3859a87
Christian Brabandt <cb@256bit.org>
parents: 9489
diff changeset
10262 if (get_keymap_str(curwin, (char_u *)" (%s)",
123d3c102035 commit https://github.com/vim/vim/commit/73ac0c4281a3606651604a3cbcc334bfb3859a87
Christian Brabandt <cb@256bit.org>
parents: 9489
diff changeset
10263 NameBuff, MAXPATHL))
123d3c102035 commit https://github.com/vim/vim/commit/73ac0c4281a3606651604a3cbcc334bfb3859a87
Christian Brabandt <cb@256bit.org>
parents: 9489
diff changeset
10264 MSG_PUTS_ATTR(NameBuff, attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10265 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10266 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10267 if ((State & INSERT) && p_paste)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10268 MSG_PUTS_ATTR(_(" (paste)"), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10269
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10270 if (VIsual_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10271 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10272 char *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10273
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10274 /* Don't concatenate separate words to avoid translation
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10275 * problems. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10276 switch ((VIsual_select ? 4 : 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10277 + (VIsual_mode == Ctrl_V) * 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10278 + (VIsual_mode == 'V'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10279 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10280 case 0: p = N_(" VISUAL"); break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10281 case 1: p = N_(" VISUAL LINE"); break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10282 case 2: p = N_(" VISUAL BLOCK"); break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10283 case 4: p = N_(" SELECT"); break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10284 case 5: p = N_(" SELECT LINE"); break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10285 default: p = N_(" SELECT BLOCK"); break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10286 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10287 MSG_PUTS_ATTR(_(p), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10288 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10289 MSG_PUTS_ATTR(" --", attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10290 }
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 642
diff changeset
10291
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10292 need_clear = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10293 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10294 if (Recording
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10295 #ifdef FEAT_INS_EXPAND
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10296 && edit_submode == NULL /* otherwise it gets too long */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10297 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10298 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10299 {
7233
9487ea110214 commit https://github.com/vim/vim/commit/a0ed84a26897c994512873a895b9fc54e90c6845
Christian Brabandt <cb@256bit.org>
parents: 7208
diff changeset
10300 recording_mode(attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10301 need_clear = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10302 }
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 642
diff changeset
10303
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 642
diff changeset
10304 mode_displayed = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10305 if (need_clear || clear_cmdline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10306 msg_clr_eos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10307 msg_didout = FALSE; /* overwrite this message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10308 length = msg_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10309 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10310 need_wait_return = nwr_save; /* never ask for hit-return for this */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10311 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10312 else if (clear_cmdline && msg_silent == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10313 /* Clear the whole command line. Will reset "clear_cmdline". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10314 msg_clr_cmdline();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10315
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10316 #ifdef FEAT_CMDL_INFO
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10317 /* In Visual mode the size of the selected area must be redrawn. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10318 if (VIsual_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10319 clear_showcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10320
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10321 /* If the last window has no status line, the ruler is after the mode
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10322 * message and must be redrawn */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10323 if (redrawing()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10324 # ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10325 && lastwin->w_status_height == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10326 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10327 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10328 win_redr_ruler(lastwin, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10329 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10330 redraw_cmdline = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10331 clear_cmdline = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10332
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10333 return length;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10334 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10335
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10336 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10337 * Position for a mode message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10338 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10339 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
10340 msg_pos_mode(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10341 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10342 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10343 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10344 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10345
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10346 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10347 * Delete mode message. Used when ESC is typed which is expected to end
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10348 * Insert mode (but Insert mode didn't end yet!).
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 642
diff changeset
10349 * Caller should check "mode_displayed".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10350 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10351 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
10352 unshowmode(int force)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10353 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10354 /*
2055
4aa4510d548c updated for version 7.2.341
Bram Moolenaar <bram@zimbu.org>
parents: 2008
diff changeset
10355 * Don't delete it right now, when not redrawing or inside a mapping.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10356 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10357 if (!redrawing() || (!force && char_avail() && !KeyTyped))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10358 redraw_cmdline = TRUE; /* delete mode later */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10359 else
8817
b7eb7bbd71d0 commit https://github.com/vim/vim/commit/fd773e9e88add7d1ffef890fb9f3a00d613b4326
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
10360 clearmode();
b7eb7bbd71d0 commit https://github.com/vim/vim/commit/fd773e9e88add7d1ffef890fb9f3a00d613b4326
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
10361 }
b7eb7bbd71d0 commit https://github.com/vim/vim/commit/fd773e9e88add7d1ffef890fb9f3a00d613b4326
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
10362
b7eb7bbd71d0 commit https://github.com/vim/vim/commit/fd773e9e88add7d1ffef890fb9f3a00d613b4326
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
10363 /*
b7eb7bbd71d0 commit https://github.com/vim/vim/commit/fd773e9e88add7d1ffef890fb9f3a00d613b4326
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
10364 * Clear the mode message.
b7eb7bbd71d0 commit https://github.com/vim/vim/commit/fd773e9e88add7d1ffef890fb9f3a00d613b4326
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
10365 */
b7eb7bbd71d0 commit https://github.com/vim/vim/commit/fd773e9e88add7d1ffef890fb9f3a00d613b4326
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
10366 void
9282
9f97a6290c63 commit https://github.com/vim/vim/commit/cf089463492fab53b2a5d81517829d22f882f82e
Christian Brabandt <cb@256bit.org>
parents: 9213
diff changeset
10367 clearmode(void)
8817
b7eb7bbd71d0 commit https://github.com/vim/vim/commit/fd773e9e88add7d1ffef890fb9f3a00d613b4326
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
10368 {
b7eb7bbd71d0 commit https://github.com/vim/vim/commit/fd773e9e88add7d1ffef890fb9f3a00d613b4326
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
10369 msg_pos_mode();
b7eb7bbd71d0 commit https://github.com/vim/vim/commit/fd773e9e88add7d1ffef890fb9f3a00d613b4326
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
10370 if (Recording)
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
10371 recording_mode(HL_ATTR(HLF_CM));
8817
b7eb7bbd71d0 commit https://github.com/vim/vim/commit/fd773e9e88add7d1ffef890fb9f3a00d613b4326
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
10372 msg_clr_eos();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10373 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10374
7233
9487ea110214 commit https://github.com/vim/vim/commit/a0ed84a26897c994512873a895b9fc54e90c6845
Christian Brabandt <cb@256bit.org>
parents: 7208
diff changeset
10375 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
10376 recording_mode(int attr)
7233
9487ea110214 commit https://github.com/vim/vim/commit/a0ed84a26897c994512873a895b9fc54e90c6845
Christian Brabandt <cb@256bit.org>
parents: 7208
diff changeset
10377 {
9487ea110214 commit https://github.com/vim/vim/commit/a0ed84a26897c994512873a895b9fc54e90c6845
Christian Brabandt <cb@256bit.org>
parents: 7208
diff changeset
10378 MSG_PUTS_ATTR(_("recording"), attr);
9487ea110214 commit https://github.com/vim/vim/commit/a0ed84a26897c994512873a895b9fc54e90c6845
Christian Brabandt <cb@256bit.org>
parents: 7208
diff changeset
10379 if (!shortmess(SHM_RECORDING))
9487ea110214 commit https://github.com/vim/vim/commit/a0ed84a26897c994512873a895b9fc54e90c6845
Christian Brabandt <cb@256bit.org>
parents: 7208
diff changeset
10380 {
9487ea110214 commit https://github.com/vim/vim/commit/a0ed84a26897c994512873a895b9fc54e90c6845
Christian Brabandt <cb@256bit.org>
parents: 7208
diff changeset
10381 char_u s[4];
9487ea110214 commit https://github.com/vim/vim/commit/a0ed84a26897c994512873a895b9fc54e90c6845
Christian Brabandt <cb@256bit.org>
parents: 7208
diff changeset
10382 sprintf((char *)s, " @%c", Recording);
9487ea110214 commit https://github.com/vim/vim/commit/a0ed84a26897c994512873a895b9fc54e90c6845
Christian Brabandt <cb@256bit.org>
parents: 7208
diff changeset
10383 MSG_PUTS_ATTR(s, attr);
9487ea110214 commit https://github.com/vim/vim/commit/a0ed84a26897c994512873a895b9fc54e90c6845
Christian Brabandt <cb@256bit.org>
parents: 7208
diff changeset
10384 }
9487ea110214 commit https://github.com/vim/vim/commit/a0ed84a26897c994512873a895b9fc54e90c6845
Christian Brabandt <cb@256bit.org>
parents: 7208
diff changeset
10385 }
9487ea110214 commit https://github.com/vim/vim/commit/a0ed84a26897c994512873a895b9fc54e90c6845
Christian Brabandt <cb@256bit.org>
parents: 7208
diff changeset
10386
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10387 #if defined(FEAT_WINDOWS)
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10388 /*
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10389 * Draw the tab pages line at the top of the Vim window.
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10390 */
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10391 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
10392 draw_tabline(void)
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10393 {
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10394 int tabcount = 0;
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10395 tabpage_T *tp;
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10396 int tabwidth;
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10397 int col = 0;
673
513866ffe6af updated for version 7.0200
vimboss
parents: 671
diff changeset
10398 int scol = 0;
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10399 int attr;
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10400 win_T *wp;
671
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
10401 win_T *cwp;
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
10402 int wincount;
83a006f81bac updated for version 7.0199
vimboss
parents: 670
diff changeset
10403 int modified;
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10404 int c;
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10405 int len;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
10406 int attr_sel = HL_ATTR(HLF_TPS);
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
10407 int attr_nosel = HL_ATTR(HLF_TP);
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
10408 int attr_fill = HL_ATTR(HLF_TPF);
673
513866ffe6af updated for version 7.0200
vimboss
parents: 671
diff changeset
10409 char_u *p;
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10410 int room;
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10411 int use_sep_chars = (t_colors < 8
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10412 #ifdef FEAT_GUI
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10413 && !gui.in_use
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10414 #endif
9027
773d627cac0b commit https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162
Christian Brabandt <cb@256bit.org>
parents: 8977
diff changeset
10415 #ifdef FEAT_TERMGUICOLORS
773d627cac0b commit https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162
Christian Brabandt <cb@256bit.org>
parents: 8977
diff changeset
10416 && !p_tgc
8969
c83e2c1e7f2b commit https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd
Christian Brabandt <cb@256bit.org>
parents: 8907
diff changeset
10417 #endif
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10418 );
673
513866ffe6af updated for version 7.0200
vimboss
parents: 671
diff changeset
10419
10538
c7f671dfd735 patch 8.0.0159: crash on startup when updating tabline
Christian Brabandt <cb@256bit.org>
parents: 10466
diff changeset
10420 if (ScreenLines == NULL)
c7f671dfd735 patch 8.0.0159: crash on startup when updating tabline
Christian Brabandt <cb@256bit.org>
parents: 10466
diff changeset
10421 return;
673
513866ffe6af updated for version 7.0200
vimboss
parents: 671
diff changeset
10422 redraw_tabline = FALSE;
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10423
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10424 #ifdef FEAT_GUI_TABLINE
798
95dac6af3b3a updated for version 7.0232
vimboss
parents: 777
diff changeset
10425 /* Take care of a GUI tabline. */
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10426 if (gui_use_tabline())
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10427 {
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10428 gui_update_tabline();
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10429 return;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10430 }
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10431 #endif
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10432
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10433 if (tabline_height() < 1)
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10434 return;
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10435
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10436 #if defined(FEAT_STL_OPT)
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
10437
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
10438 /* Init TabPageIdxs[] to zero: Clicking outside of tabs has no effect. */
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
10439 for (scol = 0; scol < Columns; ++scol)
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
10440 TabPageIdxs[scol] = 0;
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
10441
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10442 /* Use the 'tabline' option if it's set. */
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10443 if (*p_tal != NUL)
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10444 {
8872
4d4de770f970 commit https://github.com/vim/vim/commit/f73d3bc253fa79ad220f52f04b93e782e95a9d43
Christian Brabandt <cb@256bit.org>
parents: 8847
diff changeset
10445 int saved_did_emsg = did_emsg;
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10446
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10447 /* Check for an error. If there is one we would loop in redrawing the
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10448 * screen. Avoid that by making 'tabline' empty. */
8872
4d4de770f970 commit https://github.com/vim/vim/commit/f73d3bc253fa79ad220f52f04b93e782e95a9d43
Christian Brabandt <cb@256bit.org>
parents: 8847
diff changeset
10449 did_emsg = FALSE;
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10450 win_redr_custom(NULL, FALSE);
8872
4d4de770f970 commit https://github.com/vim/vim/commit/f73d3bc253fa79ad220f52f04b93e782e95a9d43
Christian Brabandt <cb@256bit.org>
parents: 8847
diff changeset
10451 if (did_emsg)
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10452 set_string_option_direct((char_u *)"tabline", -1,
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 688
diff changeset
10453 (char_u *)"", OPT_FREE, SID_ERROR);
8872
4d4de770f970 commit https://github.com/vim/vim/commit/f73d3bc253fa79ad220f52f04b93e782e95a9d43
Christian Brabandt <cb@256bit.org>
parents: 8847
diff changeset
10454 did_emsg |= saved_did_emsg;
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10455 }
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10456 else
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10457 #endif
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10458 {
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
10459 FOR_ALL_TABPAGES(tp)
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10460 ++tabcount;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10461
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10462 tabwidth = (Columns - 1 + tabcount / 2) / tabcount;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10463 if (tabwidth < 6)
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10464 tabwidth = 6;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10465
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10466 attr = attr_nosel;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10467 tabcount = 0;
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
10468 scol = 0;
699
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
10469 for (tp = first_tabpage; tp != NULL && col < Columns - 4;
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
10470 tp = tp->tp_next)
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10471 {
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10472 scol = col;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10473
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10474 if (tp->tp_topframe == topframe)
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10475 attr = attr_sel;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10476 if (use_sep_chars && col > 0)
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10477 screen_putchar('|', 0, col++, attr);
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10478
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10479 if (tp->tp_topframe != topframe)
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10480 attr = attr_nosel;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10481
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10482 screen_putchar(' ', 0, col++, attr);
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10483
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10484 if (tp == curtab)
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10485 {
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10486 cwp = curwin;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10487 wp = firstwin;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10488 }
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10489 else
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10490 {
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10491 cwp = tp->tp_curwin;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10492 wp = tp->tp_firstwin;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10493 }
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10494
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10495 modified = FALSE;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10496 for (wincount = 0; wp != NULL; wp = wp->w_next, ++wincount)
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10497 if (bufIsChanged(wp->w_buffer))
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10498 modified = TRUE;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10499 if (modified || wincount > 1)
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10500 {
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10501 if (wincount > 1)
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10502 {
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10503 vim_snprintf((char *)NameBuff, MAXPATHL, "%d", wincount);
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 834
diff changeset
10504 len = (int)STRLEN(NameBuff);
699
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
10505 if (col + len >= Columns - 3)
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
10506 break;
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10507 screen_puts_len(NameBuff, len, 0, col,
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10508 #if defined(FEAT_SYN_HL)
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
10509 hl_combine_attr(attr, HL_ATTR(HLF_T))
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10510 #else
6106
f051e50a6a5f updated for version 7.4.391
Bram Moolenaar <bram@vim.org>
parents: 6100
diff changeset
10511 attr
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10512 #endif
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10513 );
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10514 col += len;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10515 }
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10516 if (modified)
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10517 screen_puts_len((char_u *)"+", 1, 0, col++, attr);
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10518 screen_putchar(' ', 0, col++, attr);
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10519 }
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10520
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10521 room = scol - col + tabwidth - 1;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10522 if (room > 0)
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10523 {
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10524 /* Get buffer name in NameBuff[] */
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10525 get_trans_bufname(cwp->w_buffer);
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 818
diff changeset
10526 shorten_dir(NameBuff);
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10527 len = vim_strsize(NameBuff);
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10528 p = NameBuff;
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10529 #ifdef FEAT_MBYTE
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10530 if (has_mbyte)
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10531 while (len > room)
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10532 {
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10533 len -= ptr2cells(p);
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11121
diff changeset
10534 MB_PTR_ADV(p);
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10535 }
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10536 else
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10537 #endif
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10538 if (len > room)
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10539 {
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10540 p += len - room;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10541 len = room;
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 674
diff changeset
10542 }
699
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
10543 if (len > Columns - col - 1)
2af8de31a3a8 updated for version 7.0211
vimboss
parents: 694
diff changeset
10544 len = Columns - col - 1;
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10545
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 834
diff changeset
10546 screen_puts_len(p, (int)STRLEN(p), 0, col, attr);
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10547 col += len;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10548 }
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10549 screen_putchar(' ', 0, col++, attr);
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10550
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10551 /* Store the tab page number in TabPageIdxs[], so that
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10552 * jump_to_mouse() knows where each one is. */
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10553 ++tabcount;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10554 while (scol < col)
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10555 TabPageIdxs[scol++] = tabcount;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10556 }
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10557
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10558 if (use_sep_chars)
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10559 c = '_';
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10560 else
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10561 c = ' ';
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10562 screen_fill(0, 1, col, (int)Columns, c, c, attr_fill);
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
10563
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
10564 /* Put an "X" for closing the current tab if there are several. */
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
10565 if (first_tabpage->tp_next != NULL)
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
10566 {
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
10567 screen_putchar('X', 0, (int)Columns - 1, attr_nosel);
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
10568 TabPageIdxs[Columns - 1] = -999;
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
10569 }
9364d114ed8d updated for version 7.0204
vimboss
parents: 680
diff changeset
10570 }
834
5117153003bd updated for version 7.0e
vimboss
parents: 826
diff changeset
10571
5117153003bd updated for version 7.0e
vimboss
parents: 826
diff changeset
10572 /* Reset the flag here again, in case evaluating 'tabline' causes it to be
5117153003bd updated for version 7.0e
vimboss
parents: 826
diff changeset
10573 * set. */
5117153003bd updated for version 7.0e
vimboss
parents: 826
diff changeset
10574 redraw_tabline = FALSE;
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10575 }
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10576
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10577 /*
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10578 * Get buffer name for "buf" into NameBuff[].
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10579 * Takes care of special buffer names and translates special characters.
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10580 */
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10581 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
10582 get_trans_bufname(buf_T *buf)
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10583 {
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10584 if (buf_spname(buf) != NULL)
3839
8115f449a574 updated for version 7.3.677
Bram Moolenaar <bram@vim.org>
parents: 3759
diff changeset
10585 vim_strncpy(NameBuff, buf_spname(buf), MAXPATHL - 1);
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10586 else
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10587 home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE);
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10588 trans_characters(NameBuff, MAXPATHL);
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 681
diff changeset
10589 }
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10590 #endif
9090f866cd57 updated for version 7.0197
vimboss
parents: 644
diff changeset
10591
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10592 #if defined(FEAT_WINDOWS) || defined(FEAT_WILDMENU) || defined(FEAT_STL_OPT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10593 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10594 * Get the character to use in a status line. Get its attributes in "*attr".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10595 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10596 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
10597 fillchar_status(int *attr, int is_curwin)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10598 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10599 int fill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10600 if (is_curwin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10601 {
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
10602 *attr = HL_ATTR(HLF_S);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10603 fill = fill_stl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10604 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10605 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10606 {
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
10607 *attr = HL_ATTR(HLF_SNC);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10608 fill = fill_stlnc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10609 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10610 /* Use fill when there is highlighting, and highlighting of current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10611 * window differs, or the fillchars differ, or this is not the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10612 * current window */
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
10613 if (*attr != 0 && ((HL_ATTR(HLF_S) != HL_ATTR(HLF_SNC)
10349
cf988222b150 commit https://github.com/vim/vim/commit/a1f4cb93ba50ea9e40cd4b1f5592b8a6d1398660
Christian Brabandt <cb@256bit.org>
parents: 10307
diff changeset
10614 || !is_curwin || ONE_WINDOW)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10615 || (fill_stl != fill_stlnc)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10616 return fill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10617 if (is_curwin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10618 return '^';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10619 return '=';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10620 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10621 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10622
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
10623 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10624 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10625 * Get the character to use in a separator between vertically split windows.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10626 * Get its attributes in "*attr".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10627 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10628 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
10629 fillchar_vsep(int *attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10630 {
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11133
diff changeset
10631 *attr = HL_ATTR(HLF_C);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10632 if (*attr == 0 && fill_vert == ' ')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10633 return '|';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10634 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10635 return fill_vert;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10636 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10637 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10638
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10639 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10640 * Return TRUE if redrawing should currently be done.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10641 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10642 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
10643 redrawing(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10644 {
11105
7c7e496e625d patch 8.0.0440: not enough test coverage in Insert mode
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
10645 #ifdef FEAT_EVAL
7c7e496e625d patch 8.0.0440: not enough test coverage in Insert mode
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
10646 if (disable_redraw_for_testing)
7c7e496e625d patch 8.0.0440: not enough test coverage in Insert mode
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
10647 return 0;
7c7e496e625d patch 8.0.0440: not enough test coverage in Insert mode
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
10648 else
7c7e496e625d patch 8.0.0440: not enough test coverage in Insert mode
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
10649 #endif
7c7e496e625d patch 8.0.0440: not enough test coverage in Insert mode
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
10650 return (!RedrawingDisabled
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10651 && !(p_lz && char_avail() && !KeyTyped && !do_redraw));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10652 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10653
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10654 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10655 * Return TRUE if printing messages should currently be done.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10656 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10657 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
10658 messaging(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10659 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10660 return (!(p_lz && char_avail() && !KeyTyped));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10661 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10662
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10663 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10664 * Show current status info in ruler and various other places
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10665 * If always is FALSE, only show ruler if position has changed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10666 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10667 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
10668 showruler(int always)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10669 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10670 if (!always && !redrawing())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10671 return;
574
25a70b1cd2da updated for version 7.0163
vimboss
parents: 571
diff changeset
10672 #ifdef FEAT_INS_EXPAND
25a70b1cd2da updated for version 7.0163
vimboss
parents: 571
diff changeset
10673 if (pum_visible())
25a70b1cd2da updated for version 7.0163
vimboss
parents: 571
diff changeset
10674 {
639
c79d4df4686e updated for version 7.0185
vimboss
parents: 625
diff changeset
10675 # ifdef FEAT_WINDOWS
574
25a70b1cd2da updated for version 7.0163
vimboss
parents: 571
diff changeset
10676 /* Don't redraw right now, do it later. */
25a70b1cd2da updated for version 7.0163
vimboss
parents: 571
diff changeset
10677 curwin->w_redr_status = TRUE;
639
c79d4df4686e updated for version 7.0185
vimboss
parents: 625
diff changeset
10678 # endif
574
25a70b1cd2da updated for version 7.0163
vimboss
parents: 571
diff changeset
10679 return;
25a70b1cd2da updated for version 7.0163
vimboss
parents: 571
diff changeset
10680 }
25a70b1cd2da updated for version 7.0163
vimboss
parents: 571
diff changeset
10681 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10682 #if defined(FEAT_STL_OPT) && defined(FEAT_WINDOWS)
40
f1d2a58883b9 updated for version 7.0024
vimboss
parents: 39
diff changeset
10683 if ((*p_stl != NUL || *curwin->w_p_stl != NUL) && curwin->w_status_height)
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10684 {
1983
f54dab7cebab updated for version 7.2-280
vimboss
parents: 1946
diff changeset
10685 redraw_custom_statusline(curwin);
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10686 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10687 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10688 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10689 #ifdef FEAT_CMDL_INFO
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10690 win_redr_ruler(curwin, always);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10691 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10692
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10693 #ifdef FEAT_TITLE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10694 if (need_maketitle
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10695 # ifdef FEAT_STL_OPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10696 || (p_icon && (stl_syntax & STL_IN_ICON))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10697 || (p_title && (stl_syntax & STL_IN_TITLE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10698 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10699 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10700 maketitle();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10701 #endif
1588
3b48421dbde1 updated for version 7.1-301
vimboss
parents: 1555
diff changeset
10702 #ifdef FEAT_WINDOWS
3b48421dbde1 updated for version 7.1-301
vimboss
parents: 1555
diff changeset
10703 /* Redraw the tab pages line if needed. */
3b48421dbde1 updated for version 7.1-301
vimboss
parents: 1555
diff changeset
10704 if (redraw_tabline)
3b48421dbde1 updated for version 7.1-301
vimboss
parents: 1555
diff changeset
10705 draw_tabline();
3b48421dbde1 updated for version 7.1-301
vimboss
parents: 1555
diff changeset
10706 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10707 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10708
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10709 #ifdef FEAT_CMDL_INFO
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10710 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
10711 win_redr_ruler(win_T *wp, int always)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10712 {
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1850
diff changeset
10713 #define RULER_BUF_LEN 70
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1850
diff changeset
10714 char_u buffer[RULER_BUF_LEN];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10715 int row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10716 int fillchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10717 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10718 int empty_line = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10719 colnr_T virtcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10720 int i;
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1850
diff changeset
10721 size_t len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10722 int o;
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
10723 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10724 int this_ru_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10725 int off = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10726 int width = Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10727 # define WITH_OFF(x) x
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10728 # define WITH_WIDTH(x) x
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10729 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10730 # define WITH_OFF(x) 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10731 # define WITH_WIDTH(x) Columns
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10732 # define this_ru_col ru_col
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10733 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10734
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10735 /* If 'ruler' off or redrawing disabled, don't do anything */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10736 if (!p_ru)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10737 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10738
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10739 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10740 * Check if cursor.lnum is valid, since win_redr_ruler() may be called
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10741 * after deleting lines, before cursor.lnum is corrected.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10742 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10743 if (wp->w_cursor.lnum > wp->w_buffer->b_ml.ml_line_count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10744 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10745
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10746 #ifdef FEAT_INS_EXPAND
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10747 /* Don't draw the ruler while doing insert-completion, it might overwrite
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10748 * the (long) mode message. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10749 # ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10750 if (wp == lastwin && lastwin->w_status_height == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10751 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10752 if (edit_submode != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10753 return;
540
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
10754 /* Don't draw the ruler when the popup menu is visible, it may overlap. */
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
10755 if (pum_visible())
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
10756 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10757 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10758
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10759 #ifdef FEAT_STL_OPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10760 if (*p_ruf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10761 {
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10762 int save_called_emsg = called_emsg;
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10763
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10764 called_emsg = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10765 win_redr_custom(wp, TRUE);
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10766 if (called_emsg)
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10767 set_string_option_direct((char_u *)"rulerformat", -1,
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 688
diff changeset
10768 (char_u *)"", OPT_FREE, SID_ERROR);
680
5b101ff9d4c4 updated for version 7.0203
vimboss
parents: 677
diff changeset
10769 called_emsg |= save_called_emsg;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10770 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10771 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10772 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10773
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10774 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10775 * Check if not in Insert mode and the line is empty (will show "0-1").
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10776 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10777 if (!(State & INSERT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10778 && *ml_get_buf(wp->w_buffer, wp->w_cursor.lnum, FALSE) == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10779 empty_line = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10780
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10781 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10782 * Only draw the ruler when something changed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10783 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10784 validate_virtcol_win(wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10785 if ( redraw_cmdline
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10786 || always
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10787 || wp->w_cursor.lnum != wp->w_ru_cursor.lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10788 || wp->w_cursor.col != wp->w_ru_cursor.col
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10789 || wp->w_virtcol != wp->w_ru_virtcol
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10790 #ifdef FEAT_VIRTUALEDIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10791 || wp->w_cursor.coladd != wp->w_ru_cursor.coladd
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10792 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10793 || wp->w_topline != wp->w_ru_topline
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10794 || wp->w_buffer->b_ml.ml_line_count != wp->w_ru_line_count
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10795 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10796 || wp->w_topfill != wp->w_ru_topfill
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10797 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10798 || empty_line != wp->w_ru_empty)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10799 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10800 cursor_off();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10801 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10802 if (wp->w_status_height)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10803 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10804 row = W_WINROW(wp) + wp->w_height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10805 fillchar = fillchar_status(&attr, wp == curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10806 off = W_WINCOL(wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10807 width = W_WIDTH(wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10808 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10809 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10810 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10811 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10812 row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10813 fillchar = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10814 attr = 0;
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
10815 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10816 width = Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10817 off = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10818 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10819 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10820
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10821 /* In list mode virtcol needs to be recomputed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10822 virtcol = wp->w_virtcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10823 if (wp->w_p_list && lcs_tab1 == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10824 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10825 wp->w_p_list = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10826 getvvcol(wp, &wp->w_cursor, NULL, &virtcol, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10827 wp->w_p_list = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10828 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10829
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10830 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10831 * Some sprintfs return the length, some return a pointer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10832 * To avoid portability problems we use strlen() here.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10833 */
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1850
diff changeset
10834 vim_snprintf((char *)buffer, RULER_BUF_LEN, "%ld,",
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10835 (wp->w_buffer->b_ml.ml_flags & ML_EMPTY)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10836 ? 0L
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10837 : (long)(wp->w_cursor.lnum));
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1850
diff changeset
10838 len = STRLEN(buffer);
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1850
diff changeset
10839 col_print(buffer + len, RULER_BUF_LEN - len,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10840 empty_line ? 0 : (int)wp->w_cursor.col + 1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10841 (int)virtcol + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10842
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10843 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10844 * Add a "50%" if there is room for it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10845 * On the last line, don't print in the last column (scrolls the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10846 * screen up on some terminals).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10847 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10848 i = (int)STRLEN(buffer);
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1850
diff changeset
10849 get_rel_pos(wp, buffer + i + 1, RULER_BUF_LEN - i - 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10850 o = i + vim_strsize(buffer + i + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10851 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10852 if (wp->w_status_height == 0) /* can't use last char of screen */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10853 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10854 ++o;
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
10855 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10856 this_ru_col = ru_col - (Columns - width);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10857 if (this_ru_col < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10858 this_ru_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10859 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10860 /* Never use more than half the window/screen width, leave the other
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10861 * half for the filename. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10862 if (this_ru_col < (WITH_WIDTH(width) + 1) / 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10863 this_ru_col = (WITH_WIDTH(width) + 1) / 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10864 if (this_ru_col + o < WITH_WIDTH(width))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10865 {
6466
b5df99582638 updated for version 7.4.562
Bram Moolenaar <bram@vim.org>
parents: 6430
diff changeset
10866 /* need at least 3 chars left for get_rel_pos() + NUL */
b5df99582638 updated for version 7.4.562
Bram Moolenaar <bram@vim.org>
parents: 6430
diff changeset
10867 while (this_ru_col + o < WITH_WIDTH(width) && RULER_BUF_LEN > i + 4)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10868 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10869 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10870 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10871 i += (*mb_char2bytes)(fillchar, buffer + i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10872 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10873 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10874 buffer[i++] = fillchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10875 ++o;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10876 }
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1850
diff changeset
10877 get_rel_pos(wp, buffer + i, RULER_BUF_LEN - i);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10878 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10879 /* Truncate at window boundary. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10880 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10881 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10882 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10883 o = 0;
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
10884 for (i = 0; buffer[i] != NUL; i += (*mb_ptr2len)(buffer + i))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10885 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10886 o += (*mb_ptr2cells)(buffer + i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10887 if (this_ru_col + o > WITH_WIDTH(width))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10888 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10889 buffer[i] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10890 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10891 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10892 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10893 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10894 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10895 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10896 if (this_ru_col + (int)STRLEN(buffer) > WITH_WIDTH(width))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10897 buffer[WITH_WIDTH(width) - this_ru_col] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10898
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10899 screen_puts(buffer, row, this_ru_col + WITH_OFF(off), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10900 i = redraw_cmdline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10901 screen_fill(row, row + 1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10902 this_ru_col + WITH_OFF(off) + (int)STRLEN(buffer),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10903 (int)(WITH_OFF(off) + WITH_WIDTH(width)),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10904 fillchar, fillchar, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10905 /* don't redraw the cmdline because of showing the ruler */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10906 redraw_cmdline = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10907 wp->w_ru_cursor = wp->w_cursor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10908 wp->w_ru_virtcol = wp->w_virtcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10909 wp->w_ru_empty = empty_line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10910 wp->w_ru_topline = wp->w_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10911 wp->w_ru_line_count = wp->w_buffer->b_ml.ml_line_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10912 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10913 wp->w_ru_topfill = wp->w_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10914 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10915 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10916 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10917 #endif
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10918
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10919 #if defined(FEAT_LINEBREAK) || defined(PROTO)
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10920 /*
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
10921 * Return the width of the 'number' and 'relativenumber' column.
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
10922 * Caller may need to check if 'number' or 'relativenumber' is set.
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10923 * Otherwise it depends on 'numberwidth' and the line count.
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10924 */
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10925 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
10926 number_width(win_T *wp)
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10927 {
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10928 int n;
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10929 linenr_T lnum;
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10930
4736
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
10931 if (wp->w_p_rnu && !wp->w_p_nu)
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
10932 /* cursor line shows "0" */
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
10933 lnum = wp->w_height;
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
10934 else
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
10935 /* cursor line shows absolute line number */
3f2319a953b3 updated for version 7.3.1115
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
10936 lnum = wp->w_buffer->b_ml.ml_line_count;
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2124
diff changeset
10937
6679
27d9a4d8c168 updated for version 7.4.664
Bram Moolenaar <bram@vim.org>
parents: 6627
diff changeset
10938 if (lnum == wp->w_nrwidth_line_count && wp->w_nuw_cached == wp->w_p_nuw)
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10939 return wp->w_nrwidth_width;
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10940 wp->w_nrwidth_line_count = lnum;
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10941
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10942 n = 0;
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10943 do
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10944 {
856
8cd729851562 updated for version 7.0g
vimboss
parents: 849
diff changeset
10945 lnum /= 10;
8cd729851562 updated for version 7.0g
vimboss
parents: 849
diff changeset
10946 ++n;
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10947 } while (lnum > 0);
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10948
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10949 /* 'numberwidth' gives the minimal width plus one */
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10950 if (n < wp->w_p_nuw - 1)
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10951 n = wp->w_p_nuw - 1;
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10952
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10953 wp->w_nrwidth_width = n;
6679
27d9a4d8c168 updated for version 7.4.664
Bram Moolenaar <bram@vim.org>
parents: 6627
diff changeset
10954 wp->w_nuw_cached = wp->w_p_nuw;
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10955 return n;
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10956 }
24d5189d3956 updated for version 7.0005
vimboss
parents: 12
diff changeset
10957 #endif
3986
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10958
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10959 /*
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10960 * Return the current cursor column. This is the actual position on the
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10961 * screen. First column is 0.
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10962 */
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10963 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
10964 screen_screencol(void)
3986
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10965 {
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10966 return screen_cur_col;
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10967 }
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10968
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10969 /*
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10970 * Return the current cursor row. This is the actual position on the screen.
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10971 * First row is 0.
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10972 */
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10973 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
10974 screen_screenrow(void)
3986
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10975 {
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10976 return screen_cur_row;
56bb88c68f98 updated for version 7.3.748
Bram Moolenaar <bram@vim.org>
parents: 3984
diff changeset
10977 }