changeset 43452:75677c801c26

(x_encode_text): Accept additional arg SELECTIONP; all callers changed. If SELECTIONP is non-zero, run the pre-write-conversion function before encoding the selection text.
author Eli Zaretskii <eliz@gnu.org>
date Fri, 22 Feb 2002 13:14:27 +0000
parents cea4b3c48c94
children 2e4c66e516bc
files src/xfns.c
diffstat 1 files changed, 19 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/xfns.c	Thu Feb 21 21:09:18 2002 +0000
+++ b/src/xfns.c	Fri Feb 22 13:14:27 2002 +0000
@@ -2345,6 +2345,10 @@
    CODING_SYSTEM, and return a newly allocated memory area which
    should be freed by `xfree' by a caller.
 
+   SELECTIONP non-zero means the string is being encoded for an X
+   selection, so it is safe to run pre-write conversions (which
+   may run Lisp code).
+
    Store the byte length of resulting text in *TEXT_BYTES.
 
    If the text contains only ASCII and Latin-1, store 1 in *STRING_P,
@@ -2353,9 +2357,10 @@
    the result should be `COMPOUND_TEXT'.  */
 
 unsigned char *
-x_encode_text (string, coding_system, text_bytes, stringp)
+x_encode_text (string, coding_system, selectionp, text_bytes, stringp)
      Lisp_Object string, coding_system;
      int *text_bytes, *stringp;
+     int selectionp;
 {
   unsigned char *str = XSTRING (string)->data;
   int chars = XSTRING (string)->size;
@@ -2375,6 +2380,15 @@
     }
 
   setup_coding_system (coding_system, &coding);
+  if (selectionp
+      && SYMBOLP (coding.pre_write_conversion)
+      && !NILP (Ffboundp (coding.pre_write_conversion)))
+    {
+      string = run_pre_post_conversion_on_str (string, &coding, 1);
+      str = XSTRING (string)->data;
+      chars = XSTRING (string)->size;
+      bytes = STRING_BYTES (XSTRING (string));
+    }
   coding.src_multibyte = 1;
   coding.dst_multibyte = 0;
   coding.mode |= CODING_MODE_LAST_BLOCK;
@@ -2458,7 +2472,7 @@
 	coding_system = Vlocale_coding_system;
 	if (NILP (coding_system))
 	  coding_system = Qcompound_text;
-	text.value = x_encode_text (name, coding_system, &bytes, &stringp);
+	text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp);
 	text.encoding = (stringp ? XA_STRING
 			 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
 	text.format = 8;
@@ -2470,7 +2484,7 @@
 	  }
 	else
 	  {
-	    icon.value = x_encode_text (f->icon_name, coding_system,
+	    icon.value = x_encode_text (f->icon_name, coding_system, 0,
 					&bytes, &stringp);
 	    icon.encoding = (stringp ? XA_STRING
 			     : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
@@ -2565,7 +2579,7 @@
 	coding_system = Vlocale_coding_system;
 	if (NILP (coding_system))
 	  coding_system = Qcompound_text;
-	text.value = x_encode_text (name, coding_system, &bytes, &stringp);
+	text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp);
 	text.encoding = (stringp ? XA_STRING
 			 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
 	text.format = 8;
@@ -2577,7 +2591,7 @@
 	  }
 	else
 	  {
-	    icon.value = x_encode_text (f->icon_name, coding_system,
+	    icon.value = x_encode_text (f->icon_name, coding_system, 0,
 					&bytes, &stringp);
 	    icon.encoding = (stringp ? XA_STRING
 			     : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);