]> git.pld-linux.org Git - packages/vim.git/blame - 7.2.141
- new
[packages/vim.git] / 7.2.141
CommitLineData
478508cd
ER
1To: vim-dev@vim.org
2Subject: Patch 7.2.141
3Fcc: outbox
4From: Bram Moolenaar <Bram@moolenaar.net>
5Mime-Version: 1.0
6Content-Type: text/plain; charset=ISO-8859-1
7Content-Transfer-Encoding: 8bit
8------------
9
10Patch 7.2.141
11Problem: When redrawing a character for bold spill this causes the next
12 character to be redrawn as well.
13Solution: Only redraw one extra character. (Yukihiro Nakadaira)
14Files: src/screen.c
15
16
17*** ../vim-7.2.140/src/screen.c Wed Mar 11 17:44:38 2009
18--- src/screen.c Wed Mar 11 13:59:24 2009
19***************
20*** 5132,5139 ****
21 #endif
22
23 #if defined(FEAT_GUI) || defined(UNIX)
24! /* The bold trick makes a single row of pixels appear in the next
25! * character. When a bold character is removed, the next
26 * character should be redrawn too. This happens for our own GUI
27 * and for some xterms. */
28 if (
29--- 5132,5139 ----
30 #endif
31
32 #if defined(FEAT_GUI) || defined(UNIX)
33! /* The bold trick makes a single column of pixels appear in the
34! * next character. When a bold character is removed, the next
35 * character should be redrawn too. This happens for our own GUI
36 * and for some xterms. */
37 if (
38***************
39*** 6276,6284 ****
40--- 6276,6290 ----
41 int pcc[MAX_MCO];
42 # endif
43 #endif
44+ #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
45+ int force_redraw_this;
46+ int force_redraw_next = FALSE;
47+ #endif
48+ int need_redraw;
49
50 if (ScreenLines == NULL || row >= screen_Rows) /* safety check */
51 return;
52+ off = LineOffset[row] + col;
53
54 #ifdef FEAT_MBYTE
55 /* When drawing over the right halve of a double-wide char clear out the
56***************
57*** 6288,6297 ****
58 && !gui.in_use
59 # endif
60 && mb_fix_col(col, row) != col)
61! screen_puts_len((char_u *)" ", 1, row, col - 1, 0);
62 #endif
63
64- off = LineOffset[row] + col;
65 #ifdef FEAT_MBYTE
66 max_off = LineOffset[row] + screen_Columns;
67 #endif
68--- 6294,6314 ----
69 && !gui.in_use
70 # endif
71 && mb_fix_col(col, row) != col)
72! {
73! ScreenLines[off - 1] = ' ';
74! ScreenAttrs[off - 1] = 0;
75! if (enc_utf8)
76! {
77! ScreenLinesUC[off - 1] = 0;
78! ScreenLinesC[0][off - 1] = 0;
79! }
80! /* redraw the previous cell, make it empty */
81! screen_char(off - 1, row, col - 1);
82! /* force the cell at "col" to be redrawn */
83! force_redraw_next = TRUE;
84! }
85 #endif
86
87 #ifdef FEAT_MBYTE
88 max_off = LineOffset[row] + screen_Columns;
89 #endif
90***************
91*** 6355,6361 ****
92 }
93 #endif
94
95! if (ScreenLines[off] != c
96 #ifdef FEAT_MBYTE
97 || (mbyte_cells == 2
98 && ScreenLines[off + 1] != (enc_dbcs ? ptr[1] : 0))
99--- 6372,6383 ----
100 }
101 #endif
102
103! #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
104! force_redraw_this = force_redraw_next;
105! force_redraw_next = FALSE;
106! #endif
107!
108! need_redraw = ScreenLines[off] != c
109 #ifdef FEAT_MBYTE
110 || (mbyte_cells == 2
111 && ScreenLines[off + 1] != (enc_dbcs ? ptr[1] : 0))
112***************
113*** 6367,6386 ****
114 || screen_comp_differs(off, u8cc)))
115 #endif
116 || ScreenAttrs[off] != attr
117! || exmode_active
118 )
119 {
120 #if defined(FEAT_GUI) || defined(UNIX)
121 /* The bold trick makes a single row of pixels appear in the next
122 * character. When a bold character is removed, the next
123 * character should be redrawn too. This happens for our own GUI
124! * and for some xterms.
125! * Force the redraw by setting the attribute to a different value
126! * than "attr", the contents of ScreenLines[] may be needed by
127! * mb_off2cells() further on.
128! * Don't do this for the last drawn character, because the next
129! * character may not be redrawn. */
130! if (
131 # ifdef FEAT_GUI
132 gui.in_use
133 # endif
134--- 6389,6408 ----
135 || screen_comp_differs(off, u8cc)))
136 #endif
137 || ScreenAttrs[off] != attr
138! || exmode_active;
139!
140! if (need_redraw
141! #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
142! || force_redraw_this
143! #endif
144 )
145 {
146 #if defined(FEAT_GUI) || defined(UNIX)
147 /* The bold trick makes a single row of pixels appear in the next
148 * character. When a bold character is removed, the next
149 * character should be redrawn too. This happens for our own GUI
150! * and for some xterms. */
151! if (need_redraw && ScreenLines[off] != ' ' && (
152 # ifdef FEAT_GUI
153 gui.in_use
154 # endif
155***************
156*** 6390,6412 ****
157 # ifdef UNIX
158 term_is_xterm
159 # endif
160! )
161 {
162! int n;
163
164! n = ScreenAttrs[off];
165! # ifdef FEAT_MBYTE
166! if (col + mbyte_cells < screen_Columns
167! && (n > HL_ALL || (n & HL_BOLD))
168! && (len < 0 ? ptr[mbyte_blen] != NUL
169! : ptr + mbyte_blen < text + len))
170! ScreenAttrs[off + mbyte_cells] = attr + 1;
171! # else
172! if (col + 1 < screen_Columns
173! && (n > HL_ALL || (n & HL_BOLD))
174! && (len < 0 ? ptr[1] != NUL : ptr + 1 < text + len))
175! ScreenLines[off + 1] = 0;
176! # endif
177 }
178 #endif
179 #ifdef FEAT_MBYTE
180--- 6412,6425 ----
181 # ifdef UNIX
182 term_is_xterm
183 # endif
184! ))
185 {
186! int n = ScreenAttrs[off];
187
188! if (n > HL_ALL)
189! n = syn_attr2attr(n);
190! if (n & HL_BOLD)
191! force_redraw_next = TRUE;
192 }
193 #endif
194 #ifdef FEAT_MBYTE
195***************
196*** 6493,6498 ****
197--- 6506,6525 ----
198 ++ptr;
199 }
200 }
201+
202+ #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
203+ /* If we detected the next character needs to be redrawn, but the text
204+ * doesn't extend up to there, update the character here. */
205+ if (force_redraw_next && col < screen_Columns)
206+ {
207+ # ifdef FEAT_MBYTE
208+ if (enc_dbcs != 0 && dbcs_off2cells(off, max_off) > 1)
209+ screen_char_2(off, row, col);
210+ else
211+ # endif
212+ screen_char(off, row, col);
213+ }
214+ #endif
215 }
216
217 #ifdef FEAT_SEARCH_EXTRA
218*** ../vim-7.2.140/src/version.c Wed Mar 11 17:44:38 2009
219--- src/version.c Wed Mar 11 17:55:22 2009
220***************
221*** 678,679 ****
222--- 678,681 ----
223 { /* Add new patch number below this line */
224+ /**/
225+ 141,
226 /**/
227
228--
229Some of the well know MS-Windows errors:
230 ETIME Wrong time, wait a little while
231 ECRASH Try again...
232 EDETECT Unable to detect errors
233 EOVER You lost! Play another game?
234 ENOCLUE Eh, what did you want?
235
236 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
237/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
238\\\ download, build and distribute -- http://www.A-A-P.org ///
239 \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
This page took 0.049357 seconds and 4 git commands to generate.