# HG changeset patch # User Eli Zaretskii # Date 904656401 0 # Node ID ecc4641bf00a11a93e129b1752619d3730ec3f7b # Parent e754d3dcb5e8166c10f051ab91cf3732453beff9 (Vnext_selection_coding_system): New variable. (syms_of_win16select): DEFVAR_LISP it. No need to staticpro Vselection_coding_system. (Fw16_set_clipboard_data): Always convert multibyte strings. Use Vnext_selection_coding_system if non-nil. (Fw16_get_clipboard_data): Always convert a string that includes non-ASCII characters. Use Vnext_selection_coding_system if non-nil. diff -r e754d3dcb5e8 -r ecc4641bf00a src/w16select.c --- a/src/w16select.c Tue Sep 01 09:01:44 1998 +0000 +++ b/src/w16select.c Tue Sep 01 13:26:41 1998 +0000 @@ -72,6 +72,9 @@ clipboard. */ static Lisp_Object Vselection_coding_system; +/* Coding system for the next communicating with other Windows programs. */ +static Lisp_Object Vnext_selection_coding_system; + /* The segment address and the size of the buffer in low memory used to move data between us and WinOldAp module. */ @@ -441,10 +444,10 @@ /* Since we are now handling multilingual text, we must consider encoding text for the clipboard. */ - bzero (charsets, (MAX_CHARSET + 1) * sizeof (int)); num = ((nbytes <= 1 /* Check the possibility of short cut. */ - || NILP (buffer_defaults.enable_multibyte_characters)) + || !STRING_MULTIBYTE (string) + || nbytes == XSTRING (string)->size) ? 0 : find_charset_in_str (src, nbytes, charsets, Qnil, 1)); @@ -462,8 +465,11 @@ struct coding_system coding; unsigned char *htext2; + if (NILP (Vnext_selection_coding_system)) + Vnext_selection_coding_system = Vselection_coding_system; setup_coding_system - (Fcheck_coding_system (Vselection_coding_system), &coding); + (Fcheck_coding_system (Vnext_selection_coding_system), &coding); + Vnext_selection_coding_system = Qnil; coding.mode |= CODING_MODE_LAST_BLOCK; Vlast_coding_system_used = coding.symbol; bufsize = encoding_buffer_size (&coding, nbytes); @@ -543,7 +549,13 @@ goto closeclip; /* Do we need to decode it? */ - if (! NILP (buffer_defaults.enable_multibyte_characters)) + if ( +#if 1 + 1 +#else + ! NILP (buffer_defaults.enable_multibyte_characters) +#endif + ) { /* If the clipboard data contains any 8-bit Latin-1 code, we need to decode it. */ @@ -564,8 +576,11 @@ unsigned char *buf; struct coding_system coding; + if (NILP (Vnext_selection_coding_system)) + Vnext_selection_coding_system = Vselection_coding_system; setup_coding_system - (Fcheck_coding_system (Vselection_coding_system), &coding); + (Fcheck_coding_system (Vnext_selection_coding_system), &coding); + Vnext_selection_coding_system = Qnil; coding.mode |= CODING_MODE_LAST_BLOCK; truelen = get_clipboard_data (CF_OEMTEXT, htext, data_size, 1); bufsize = decoding_buffer_size (&coding, truelen); @@ -655,7 +670,14 @@ the text is encoded or decoded by this coding system.\n\ A default value is `iso-latin-1-dos'"); Vselection_coding_system=intern ("iso-latin-1-dos"); - staticpro(&Vselection_coding_system); + + DEFVAR_LISP ("next-selection-coding-system", &Vnext_selection_coding_system, + "Coding system for the next communication with other X clients.\n\ +Usually, `selection-coding-system' is used for communicating with\n\ +other X clients. But, if this variable is set, it is used for the\n\ +next communication only. After the communication, this variable is\n\ +set to nil."); + Vnext_selection_coding_system = Qnil; QPRIMARY = intern ("PRIMARY"); staticpro (&QPRIMARY); QCLIPBOARD = intern ("CLIPBOARD"); staticpro (&QCLIPBOARD);