| 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 |
| |
| |
| |
| |
| |
| *** 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); |
| } |
| } |
| |
| |
| |
| *** 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 /// |