Mercurial > hg > xemacs-beta
annotate src/dragdrop.c @ 5518:3cc7470ea71c
gnuclient: if TMPDIR was set and connect failed, try again with /tmp
2011-06-03 Aidan Kehoe <kehoea@parhasard.net>
* gnuslib.c (connect_to_unix_server):
Retry with /tmp as a directory in which to search for Unix sockets
if an attempt to connect with some other directory failed (which
may be because gnuclient and gnuserv don't share an environment
value for TMPDIR, or because gnuserv was compiled with USE_TMPDIR
turned off).
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Fri, 03 Jun 2011 18:40:57 +0100 |
parents | 308d34e9f07d |
children |
rev | line source |
---|---|
428 | 1 /* Drag'n'Drop definitions |
2 created 03-may-98 by Oliver Graf <ograf@fga.de> | |
3 Copyright (C) 1998 Oliver Graf <ograf@fga.de> | |
2367 | 4 Copyright (C) 2004 Ben Wing. |
428 | 5 |
6 This file is part of XEmacs. | |
7 | |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
4790
diff
changeset
|
8 XEmacs is free software: you can redistribute it and/or modify it |
428 | 9 under the terms of the GNU General Public License as published by the |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
4790
diff
changeset
|
10 Free Software Foundation, either version 3 of the License, or (at your |
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
4790
diff
changeset
|
11 option) any later version. |
428 | 12 |
13 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
4790
diff
changeset
|
19 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */ |
428 | 20 |
21 /* Synched up with: Not in FSF. */ | |
22 | |
23 /* This file should be Mule-ized. */ | |
24 | |
25 /* A short introduction to the new Drag'n'Drop Model: | |
26 | |
27 A drop generates a extended misc-user-event, as defined in events.[ch]. | |
28 This event contains the same as a eval and a button event. | |
29 The function of a drop is set to 'dragdrop-drop-dispatch' which will be | |
30 defined in ../lisp/dragdrop.el. | |
31 The object of the misc-user-event has the following format: | |
32 ( TYPE . DATA ) | |
3025 | 33 TYPE is one of `dragdrop-MIME' and `dragdrop-URL' |
34 DATA - if TYPE is `dragdrop-URL', DATA is a list of valid URL strings. It | |
428 | 35 is always a list, also if only one URL string is within it. |
3025 | 36 - if TYPE is `dragdrop-MIME', DATA is a list of MIME elements. |
428 | 37 Each can be a string or a list. |
38 if it is a string it is the pure MIME data complete with header | |
39 and body. | |
40 if it is a list it should look like | |
41 ( MIME-TYPE MIME-ENCODING MIME-DATA ) | |
42 MIME-TYPE list of type and key.value conses. Same as in tm-view | |
43 MIME-ENC the same (a string in this case) | |
44 MIME-DATA is a string | |
45 */ | |
46 | |
47 #include <config.h> | |
48 #include "lisp.h" | |
49 #include "dragdrop.h" | |
50 | |
51 /* The supported protocol list */ | |
52 Lisp_Object Vdragdrop_protocols; | |
53 | |
54 /* Drag'n'Drop data types known by XEmacs */ | |
55 Lisp_Object Qdragdrop_MIME; | |
56 Lisp_Object Qdragdrop_URL; | |
57 | |
58 /* External defined functions to handle Drag'n'Drop */ | |
59 Lisp_Object Qdragdrop_drop_dispatch; | |
60 | |
61 /* from wget -- thanxx Hrvoje */ | |
62 /* A list of unsafe characters for encoding, as per RFC1738. '@' and | |
63 ':' (not listed in RFC) were added because of user/password | |
64 encoding, and \033 for safe printing. */ | |
65 | |
66 #define URL_UNSAFE " <>\"#%{}|\\^~[]`@:\033" | |
67 | |
68 /* HEX digit -> ASCII char */ | |
69 #define HEXD2ASC(x) (((x) < 10) ? ((x) + '0') : ((x) - 10 + 'A')) | |
70 | |
71 /* Encodes the unsafe characters (listed in URL_UNSAFE) in a given | |
72 string, returning a malloc-ed %XX encoded string. | |
73 if method is != NULL it is prepended to the string. */ | |
2367 | 74 Ibyte * |
75 dnd_url_hexify_string (const Ibyte *s, const Ibyte *m) | |
428 | 76 { |
2367 | 77 const Ibyte *b; |
78 Ibyte *p, *res; | |
79 Bytecount i; | |
428 | 80 |
81 b = s; | |
82 for (i = 0; *s; s++, i++) | |
83 if (strchr (URL_UNSAFE, *s)) | |
84 i += 2; /* Two more characters (hex digits) */ | |
85 if (m) | |
86 { | |
2367 | 87 res = xnew_ibytes (i + ITEXT_ZTERM_SIZE + qxestrlen (m)); |
88 qxestrcpy (res, m); | |
89 p = res + qxestrlen (m); | |
428 | 90 } |
91 else | |
92 { | |
2367 | 93 res = xnew_ibytes (i + ITEXT_ZTERM_SIZE); |
428 | 94 p = res; |
95 } | |
96 for (s = b; *s; s++) | |
97 if (strchr (URL_UNSAFE, *s)) | |
98 { | |
2367 | 99 const Ibyte c = *s; |
428 | 100 *p++ = '%'; |
101 *p++ = HEXD2ASC (c >> 4); | |
102 *p++ = HEXD2ASC (c & 0xf); | |
103 } | |
104 else | |
105 *p++ = *s; | |
106 *p = '\0'; | |
107 return res; | |
108 } | |
109 | |
110 void | |
111 syms_of_dragdrop (void) | |
112 { | |
563 | 113 DEFSYMBOL (Qdragdrop_MIME); |
114 DEFSYMBOL (Qdragdrop_URL); | |
115 DEFSYMBOL (Qdragdrop_drop_dispatch); | |
428 | 116 } |
117 | |
118 void | |
119 vars_of_dragdrop (void) | |
120 { | |
121 Fprovide (intern ("dragdrop-api")); | |
122 | |
123 DEFVAR_CONST_LISP ("dragdrop-protocols", &Vdragdrop_protocols /* | |
124 A list of supported Drag'n'drop protocols. | |
125 Each element is the feature symbol of the protocol. | |
126 */ ); | |
127 | |
128 Vdragdrop_protocols = Qnil; | |
129 | |
130 #ifdef HAVE_MS_WINDOWS | |
2367 | 131 Vdragdrop_protocols = Fcons (Qmswindows, Vdragdrop_protocols); |
428 | 132 #endif |
133 #ifdef HAVE_CDE | |
2367 | 134 Vdragdrop_protocols = Fcons (intern ("cde"), Vdragdrop_protocols); |
428 | 135 #endif |
462 | 136 #ifdef HAVE_GTK |
2367 | 137 Vdragdrop_protocols = Fcons (Qgtk, Vdragdrop_protocols); |
462 | 138 #endif |
428 | 139 } |