]> git.pld-linux.org Git - packages/vim.git/blob - 7.2.221
- new
[packages/vim.git] / 7.2.221
1 To: vim-dev@vim.org
2 Subject: Patch 7.2.221
3 Fcc: outbox
4 From: Bram Moolenaar <Bram@moolenaar.net>
5 Mime-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8 ------------
9
10 Patch 7.2.221
11 Problem:    X cut_buffer0 text is used as-is, it may be in the wrong encoding.
12 Solution:   Convert between 'enc' and latin1. (James Vega)
13 Files:      src/gui_gtk_x11.c, src/message.c, src/ops.c, src/proto/ui.pro,
14             src/ui.c
15
16
17 *** ../vim-7.2.220/src/gui_gtk_x11.c    2009-06-16 15:23:07.000000000 +0200
18 --- src/gui_gtk_x11.c   2009-07-01 11:55:34.000000000 +0200
19 ***************
20 *** 6717,6724 ****
21   {
22       GdkAtom   target;
23       unsigned  i;
24 -     int               nbytes;
25 -     char_u    *buffer;
26       time_t    start;
27   
28       for (i = 0; i < N_SELECTION_TARGETS; ++i)
29 --- 6717,6722 ----
30 ***************
31 *** 6746,6767 ****
32       }
33   
34       /* Final fallback position - use the X CUT_BUFFER0 store */
35 !     nbytes = 0;
36 !     buffer = (char_u *)XFetchBuffer(GDK_WINDOW_XDISPLAY(gui.mainwin->window),
37 !                                   &nbytes, 0);
38 !     if (nbytes > 0)
39 !     {
40 !       /* Got something */
41 !       clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd);
42 !       if (p_verbose > 0)
43 !       {
44 !           verbose_enter();
45 !           smsg((char_u *)_("Used CUT_BUFFER0 instead of empty selection"));
46 !           verbose_leave();
47 !       }
48 !     }
49 !     if (buffer != NULL)
50 !       XFree(buffer);
51   }
52   
53   /*
54 --- 6744,6750 ----
55       }
56   
57       /* Final fallback position - use the X CUT_BUFFER0 store */
58 !     yank_cut_buffer0(GDK_WINDOW_XDISPLAY(gui.mainwin->window), cbd);
59   }
60   
61   /*
62 *** ../vim-7.2.220/src/message.c        2009-05-17 13:30:58.000000000 +0200
63 --- src/message.c       2009-07-01 16:43:08.000000000 +0200
64 ***************
65 *** 107,113 ****
66   }
67   
68   #if defined(FEAT_EVAL) || defined(FEAT_X11) || defined(USE_XSMP) \
69 !     || defined(PROTO)
70   /*
71    * Like msg() but keep it silent when 'verbosefile' is set.
72    */
73 --- 107,113 ----
74   }
75   
76   #if defined(FEAT_EVAL) || defined(FEAT_X11) || defined(USE_XSMP) \
77 !     || defined(FEAT_GUI_GTK) || defined(PROTO)
78   /*
79    * Like msg() but keep it silent when 'verbosefile' is set.
80    */
81 *** ../vim-7.2.220/src/ops.c    2009-05-26 18:12:13.000000000 +0200
82 --- src/ops.c   2009-07-01 12:15:31.000000000 +0200
83 ***************
84 *** 5591,5596 ****
85 --- 5591,5619 ----
86       if (dpy != NULL && str != NULL && motion_type >= 0
87                                                && len < 1024*1024 && len > 0)
88       {
89 + #ifdef FEAT_MBYTE
90 +       /* The CUT_BUFFER0 is supposed to always contain latin1.  Convert from
91 +        * 'enc' when it is a multi-byte encoding.  When 'enc' is an 8-bit
92 +        * encoding conversion usually doesn't work, so keep the text as-is.
93 +        */
94 +       if (has_mbyte)
95 +       {
96 +           char_u      *conv_str = str;
97 +           vimconv_T   vc;
98
99 +           vc.vc_type = CONV_NONE;
100 +           if (convert_setup(&vc, p_enc, (char_u *)"latin1") == OK)
101 +           {
102 +               conv_str = string_convert(&vc, str, (int*)&len);
103 +               if (conv_str != NULL)
104 +               {
105 +                   vim_free(str);
106 +                   str = conv_str;
107 +               }
108 +               convert_setup(&vc, NULL, NULL);
109 +           }
110 +       }
111 + #endif
112         XStoreBuffer(dpy, (char *)str, (int)len, 0);
113         XFlush(dpy);
114       }
115 *** ../vim-7.2.220/src/proto/ui.pro     2007-05-05 19:58:49.000000000 +0200
116 --- src/proto/ui.pro    2009-07-01 11:48:11.000000000 +0200
117 ***************
118 *** 48,53 ****
119 --- 48,54 ----
120   void open_app_context __ARGS((void));
121   void x11_setup_atoms __ARGS((Display *dpy));
122   void clip_x11_request_selection __ARGS((Widget myShell, Display *dpy, VimClipboard *cbd));
123 + void yank_cut_buffer0 __ARGS((Display *dpy, VimClipboard *cbd));
124   void clip_x11_lose_selection __ARGS((Widget myShell, VimClipboard *cbd));
125   int clip_x11_own_selection __ARGS((Widget myShell, VimClipboard *cbd));
126   void clip_x11_set_selection __ARGS((VimClipboard *cbd));
127 *** ../vim-7.2.220/src/ui.c     2009-05-17 13:30:58.000000000 +0200
128 --- src/ui.c    2009-07-01 15:44:07.000000000 +0200
129 ***************
130 *** 2104,2111 ****
131       Atom      type;
132       static int        success;
133       int               i;
134 -     int               nbytes = 0;
135 -     char_u    *buffer;
136       time_t    start_time;
137       int               timed_out = FALSE;
138   
139 --- 2104,2109 ----
140 ***************
141 *** 2185,2199 ****
142       }
143   
144       /* Final fallback position - use the X CUT_BUFFER0 store */
145 !     buffer = (char_u *)XFetchBuffer(dpy, &nbytes, 0);
146 !     if (nbytes > 0)
147 !     {
148 !       /* Got something */
149 !       clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd);
150 !       XFree((void *)buffer);
151 !       if (p_verbose > 0)
152 !           verb_msg((char_u *)_("Used CUT_BUFFER0 instead of empty selection"));
153 !     }
154   }
155   
156   static Boolean        clip_x11_convert_selection_cb __ARGS((Widget, Atom *, Atom *, Atom *, XtPointer *, long_u *, int *));
157 --- 2183,2189 ----
158       }
159   
160       /* Final fallback position - use the X CUT_BUFFER0 store */
161 !     yank_cut_buffer0(dpy, cbd);
162   }
163   
164   static Boolean        clip_x11_convert_selection_cb __ARGS((Widget, Atom *, Atom *, Atom *, XtPointer *, long_u *, int *));
165 ***************
166 *** 2369,2374 ****
167 --- 2359,2418 ----
168   }
169   #endif
170   
171 + #if defined(FEAT_XCLIPBOARD) || defined(FEAT_GUI_X11) \
172 +     || defined(FEAT_GUI_GTK) || defined(PROTO)
173 + /*
174 +  * Get the contents of the X CUT_BUFFER0 and put it in "cbd".
175 +  */
176 +     void
177 + yank_cut_buffer0(dpy, cbd)
178 +     Display           *dpy;
179 +     VimClipboard      *cbd;
180 + {
181 +     int               nbytes = 0;
182 +     char_u    *buffer = (char_u *)XFetchBuffer(dpy, &nbytes, 0);
183
184 +     if (nbytes > 0)
185 +     {
186 + #ifdef FEAT_MBYTE
187 +       int  done = FALSE;
188
189 +       /* CUT_BUFFER0 is supposed to be always latin1.  Convert to 'enc' when
190 +        * using a multi-byte encoding.  Conversion between two 8-bit
191 +        * character sets usually fails and the text might actually be in
192 +        * 'enc' anyway. */
193 +       if (has_mbyte)
194 +       {
195 +           char_u      *conv_buf = buffer;
196 +           vimconv_T   vc;
197
198 +           vc.vc_type = CONV_NONE;
199 +           if (convert_setup(&vc, (char_u *)"latin1", p_enc) == OK)
200 +           {
201 +               conv_buf = string_convert(&vc, buffer, &nbytes);
202 +               if (conv_buf != NULL)
203 +               {
204 +                   clip_yank_selection(MCHAR, conv_buf, (long)nbytes, cbd);
205 +                   vim_free(conv_buf);
206 +                   done = TRUE;
207 +               }
208 +               convert_setup(&vc, NULL, NULL);
209 +           }
210 +       }
211 +       if (!done)  /* use the text without conversion */
212 + #endif
213 +           clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd);
214 +       XFree((void *)buffer);
215 +       if (p_verbose > 0)
216 +       {
217 +           verbose_enter();
218 +           verb_msg((char_u *)_("Used CUT_BUFFER0 instead of empty selection"));
219 +           verbose_leave();
220 +       }
221 +     }
222 + }
223 + #endif
224
225   #if defined(FEAT_MOUSE) || defined(PROTO)
226   
227   /*
228 *** ../vim-7.2.220/src/version.c        2009-07-01 17:11:40.000000000 +0200
229 --- src/version.c       2009-07-01 17:56:02.000000000 +0200
230 ***************
231 *** 678,679 ****
232 --- 678,681 ----
233   {   /* Add new patch number below this line */
234 + /**/
235 +     221,
236   /**/
237
238 -- 
239 hundred-and-one symptoms of being an internet addict:
240 40. You tell the cab driver you live at
241     http://123.elm.street/house/bluetrim.html
242 41. You actually try that 123.elm.street address.
243
244  /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
245 ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
246 \\\        download, build and distribute -- http://www.A-A-P.org        ///
247  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
This page took 0.369219 seconds and 3 git commands to generate.