]> git.pld-linux.org Git - packages/vim.git/blame - 7.1.234
- updated to 0.7.5
[packages/vim.git] / 7.1.234
CommitLineData
d57b4abe
ER
1To: vim-dev@vim.org
2Subject: Patch 7.1.234
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.1.234
11Problem: When diff'ing three files the third one isn't displayed correctly.
12 (Gary Johnson)
13Solution: Compute the size of diff blocks correctly when merging blocks.
14 Compute filler lines correctly when scrolling.
15Files: src/diff.c
16
17
18*** ../vim-7.1.233/src/diff.c Fri Oct 19 18:57:33 2007
19--- src/diff.c Fri Jan 18 17:32:31 2008
20***************
21*** 1299,1305 ****
22 }
23 else
24 /* second overlap of new block with existing block */
25! dp->df_count[idx_new] += count_new - count_orig;
26
27 /* Adjust the size of the block to include all the lines to the
28 * end of the existing block or the new diff, whatever ends last. */
29--- 1299,1307 ----
30 }
31 else
32 /* second overlap of new block with existing block */
33! dp->df_count[idx_new] += count_new - count_orig
34! + dpl->df_lnum[idx_orig] + dpl->df_count[idx_orig]
35! - (dp->df_lnum[idx_orig] + dp->df_count[idx_orig]);
36
37 /* Adjust the size of the block to include all the lines to the
38 * end of the existing block or the new diff, whatever ends last. */
39***************
40*** 1628,1641 ****
41 win_T *fromwin;
42 win_T *towin;
43 {
44! buf_T *buf = fromwin->w_buffer;
45 linenr_T lnum = fromwin->w_topline;
46! int idx;
47 diff_T *dp;
48 int i;
49
50! idx = diff_buf_idx(buf);
51! if (idx == DB_COUNT)
52 return; /* safety check */
53
54 if (curtab->tp_diff_invalid)
55--- 1630,1645 ----
56 win_T *fromwin;
57 win_T *towin;
58 {
59! buf_T *frombuf = fromwin->w_buffer;
60 linenr_T lnum = fromwin->w_topline;
61! int fromidx;
62! int toidx;
63 diff_T *dp;
64+ int max_count;
65 int i;
66
67! fromidx = diff_buf_idx(frombuf);
68! if (fromidx == DB_COUNT)
69 return; /* safety check */
70
71 if (curtab->tp_diff_invalid)
72***************
73*** 1645,1686 ****
74
75 /* search for a change that includes "lnum" in the list of diffblocks. */
76 for (dp = curtab->tp_first_diff; dp != NULL; dp = dp->df_next)
77! if (lnum <= dp->df_lnum[idx] + dp->df_count[idx])
78 break;
79 if (dp == NULL)
80 {
81 /* After last change, compute topline relative to end of file; no
82 * filler lines. */
83 towin->w_topline = towin->w_buffer->b_ml.ml_line_count
84! - (buf->b_ml.ml_line_count - lnum);
85 }
86 else
87 {
88 /* Find index for "towin". */
89! i = diff_buf_idx(towin->w_buffer);
90! if (i == DB_COUNT)
91 return; /* safety check */
92
93! towin->w_topline = lnum + (dp->df_lnum[i] - dp->df_lnum[idx]);
94! if (lnum >= dp->df_lnum[idx])
95 {
96! /* Inside a change: compute filler lines. */
97! if (dp->df_count[i] == dp->df_count[idx])
98 towin->w_topfill = fromwin->w_topfill;
99! else if (dp->df_count[i] > dp->df_count[idx])
100 {
101! if (lnum == dp->df_lnum[idx] + dp->df_count[idx])
102! towin->w_topline = dp->df_lnum[i] + dp->df_count[i]
103! - fromwin->w_topfill;
104 }
105! else
106 {
107! if (towin->w_topline >= dp->df_lnum[i] + dp->df_count[i])
108 {
109! if (diff_flags & DIFF_FILLER)
110! towin->w_topfill = dp->df_lnum[idx]
111! + dp->df_count[idx] - lnum;
112! towin->w_topline = dp->df_lnum[i] + dp->df_count[i];
113 }
114 }
115 }
116--- 1649,1720 ----
117
118 /* search for a change that includes "lnum" in the list of diffblocks. */
119 for (dp = curtab->tp_first_diff; dp != NULL; dp = dp->df_next)
120! if (lnum <= dp->df_lnum[fromidx] + dp->df_count[fromidx])
121 break;
122 if (dp == NULL)
123 {
124 /* After last change, compute topline relative to end of file; no
125 * filler lines. */
126 towin->w_topline = towin->w_buffer->b_ml.ml_line_count
127! - (frombuf->b_ml.ml_line_count - lnum);
128 }
129 else
130 {
131 /* Find index for "towin". */
132! toidx = diff_buf_idx(towin->w_buffer);
133! if (toidx == DB_COUNT)
134 return; /* safety check */
135
136! towin->w_topline = lnum + (dp->df_lnum[toidx] - dp->df_lnum[fromidx]);
137! if (lnum >= dp->df_lnum[fromidx])
138 {
139! /* Inside a change: compute filler lines. With three or more
140! * buffers we need to know the largest count. */
141! max_count = 0;
142! for (i = 0; i < DB_COUNT; ++i)
143! if (curtab->tp_diffbuf[i] != NULL
144! && max_count < dp->df_count[i])
145! max_count = dp->df_count[i];
146!
147! if (dp->df_count[toidx] == dp->df_count[fromidx])
148! {
149! /* same number of lines: use same filler count */
150 towin->w_topfill = fromwin->w_topfill;
151! }
152! else if (dp->df_count[toidx] > dp->df_count[fromidx])
153 {
154! if (lnum == dp->df_lnum[fromidx] + dp->df_count[fromidx])
155! {
156! /* more lines in towin and fromwin doesn't show diff
157! * lines, only filler lines */
158! if (max_count - fromwin->w_topfill >= dp->df_count[toidx])
159! {
160! /* towin also only shows filler lines */
161! towin->w_topline = dp->df_lnum[toidx]
162! + dp->df_count[toidx];
163! towin->w_topfill = fromwin->w_topfill;
164! }
165! else
166! /* towin still has some diff lines to show */
167! towin->w_topline = dp->df_lnum[toidx]
168! + max_count - fromwin->w_topfill;
169! }
170 }
171! else if (towin->w_topline >= dp->df_lnum[toidx]
172! + dp->df_count[toidx])
173 {
174! /* less lines in towin and no diff lines to show: compute
175! * filler lines */
176! towin->w_topline = dp->df_lnum[toidx] + dp->df_count[toidx];
177! if (diff_flags & DIFF_FILLER)
178 {
179! if (lnum == dp->df_lnum[fromidx] + dp->df_count[fromidx])
180! /* fromwin is also out of diff lines */
181! towin->w_topfill = fromwin->w_topfill;
182! else
183! /* fromwin has some diff lines */
184! towin->w_topfill = dp->df_lnum[fromidx]
185! + max_count - lnum;
186 }
187 }
188 }
189*** ../vim-7.1.233/src/version.c Fri Jan 18 13:15:32 2008
190--- src/version.c Fri Jan 18 17:37:32 2008
191***************
192*** 668,669 ****
193--- 668,671 ----
194 { /* Add new patch number below this line */
195+ /**/
196+ 234,
197 /**/
198
199--
200ERIC IDLE PLAYED: THE DEAD COLLECTOR, MR BINT (A VILLAGE NE'ER-DO -WELL VERY
201 KEEN ON BURNING WITCHES), SIR ROBIN, THE GUARD WHO DOESN'T
202 HICOUGH BUT TRIES TO GET THINGS STRAIGHT, CONCORDE (SIR
203 LAUNCELOT'S TRUSTY STEED), ROGER THE SHRUBBER (A SHRUBBER),
204 BROTHER MAYNARD
205 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
206
207 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
208/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
209\\\ download, build and distribute -- http://www.A-A-P.org ///
210 \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
This page took 0.072813 seconds and 4 git commands to generate.