# HG changeset patch # User Eli Zaretskii # Date 1014383667 0 # Node ID 75677c801c2678fa85933116db793c3bd7b7a8af # Parent cea4b3c48c94bd3a55e9efdfd4b468935ac451cb (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. diff -r cea4b3c48c94 -r 75677c801c26 src/xfns.c --- 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);