]> git.pld-linux.org Git - packages/vim.git/blame - 7.2.221
- new
[packages/vim.git] / 7.2.221
CommitLineData
39a54fe5
AG
1To: vim-dev@vim.org
2Subject: Patch 7.2.221
3Fcc: outbox
4From: Bram Moolenaar <Bram@moolenaar.net>
5Mime-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
8------------
9
10Patch 7.2.221
11Problem: X cut_buffer0 text is used as-is, it may be in the wrong encoding.
12Solution: Convert between 'enc' and latin1. (James Vega)
13Files: 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--
239hundred-and-one symptoms of being an internet addict:
24040. You tell the cab driver you live at
241 http://123.elm.street/house/bluetrim.html
24241. 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.051127 seconds and 4 git commands to generate.