home *** CD-ROM | disk | FTP | other *** search
- To: vim-dev@vim.org
- Subject: Patch 7.0.044
- Fcc: outbox
- From: Bram Moolenaar <Bram@moolenaar.net>
- Mime-Version: 1.0
- Content-Type: text/plain; charset=ISO-8859-1
- Content-Transfer-Encoding: 8bit
- ------------
-
- Patch 7.0.044
- Problem: Perl: setting a buffer line in another buffer may result in
- changing the current buffer.
- Solution: Properly change to the buffer to be changed.
- Files: src/if_perl.xs
-
-
- *** ../vim-7.0.043/src/if_perl.xs Tue Mar 7 00:18:16 2006
- --- src/if_perl.xs Thu Jun 22 21:22:18 2006
- ***************
- *** 1056,1062 ****
- int i;
- long lnum;
- char *line;
- - buf_T *savebuf;
- PPCODE:
- if (buf_valid(vimbuf))
- {
- --- 1056,1061 ----
- ***************
- *** 1069,1082 ****
- line = SvPV(ST(i),PL_na);
- if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
- {
- ! savebuf = curbuf;
- curbuf = vimbuf;
- if (u_savesub(lnum) == OK)
- {
- ml_replace(lnum, (char_u *)line, TRUE);
- changed_bytes(lnum, 0);
- }
- ! curbuf = savebuf;
- }
- }
- }
- --- 1068,1098 ----
- line = SvPV(ST(i),PL_na);
- if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
- {
- ! #ifdef FEAT_AUTOCMD
- ! aco_save_T aco;
- !
- ! /* set curwin/curbuf for "vimbuf" and save some things */
- ! aucmd_prepbuf(&aco, vimbuf);
- ! #else
- ! buf_T *save_curbuf = curbuf;
- !
- curbuf = vimbuf;
- + curwin->w_buffer = vimbuf;
- + #endif
- if (u_savesub(lnum) == OK)
- {
- ml_replace(lnum, (char_u *)line, TRUE);
- changed_bytes(lnum, 0);
- }
- !
- ! #ifdef FEAT_AUTOCMD
- ! /* restore curwin/curbuf and a few other things */
- ! aucmd_restbuf(&aco);
- ! /* Careful: autocommands may have made "vimbuf" invalid! */
- ! #else
- ! curwin->w_buffer = save_curbuf;
- ! curbuf = save_curbuf;
- ! #endif
- }
- }
- }
- ***************
- *** 1087,1093 ****
-
- PREINIT:
- long i, lnum = 0, count = 0;
- - buf_T *savebuf;
- PPCODE:
- if (buf_valid(vimbuf))
- {
- --- 1103,1108 ----
- ***************
- *** 1114,1129 ****
- {
- if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
- {
- ! savebuf = curbuf;
- curbuf = vimbuf;
- if (u_savedel(lnum, 1) == OK)
- {
- ml_delete(lnum, 0);
- deleted_lines_mark(lnum, 1L);
- ! if (savebuf == curbuf)
- check_cursor();
- }
- ! curbuf = savebuf;
- update_curbuf(VALID);
- }
- }
- --- 1129,1159 ----
- {
- if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
- {
- ! buf_T *save_curbuf = curbuf;
- ! #ifdef FEAT_AUTOCMD
- ! aco_save_T aco;
- !
- ! /* set curwin/curbuf for "vimbuf" and save some things */
- ! aucmd_prepbuf(&aco, vimbuf);
- ! #else
- curbuf = vimbuf;
- + curwin->w_buffer = vimbuf;
- + #endif
- if (u_savedel(lnum, 1) == OK)
- {
- ml_delete(lnum, 0);
- deleted_lines_mark(lnum, 1L);
- ! if (save_curbuf == curbuf)
- check_cursor();
- }
- ! #ifdef FEAT_AUTOCMD
- ! /* restore curwin/curbuf and a few other things */
- ! aucmd_restbuf(&aco);
- ! /* Careful: autocommands may have made "vimbuf" invalid! */
- ! #else
- ! curwin->w_buffer = save_curbuf;
- ! curbuf = save_curbuf;
- ! #endif
- update_curbuf(VALID);
- }
- }
- ***************
- *** 1138,1144 ****
- int i;
- long lnum;
- char *line;
- - buf_T *savebuf;
- PPCODE:
- if (buf_valid(vimbuf))
- {
- --- 1168,1173 ----
- ***************
- *** 1151,1164 ****
- line = SvPV(ST(i),PL_na);
- if (lnum >= 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
- {
- ! savebuf = curbuf;
- curbuf = vimbuf;
- if (u_inssub(lnum + 1) == OK)
- {
- ml_append(lnum, (char_u *)line, (colnr_T)0, FALSE);
- appended_lines_mark(lnum, 1L);
- }
- ! curbuf = savebuf;
- update_curbuf(VALID);
- }
- }
- --- 1180,1210 ----
- line = SvPV(ST(i),PL_na);
- if (lnum >= 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
- {
- ! #ifdef FEAT_AUTOCMD
- ! aco_save_T aco;
- !
- ! /* set curwin/curbuf for "vimbuf" and save some things */
- ! aucmd_prepbuf(&aco, vimbuf);
- ! #else
- ! buf_T *save_curbuf = curbuf;
- !
- curbuf = vimbuf;
- + curwin->w_buffer = vimbuf;
- + #endif
- if (u_inssub(lnum + 1) == OK)
- {
- ml_append(lnum, (char_u *)line, (colnr_T)0, FALSE);
- appended_lines_mark(lnum, 1L);
- }
- !
- ! #ifdef FEAT_AUTOCMD
- ! /* restore curwin/curbuf and a few other things */
- ! aucmd_restbuf(&aco);
- ! /* Careful: autocommands may have made "vimbuf" invalid! */
- ! #else
- ! curwin->w_buffer = save_curbuf;
- ! curbuf = save_curbuf;
- ! #endif
- update_curbuf(VALID);
- }
- }
- *** ../vim-7.0.043/src/version.c Tue Aug 8 16:30:51 2006
- --- src/version.c Tue Aug 8 16:45:40 2006
- ***************
- *** 668,669 ****
- --- 668,671 ----
- { /* Add new patch number below this line */
- + /**/
- + 44,
- /**/
-
- --
- Momento mori, ergo carpe diem
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
- /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
- \\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
-