home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / patches / 7.0 / 7.0.044 < prev    next >
Encoding:
Internet Message Format  |  2006-08-07  |  5.2 KB

  1. To: vim-dev@vim.org
  2. Subject: Patch 7.0.044
  3. Fcc: outbox
  4. From: Bram Moolenaar <Bram@moolenaar.net>
  5. Mime-Version: 1.0
  6. Content-Type: text/plain; charset=ISO-8859-1
  7. Content-Transfer-Encoding: 8bit
  8. ------------
  9.  
  10. Patch 7.0.044
  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.
  14. Files:        src/if_perl.xs
  15.  
  16.  
  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
  19. ***************
  20. *** 1056,1062 ****
  21.       int i;
  22.       long lnum;
  23.       char *line;
  24. -     buf_T *savebuf;
  25.       PPCODE:
  26.       if (buf_valid(vimbuf))
  27.       {
  28. --- 1056,1061 ----
  29. ***************
  30. *** 1069,1082 ****
  31.           line = SvPV(ST(i),PL_na);
  32.           if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
  33.           {
  34. !         savebuf = curbuf;
  35.           curbuf = vimbuf;
  36.           if (u_savesub(lnum) == OK)
  37.           {
  38.               ml_replace(lnum, (char_u *)line, TRUE);
  39.               changed_bytes(lnum, 0);
  40.           }
  41. !         curbuf = savebuf;
  42.           }
  43.       }
  44.       }
  45. --- 1068,1098 ----
  46.           line = SvPV(ST(i),PL_na);
  47.           if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
  48.           {
  49. !     #ifdef FEAT_AUTOCMD
  50. !         aco_save_T    aco;
  51. !         /* set curwin/curbuf for "vimbuf" and save some things */
  52. !         aucmd_prepbuf(&aco, vimbuf);
  53. !     #else
  54. !         buf_T    *save_curbuf = curbuf;
  55.           curbuf = vimbuf;
  56. +         curwin->w_buffer = vimbuf;
  57. +     #endif
  58.           if (u_savesub(lnum) == OK)
  59.           {
  60.               ml_replace(lnum, (char_u *)line, TRUE);
  61.               changed_bytes(lnum, 0);
  62.           }
  63. !     #ifdef FEAT_AUTOCMD
  64. !         /* restore curwin/curbuf and a few other things */
  65. !         aucmd_restbuf(&aco);
  66. !         /* Careful: autocommands may have made "vimbuf" invalid! */
  67. !     #else
  68. !         curwin->w_buffer = save_curbuf;
  69. !         curbuf = save_curbuf;
  70. !     #endif
  71.           }
  72.       }
  73.       }
  74. ***************
  75. *** 1087,1093 ****
  76.   
  77.       PREINIT:
  78.       long i, lnum = 0, count = 0;
  79. -     buf_T *savebuf;
  80.       PPCODE:
  81.       if (buf_valid(vimbuf))
  82.       {
  83. --- 1103,1108 ----
  84. ***************
  85. *** 1114,1129 ****
  86.           {
  87.           if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
  88.           {
  89. !             savebuf = curbuf;
  90.               curbuf = vimbuf;
  91.               if (u_savedel(lnum, 1) == OK)
  92.               {
  93.               ml_delete(lnum, 0);
  94.               deleted_lines_mark(lnum, 1L);
  95. !             if (savebuf == curbuf)
  96.                   check_cursor();
  97.               }
  98. !             curbuf = savebuf;
  99.               update_curbuf(VALID);
  100.           }
  101.           }
  102. --- 1129,1159 ----
  103.           {
  104.           if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
  105.           {
  106. !             buf_T    *save_curbuf = curbuf;
  107. !     #ifdef FEAT_AUTOCMD
  108. !             aco_save_T    aco;
  109. !             /* set curwin/curbuf for "vimbuf" and save some things */
  110. !             aucmd_prepbuf(&aco, vimbuf);
  111. !     #else
  112.               curbuf = vimbuf;
  113. +             curwin->w_buffer = vimbuf;
  114. +     #endif
  115.               if (u_savedel(lnum, 1) == OK)
  116.               {
  117.               ml_delete(lnum, 0);
  118.               deleted_lines_mark(lnum, 1L);
  119. !             if (save_curbuf == curbuf)
  120.                   check_cursor();
  121.               }
  122. !     #ifdef FEAT_AUTOCMD
  123. !             /* restore curwin/curbuf and a few other things */
  124. !             aucmd_restbuf(&aco);
  125. !             /* Careful: autocommands may have made "vimbuf" invalid! */
  126. !     #else
  127. !             curwin->w_buffer = save_curbuf;
  128. !             curbuf = save_curbuf;
  129. !     #endif
  130.               update_curbuf(VALID);
  131.           }
  132.           }
  133. ***************
  134. *** 1138,1144 ****
  135.       int        i;
  136.       long    lnum;
  137.       char    *line;
  138. -     buf_T    *savebuf;
  139.       PPCODE:
  140.       if (buf_valid(vimbuf))
  141.       {
  142. --- 1168,1173 ----
  143. ***************
  144. *** 1151,1164 ****
  145.           line = SvPV(ST(i),PL_na);
  146.           if (lnum >= 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
  147.           {
  148. !         savebuf = curbuf;
  149.           curbuf = vimbuf;
  150.           if (u_inssub(lnum + 1) == OK)
  151.           {
  152.               ml_append(lnum, (char_u *)line, (colnr_T)0, FALSE);
  153.               appended_lines_mark(lnum, 1L);
  154.           }
  155. !         curbuf = savebuf;
  156.           update_curbuf(VALID);
  157.           }
  158.       }
  159. --- 1180,1210 ----
  160.           line = SvPV(ST(i),PL_na);
  161.           if (lnum >= 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
  162.           {
  163. !     #ifdef FEAT_AUTOCMD
  164. !         aco_save_T    aco;
  165. !         /* set curwin/curbuf for "vimbuf" and save some things */
  166. !         aucmd_prepbuf(&aco, vimbuf);
  167. !     #else
  168. !         buf_T    *save_curbuf = curbuf;
  169.           curbuf = vimbuf;
  170. +         curwin->w_buffer = vimbuf;
  171. +     #endif
  172.           if (u_inssub(lnum + 1) == OK)
  173.           {
  174.               ml_append(lnum, (char_u *)line, (colnr_T)0, FALSE);
  175.               appended_lines_mark(lnum, 1L);
  176.           }
  177. !     #ifdef FEAT_AUTOCMD
  178. !         /* restore curwin/curbuf and a few other things */
  179. !         aucmd_restbuf(&aco);
  180. !         /* Careful: autocommands may have made "vimbuf" invalid! */
  181. !     #else
  182. !         curwin->w_buffer = save_curbuf;
  183. !         curbuf = save_curbuf;
  184. !     #endif
  185.           update_curbuf(VALID);
  186.           }
  187.       }
  188. *** ../vim-7.0.043/src/version.c    Tue Aug  8 16:30:51 2006
  189. --- src/version.c    Tue Aug  8 16:45:40 2006
  190. ***************
  191. *** 668,669 ****
  192. --- 668,671 ----
  193.   {   /* Add new patch number below this line */
  194. + /**/
  195. +     44,
  196.   /**/
  197.  
  198. -- 
  199. Momento mori, ergo carpe diem
  200.  
  201.  /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
  202. ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
  203. \\\        download, build and distribute -- http://www.A-A-P.org        ///
  204.  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
  205.