4 From: Bram Moolenaar <Bram@moolenaar.net>
6 Content-Type: text/plain; charset=ISO-8859-1
7 Content-Transfer-Encoding: 8bit
11 Problem: Perl: setting a buffer line in another buffer may result in
12 changing the current buffer.
13 Solution: Properly change to the buffer to be changed.
17 *** ../vim-7.0.043/src/if_perl.xs Tue Mar 7 00:18:16 2006
18 --- src/if_perl.xs Thu Jun 22 21:22:18 2006
26 if (buf_valid(vimbuf))
31 line = SvPV(ST(i),PL_na);
32 if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
36 if (u_savesub(lnum) == OK)
38 ml_replace(lnum, (char_u *)line, TRUE);
39 changed_bytes(lnum, 0);
46 line = SvPV(ST(i),PL_na);
47 if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
52 ! /* set curwin/curbuf for "vimbuf" and save some things */
53 ! aucmd_prepbuf(&aco, vimbuf);
55 ! buf_T *save_curbuf = curbuf;
58 + curwin->w_buffer = vimbuf;
60 if (u_savesub(lnum) == OK)
62 ml_replace(lnum, (char_u *)line, TRUE);
63 changed_bytes(lnum, 0);
67 ! /* restore curwin/curbuf and a few other things */
68 ! aucmd_restbuf(&aco);
69 ! /* Careful: autocommands may have made "vimbuf" invalid! */
71 ! curwin->w_buffer = save_curbuf;
72 ! curbuf = save_curbuf;
81 long i, lnum = 0, count = 0;
84 if (buf_valid(vimbuf))
90 if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
94 if (u_savedel(lnum, 1) == OK)
97 deleted_lines_mark(lnum, 1L);
98 ! if (savebuf == curbuf)
102 update_curbuf(VALID);
107 if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
109 ! buf_T *save_curbuf = curbuf;
110 ! #ifdef FEAT_AUTOCMD
113 ! /* set curwin/curbuf for "vimbuf" and save some things */
114 ! aucmd_prepbuf(&aco, vimbuf);
117 + curwin->w_buffer = vimbuf;
119 if (u_savedel(lnum, 1) == OK)
122 deleted_lines_mark(lnum, 1L);
123 ! if (save_curbuf == curbuf)
126 ! #ifdef FEAT_AUTOCMD
127 ! /* restore curwin/curbuf and a few other things */
128 ! aucmd_restbuf(&aco);
129 ! /* Careful: autocommands may have made "vimbuf" invalid! */
131 ! curwin->w_buffer = save_curbuf;
132 ! curbuf = save_curbuf;
134 update_curbuf(VALID);
144 if (buf_valid(vimbuf))
149 line = SvPV(ST(i),PL_na);
150 if (lnum >= 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
154 if (u_inssub(lnum + 1) == OK)
156 ml_append(lnum, (char_u *)line, (colnr_T)0, FALSE);
157 appended_lines_mark(lnum, 1L);
160 update_curbuf(VALID);
164 line = SvPV(ST(i),PL_na);
165 if (lnum >= 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
167 ! #ifdef FEAT_AUTOCMD
170 ! /* set curwin/curbuf for "vimbuf" and save some things */
171 ! aucmd_prepbuf(&aco, vimbuf);
173 ! buf_T *save_curbuf = curbuf;
176 + curwin->w_buffer = vimbuf;
178 if (u_inssub(lnum + 1) == OK)
180 ml_append(lnum, (char_u *)line, (colnr_T)0, FALSE);
181 appended_lines_mark(lnum, 1L);
184 ! #ifdef FEAT_AUTOCMD
185 ! /* restore curwin/curbuf and a few other things */
186 ! aucmd_restbuf(&aco);
187 ! /* Careful: autocommands may have made "vimbuf" invalid! */
189 ! curwin->w_buffer = save_curbuf;
190 ! curbuf = save_curbuf;
192 update_curbuf(VALID);
195 *** ../vim-7.0.043/src/version.c Tue Aug 8 16:30:51 2006
196 --- src/version.c Tue Aug 8 16:45:40 2006
200 { /* Add new patch number below this line */
206 Momento mori, ergo carpe diem
208 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
209 /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
210 \\\ download, build and distribute -- http://www.A-A-P.org ///
211 \\\ help me help AIDS victims -- http://ICCF-Holland.org ///