* Emacs failes to communicate with other X clients @ 2003-05-23 9:19 Robin Hu 2003-05-23 17:22 ` Eli Zaretskii 0 siblings, 1 reply; 10+ messages in thread From: Robin Hu @ 2003-05-23 9:19 UTC (permalink / raw) Hi everyone: Emacs failes to communicate with other X clients, due to it's wrongly decoding compound text from others. For example, a chinese word is encoded in compound text as : "^[$(AV1^[%/2\200\210gbk-0^B\351F;y", as I have provide gbk coding system myself, emacs can decode the first two characters correctly, but it miss the last character, because it doesn't know "\351F;y" should be decoded follow "^[$(AV1". I try to correct this bug myself, but it seems quite diffcult in the exist compound-text-with-extension coding system. ;-( I'd like to know how about leaving this decoding stuff to X itself, I knew XmbText family can do this kind of thing. And can anyone point me out where is the suitable place if this change can be applied? Robin.Hu ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Emacs failes to communicate with other X clients 2003-05-23 9:19 Emacs failes to communicate with other X clients Robin Hu @ 2003-05-23 17:22 ` Eli Zaretskii 2003-05-24 11:10 ` Robin Hu 0 siblings, 1 reply; 10+ messages in thread From: Eli Zaretskii @ 2003-05-23 17:22 UTC (permalink / raw) Cc: emacs-devel > From: Robin Hu <huxw@knight.6test.edu.cn> > Date: Fri, 23 May 2003 09:19:10 +0000 > > For example, a chinese word is encoded in compound text > as : "^[$(AV1^[%/2\200\210gbk-0^B\351F;y", as I have provide gbk > coding system myself, emacs can decode the first two characters > correctly, but it miss the last character, because it doesn't know > "\351F;y" should be decoded follow "^[$(AV1". > > I try to correct this bug myself, but it seems quite diffcult in the > exist compound-text-with-extension coding system. ;-( I'm not sure I understand correctly the situation, but IIRC, gbk is not supported by compound-text-with-extensions. If you want to add such a support, you need to modify the alist of non-standard ICCCM encodings used by Emacs to match known coding-systems to the encoding name mentioned in the X selection encoding. See mule.el for the definitions of those alists. > I'd like to know how about leaving this decoding stuff to X itself, I > knew XmbText family can do this kind of thing. How can Emacs leave that to X? We need to convert the X selection text into the internal representation of characters used by Emacs; X knows nothing about that representation. Am I missing something? ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Emacs failes to communicate with other X clients 2003-05-23 17:22 ` Eli Zaretskii @ 2003-05-24 11:10 ` Robin Hu 2003-05-24 17:38 ` Eli Zaretskii 0 siblings, 1 reply; 10+ messages in thread From: Robin Hu @ 2003-05-24 11:10 UTC (permalink / raw) Cc: emacs-devel >>>>> "Eli" == Eli Zaretskii <eliz@elta.co.il> writes: >> From: Robin Hu <huxw@knight.6test.edu.cn> Date: Fri, 23 May 2003 >> 09:19:10 +0000 Eli> I'm not sure I understand correctly the situation, but IIRC, Eli> gbk is not supported by compound-text-with-extensions. If you Eli> want to add such a support, you need to modify the alist of Eli> non-standard ICCCM encodings used by Emacs to match known Eli> coding-systems to the encoding name mentioned in the X Eli> selection encoding. See mule.el for the definitions of those Eli> alists. Yeah, icccm list had been appended with GBK-0, that's why my emacs can decode some gbk characters correctly, but problems are still there. In the example I gived in the previous post, one embeded gbk character will make all characters fail to be decoded. ;-( Eli> How can Emacs leave that to X? We need to convert the X Eli> selection text into the internal representation of characters Eli> used by Emacs; X knows nothing about that representation. Am I Eli> missing something? But selection-coding-sytem can do this translation. For example, we can leave X to decode compound text to gbk locale coding, then set-selection-coding-system to chinese-gbk, then everything should go fine. Why don't we just totally leave this copy/paste working to be transparent to Emacs, to make this work just like a keyboard? If I understand the source corrently, ntEmacs works in this way. Any comments? ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Emacs failes to communicate with other X clients 2003-05-24 11:10 ` Robin Hu @ 2003-05-24 17:38 ` Eli Zaretskii 2003-05-26 2:56 ` Robin Hu 0 siblings, 1 reply; 10+ messages in thread From: Eli Zaretskii @ 2003-05-24 17:38 UTC (permalink / raw) Cc: emacs-devel > From: Robin Hu <huxw@knight.6test.edu.cn> > Date: Sat, 24 May 2003 11:10:06 +0000 > > Eli> I'm not sure I understand correctly the situation, but IIRC, > Eli> gbk is not supported by compound-text-with-extensions. If you > Eli> want to add such a support, you need to modify the alist of > Eli> non-standard ICCCM encodings used by Emacs to match known > Eli> coding-systems to the encoding name mentioned in the X > Eli> selection encoding. See mule.el for the definitions of those > Eli> alists. > > Yeah, icccm list had been appended with GBK-0, that's why my emacs > can decode some gbk characters correctly, but problems are still > there. In the example I gived in the previous post, one embeded gbk > character will make all characters fail to be decoded. ;-( Sounds like a bug. Unfortunately, I don't know enough about gbk to guess what might be wrong, and don't have time to debug compound-text-with-extensions myself. > Why don't we just totally leave this copy/paste working to > be transparent to Emacs, to make this work just like a keyboard? Keyboard input is nowhere as transparent as you seem to think. Emacs decodes keyboard input similarly to what it does with X selections. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Emacs failes to communicate with other X clients 2003-05-24 17:38 ` Eli Zaretskii @ 2003-05-26 2:56 ` Robin Hu 2003-05-26 4:54 ` Kenichi Handa 0 siblings, 1 reply; 10+ messages in thread From: Robin Hu @ 2003-05-26 2:56 UTC (permalink / raw) Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1513 bytes --] >>>>> "Eli" == Eli Zaretskii <eliz@elta.co.il> writes: >> From: Robin Hu <huxw@knight.6test.edu.cn> Date: Sat, 24 May 2003 >> 11:10:06 +0000 >> Eli> Sounds like a bug. Unfortunately, I don't know enough about Eli> gbk to guess what might be wrong, and don't have time to debug Eli> compound-text-with-extensions myself. I'll try to clearify myself, and attachment is a dirty patch to xselect.c, I also hope this can be any help out of my buggy english ;-( My point is that compound-text decoding should be left to X itself, rather then by emacs itself. It should be better be transparent to emacs, for better portable and better extensible. My patch implements this idea, it use XmbTextPropertyToTextList to decode compound-text, then delegate the result to selection_data_to_lisp_data, who will call decode_region with chinese-gbk to translate gbk coding characters to emacs-mule. It works fine for me these days. But there is still some problems I am not so sure. First is that I dont know whether this change of behavior will impact any other packages exists. Second is that I still wonder if there are any better places for this change. Eli> Keyboard input is nowhere as transparent as you seem to think. Eli> Emacs decodes keyboard input similarly to what it does with X Eli> selections. I mean decoding X selections should be seperated into 2 stages, then compound text is transparent to emacs. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: patch to Xselect.c --] [-- Type: text/x-patch, Size: 2193 bytes --] --- xselect.c 2003-04-07 04:35:06.000000000 +0800 +++ /home/huxw/tmp_src/emacs/src/xselect.c 2003-05-26 10:29:46.641097720 +0800 @@ -1496,6 +1496,11 @@ Lisp_Object target_type; /* for error messages only */ Atom selection_atom; /* for error messages only */ { + // by huxw start here + XTextProperty text_prop; + char** local_list; + int local_number; + // by huxw end here Atom actual_type; int actual_format; unsigned long actual_size; @@ -1554,12 +1559,50 @@ /* It's been read. Now convert it to a lisp object in some semi-rational manner. */ + //by huxw start here + if (XSupportsLocale()) { + int local_status; + + text_prop.value = (char*)data; + text_prop.encoding = actual_type; + text_prop.format = actual_format; + text_prop.nitems = actual_size; + + local_status = XmbTextPropertyToTextList(display, &text_prop, &local_list, &local_number); + if (local_status < Success || !local_number || !*local_list ) { + printf("failed due to XmbTextPropertyToTextList\n"); + printf("XNoMemory is %d, XLocaleNotSupported is %d, XConverterNotFound is %d\n", XNoMemory, XLocaleNotSupported, XConverterNotFound); + printf("status is %d, number is %d, \n", local_status, local_number ); + } else { + printf("XmbTextPropertyToTextList successfullly\n"); + xfree((char*)data); + printf("xfree data successfully\n"); + data = strdup(*local_list); + printf("strdup data successfully, data is %s\n", (char*)data); + XFreeStringList(local_list); + printf("XFreeStringList successfully\n"); + } + } else { + printf("no support this locale\n"); + } + //by huxw end here + +#if 0 val = selection_data_to_lisp_data (display, data, bytes, actual_type, actual_format); +#else + val = selection_data_to_lisp_data (display, data, strlen(data), actual_type, actual_format); +#endif /* Use xfree, not XFree, because x_get_window_property calls xmalloc itself. */ - xfree ((char *) data); + + // by huxw start here +// xfree ((char *) data); + printf("selection_data_to_lisp_data successfully\n"); + free(data); + printf("free data successfully\n"); + // by huxw end here return val; } \f [-- Attachment #3: Type: text/plain, Size: 142 bytes --] _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://mail.gnu.org/mailman/listinfo/emacs-devel ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Emacs failes to communicate with other X clients 2003-05-26 2:56 ` Robin Hu @ 2003-05-26 4:54 ` Kenichi Handa 2003-05-26 6:06 ` Robin Hu 0 siblings, 1 reply; 10+ messages in thread From: Kenichi Handa @ 2003-05-26 4:54 UTC (permalink / raw) Cc: emacs-devel In article <uznla2z61.fsf@knight.6test.edu.cn>, Robin Hu <huxw@knight.6test.edu.cn> writes: > My point is that compound-text decoding should be left > to X itself, rather then by emacs itself. It should be > better be transparent to emacs, for better portable and > better extensible. > My patch implements this idea, it use > XmbTextPropertyToTextList to decode compound-text, then > delegate the result to selection_data_to_lisp_data, who > will call decode_region with chinese-gbk to translate gbk > coding characters to emacs-mule. It works fine for me > these days. XmbTextPropertyToTextList can handle only such compound-text that contains characters supported in the current X locale. So, in your way, if you are in GBK locale, Emacs can't receive, for instance, Hangul chacaters even if compound-text can correctly encode Hangul characters and Emacs itself can handle Hangul in any locales. So, I beleive we should avoid such kind of change. By the way, the coding system chinese-gbk is not yet supported in the current Emacs. Or, are you using emacs-unicode? --- Ken'ichi HANDA handa@m17n.org ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Emacs failes to communicate with other X clients 2003-05-26 4:54 ` Kenichi Handa @ 2003-05-26 6:06 ` Robin Hu 2003-05-26 7:09 ` Kenichi Handa 0 siblings, 1 reply; 10+ messages in thread From: Robin Hu @ 2003-05-26 6:06 UTC (permalink / raw) Cc: emacs-devel >>>>> "Kenichi" == Kenichi Handa <handa@m17n.org> writes: Kenichi> XmbTextPropertyToTextList can handle only such Kenichi> compound-text that contains characters supported in the Kenichi> current X locale. So, in your way, if you are in GBK Kenichi> locale, Emacs can't receive, for instance, Hangul chacaters Kenichi> even if compound-text can correctly encode Hangul Kenichi> characters and Emacs itself can handle Hangul in any Kenichi> locales. Thank you Kenichi for your answering ;-) But I still have some different ideas here. Of course Hangul characters can not be received when we set locale to zh_CN.GBK, but I think this is the right behavior. For example, while I set keyboard-coding-system to chinese-gbk, I can not input Hangul characters, because it's my responsibility to set correct keyboard coding system for chinese input. So I think that's also my responsibility to set correct locale for X paste. Another problem with current implementation is, some characters can be encoded in different char-settings. For example, I set file coding system to chinese-iso-8bit, and selection coding system to compound-text-with-extension, and copy/paste a very long chinese article from mozilla. Every thing seems to go fine, but this article just cannot be saved. This is because X encode some characters as if they are not chinese-iso-8bit characters, but emacs decode them to emacs-mule successfully, and finally file coding system cannot encode emacs-mule to chinese-iso-8bit. Kenichi> By the way, the coding system chinese-gbk is not yet Kenichi> supported in the current Emacs. Or, are you using Kenichi> emacs-unicode? Chinese-gbk is my extension to Emacs, I believe I have post it in m17n's maillist. I can read/write gbk encoding file, and unicode file with utf-translate-gbk-mode turned on. Everything goes fine, except copy/paste in X (ntEmacs is fine). ;-( ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Emacs failes to communicate with other X clients 2003-05-26 6:06 ` Robin Hu @ 2003-05-26 7:09 ` Kenichi Handa 2003-05-26 8:42 ` Robin Hu 0 siblings, 1 reply; 10+ messages in thread From: Kenichi Handa @ 2003-05-26 7:09 UTC (permalink / raw) Cc: emacs-devel In article <usmr21bsz.fsf@knight.6test.edu.cn>, Robin Hu <huxw@knight.6test.edu.cn> writes: > Of course Hangul characters can not be received when > we set locale to zh_CN.GBK, but I think this is the right > behavior. For example, while I set keyboard-coding-system > to chinese-gbk, I can not input Hangul characters, because > it's my responsibility to set correct keyboard coding > system for chinese input. So I think that's also my > responsibility to set correct locale for X paste. The reason why you can't input Hangul characters is that your input method doesn't support it or it generates data only in chiense-gbk encoding which can't contain Hangul characters. Provided that you have an input method that produces both Chinese and Hangul and sends data to Emacs in compound-text encoding, and you set keyboard-coding-system to compound-text, Emacs should accept all characters, shouldn't it? Emacs is a multilingual editor and its functionality should not be limited by locale. > Another problem with current implementation is, some > characters can be encoded in different char-settings. For > example, I set file coding system to chinese-iso-8bit, and > selection coding system to compound-text-with-extension, > and copy/paste a very long chinese article from > mozilla. Every thing seems to go fine, but this article > just cannot be saved. This is because X encode some > characters as if they are not chinese-iso-8bit characters, > but emacs decode them to emacs-mule successfully, and > finally file coding system cannot encode emacs-mule to > chinese-iso-8bit. In that case, Emacs asks you to select some of safe coding systems. If your Emacs supports chinese-gbk, it should also be listed as a safe coding system. I think that behaviour is better than refusing characters not supported by chinese-iso-8bit from the beginning. Kenichi> By the way, the coding system chinese-gbk is not Kenichi> yet supported in the current Emacs. Or, are you Kenichi> using emacs-unicode? > Chinese-gbk is my extension to Emacs, I believe I have > post it in m17n's maillist. Oops, then, I'm very sorry that I completely forgot about that mail. Could you send it to me again? Then I'll check why: > Yeah, icccm list had been appended with GBK-0, that's why my emacs > can decode some gbk characters correctly, but problems are still > there. In the example I gived in the previous post, one embeded gbk > character will make all characters fail to be decoded. ;-( that happens. By the way, the name non-standard-icccm-encodings-alist is wrong. "icccm" should actually be "ctext". I'll fix it soon. --- Ken'ichi HANDA handa@m17n.org ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Emacs failes to communicate with other X clients 2003-05-26 7:09 ` Kenichi Handa @ 2003-05-26 8:42 ` Robin Hu 2003-05-27 12:26 ` Kenichi Handa 0 siblings, 1 reply; 10+ messages in thread From: Robin Hu @ 2003-05-26 8:42 UTC (permalink / raw) Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1148 bytes --] >>>>> "Kenichi" == Kenichi Handa <handa@m17n.org> writes: Kenichi> Provided that you have an input method that produces both Kenichi> Chinese and Hangul and sends data to Emacs in compound-text Kenichi> encoding, and you set keyboard-coding-system to Kenichi> compound-text, Emacs should accept all characters, Kenichi> shouldn't it? Kenichi> Emacs is a multilingual editor and its functionality should Kenichi> not be limited by locale. Kenichi> In that case, Emacs asks you to select some of safe coding Kenichi> systems. If your Emacs supports chinese-gbk, it should Kenichi> also be listed as a safe coding system. I think that Kenichi> behaviour is better than refusing characters not supported Kenichi> by chinese-iso-8bit from the beginning. Well, I think you successfully persuade me to believe your idea is a better choice, though it takes more effort. ;-) The first attachment is my extension for gbk coding. The second is a sample gbk coding file, it helps to show copy/paste problems. Hope they can be any help. Kenichi> --- Ken'ichi HANDA handa@m17n.org [-- Attachment #2: Chinese-gbk --] [-- Type: application/octet-stream, Size: 104177 bytes --] [-- Attachment #3: Sample.txt --] [-- Type: application/octet-stream, Size: 34 bytes --] [-- Attachment #4: Type: text/plain, Size: 142 bytes --] _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://mail.gnu.org/mailman/listinfo/emacs-devel ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Emacs failes to communicate with other X clients 2003-05-26 8:42 ` Robin Hu @ 2003-05-27 12:26 ` Kenichi Handa 0 siblings, 0 replies; 10+ messages in thread From: Kenichi Handa @ 2003-05-27 12:26 UTC (permalink / raw) Cc: emacs-devel In article <uk7certe8.fsf@knight.6test.edu.cn>, Robin Hu <huxw@knight.6test.edu.cn> writes: > The first attachment is my extension for gbk > coding. The second is a sample gbk coding file, it helps > to show copy/paste problems. Hope they can be any help. Thank you. I loaded your chinese-gbk.el, evaluate this, (push '("gbk-0" . chinese-gbk) non-standard-icccm-encodings-alist) and tried your failure example as below (as I don't have an X client that sends such a data): (decode-coding-string "\e$(AV1\e%/2\200\210gbk-0\C-b\351F;y" 'compound-text-with-extensions) It retursn four characters string: 1. chinese-gb2312 (zhi2) 2. chinese-cns11643-5 (can't see because I don't have a gbk font) 3. ';' 4. 'y' If I encode that string into chinese-gbk, I get this: "\326\261\351F;y" Isn't it the correct string? --- Ken'ichi HANDA handa@m17n.org ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2003-05-27 12:26 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2003-05-23 9:19 Emacs failes to communicate with other X clients Robin Hu 2003-05-23 17:22 ` Eli Zaretskii 2003-05-24 11:10 ` Robin Hu 2003-05-24 17:38 ` Eli Zaretskii 2003-05-26 2:56 ` Robin Hu 2003-05-26 4:54 ` Kenichi Handa 2003-05-26 6:06 ` Robin Hu 2003-05-26 7:09 ` Kenichi Handa 2003-05-26 8:42 ` Robin Hu 2003-05-27 12:26 ` Kenichi Handa
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).