4 From: Bram Moolenaar <Bram@moolenaar.net>
6 Content-Type: text/plain; charset=ISO-8859-1
7 Content-Transfer-Encoding: 8bit
11 Problem: Using buffer.append() in Ruby may append the line to the wrong
13 Solution: Properly switch to the buffer to do the appending. Also for
14 buffer.delete() and setting a buffer line.
18 *** ../vim-7.0.021/src/if_ruby.c Sun Apr 30 20:25:42 2006
19 --- src/if_ruby.c Tue Jun 20 21:01:23 2006
23 static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str)
25 ! buf_T *savebuf = curbuf;
26 ! char *line = STR2CSTR(str);
28 ! if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL) {
30 if (u_savesub(n) == OK) {
31 ml_replace(n, (char_u *)line, TRUE);
35 static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str)
37 ! char *line = STR2CSTR(str);
41 ! buf_T *save_curbuf = curbuf;
44 ! if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL)
47 ! /* set curwin/curbuf for "buf" and save some things */
48 ! aucmd_prepbuf(&aco, buf);
51 + curwin->w_buffer = buf;
54 if (u_savesub(n) == OK) {
55 ml_replace(n, (char_u *)line, TRUE);
59 syn_changed(n); /* recompute syntax hl. for this line */
63 update_curbuf(NOT_VALID);
66 rb_raise(rb_eIndexError, "index %d out of buffer", n);
67 return Qnil; /* For stop warning */
70 syn_changed(n); /* recompute syntax hl. for this line */
75 ! /* restore curwin/curbuf and a few other things */
76 ! aucmd_restbuf(&aco);
77 ! /* Careful: autocommands may have made "buf" invalid! */
79 ! curwin->w_buffer = save_curbuf;
80 ! curbuf = save_curbuf;
82 update_curbuf(NOT_VALID);
86 rb_raise(rb_eIndexError, "index %d out of buffer", n);
87 return Qnil; /* For stop warning */
92 static VALUE buffer_delete(VALUE self, VALUE num)
94 ! buf_T *buf = get_buf(self);
95 ! buf_T *savebuf = curbuf;
96 ! long n = NUM2LONG(num);
98 ! if (n > 0 && n <= buf->b_ml.ml_line_count) {
100 if (u_savedel(n, 1) == OK) {
105 static VALUE buffer_delete(VALUE self, VALUE num)
107 ! buf_T *buf = get_buf(self);
108 ! long n = NUM2LONG(num);
109 ! #ifdef FEAT_AUTOCMD
112 ! buf_T *save_curbuf = curbuf;
115 ! if (n > 0 && n <= buf->b_ml.ml_line_count)
117 ! #ifdef FEAT_AUTOCMD
118 ! /* set curwin/curbuf for "buf" and save some things */
119 ! aucmd_prepbuf(&aco, buf);
122 + curwin->w_buffer = buf;
125 if (u_savedel(n, 1) == OK) {
134 update_curbuf(NOT_VALID);
137 rb_raise(rb_eIndexError, "index %d out of buffer", n);
145 ! #ifdef FEAT_AUTOCMD
146 ! /* restore curwin/curbuf and a few other things */
147 ! aucmd_restbuf(&aco);
148 ! /* Careful: autocommands may have made "buf" invalid! */
150 ! curwin->w_buffer = save_curbuf;
151 ! curbuf = save_curbuf;
153 update_curbuf(NOT_VALID);
157 rb_raise(rb_eIndexError, "index %d out of buffer", n);
163 static VALUE buffer_append(VALUE self, VALUE num, VALUE str)
165 ! buf_T *buf = get_buf(self);
166 ! buf_T *savebuf = curbuf;
167 ! char *line = STR2CSTR(str);
168 ! long n = NUM2LONG(num);
170 ! if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL) {
172 if (u_inssub(n + 1) == OK) {
173 ml_append(n, (char_u *) line, (colnr_T) 0, FALSE);
177 static VALUE buffer_append(VALUE self, VALUE num, VALUE str)
179 ! buf_T *buf = get_buf(self);
180 ! char *line = STR2CSTR(str);
181 ! long n = NUM2LONG(num);
182 ! #ifdef FEAT_AUTOCMD
185 ! buf_T *save_curbuf = curbuf;
188 ! if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL)
190 ! #ifdef FEAT_AUTOCMD
191 ! /* set curwin/curbuf for "buf" and save some things */
192 ! aucmd_prepbuf(&aco, buf);
195 + curwin->w_buffer = buf;
198 if (u_inssub(n + 1) == OK) {
199 ml_append(n, (char_u *) line, (colnr_T) 0, FALSE);
207 update_curbuf(NOT_VALID);
215 ! #ifdef FEAT_AUTOCMD
216 ! /* restore curwin/curbuf and a few other things */
217 ! aucmd_restbuf(&aco);
218 ! /* Careful: autocommands may have made "buf" invalid! */
220 ! curwin->w_buffer = save_curbuf;
221 ! curbuf = save_curbuf;
223 update_curbuf(NOT_VALID);
226 *** ../vim-7.0.021/src/version.c Tue Jun 20 20:49:42 2006
227 --- src/version.c Tue Jun 20 18:42:35 2006
231 { /* Add new patch number below this line */