2005/5/28 (土) 21:52:44 novice  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
[3934] クリップボード UNICODE TEXT 対応
「Cygwin/X」で「XWin.exe -clipboard」と起動後に、X上でテキストをコピーしてからサクラエディタに貼り付けると、「????」と表示されてしまうのを修正しました。

変更対象ファイル
ssrc_2005-04-29.tar.bz2

差分ファイル
diff_ssrc_2005-04-29.zip

2005/5/29 (日) 14:41:16 novice  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
[3935] Re:クリップボード UNICODE TEXT 対応
▼ noviceさん
> 「Cygwin/X」で「XWin.exe -clipboard」と起動後に、X上でテキストをコピーしてからサクラエディタに貼り付けると、「????」と表示されてしまうのを修正しました。

クリップボードからのデータ長の取得処理が間違っていたので、差分ファイルを修正しました。

差分ファイル
diff_ssrc_2005-04-29a.zip

2005/5/29 (日) 19:56:24 もか 〔URL 
INCM1.23c
[3936] Re2:クリップボード UNICODE TEXT 対応
"SAKURAClip"
CF_UNICODETEXT
CF_OEMTEXT
の順に優先して張り付けるんですよね。

これだと、シフトJIS拡張のNEC選定とIBM選定文字(丸付き数字などなど)を区別できなくなったり、
そもそも、CF_UNICODETEXTとCF_OEMTEXTの内容がエンコードの違い以上に異なってる場合(ACCESS等)があったり、
運用上問題になってしまう事もあるかもしれません。

私のHPにも、[実験用]−[クリップボードとD&D周りの修正]
というのを放置してあるのですが、これは実装がいまいちです。。。

2005/6/1 (水) 23:44:02 novice  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
[3939] Re3:クリップボード UNICODE TEXT 対応
▼ もかさん
> "SAKURAClip"
> CF_UNICODETEXT
> CF_OEMTEXT
> の順に優先して張り付けるんですよね。

はい。その通りです。

> これだと、シフトJIS拡張のNEC選定とIBM選定文字(丸付き数字などなど)を区別できなくなったり、
> そもそも、CF_UNICODETEXTとCF_OEMTEXTの内容がエンコードの違い以上に異なってる場合(ACCESS等)があったり、
> 運用上問題になってしまう事もあるかもしれません。

ご指摘ありがとうございます。
今回のパッチの問題をまとめると、

・パッチを適用する。
「Cygwin/X」で漢字のコピー&ペーストができる。
UNICODE → SJIS変換するので問題あり。

・パッチを適用しない。
「Cygwin/X」で漢字のコピー&ペーストができない。
UNICODE → SJIS変換しないので問題なし。

ということになります。
ちなみに、ほかのエディタで確認(「Cygwin/X」で漢字のコピー&ペースト)してみましたが、

秀丸 4.17 ... OK
K2Editor r.1.4.31 ... NG
TeraPad 0.89 ... NG
xyzzy 0.2.2.234 ... OK

となってました。
どっちがいいのか微妙なところです。

2005/6/12 (日) 22:29:19 もか 〔URL 
INCM1.23c
[3946] Re4:クリップボード UNICODE TEXT 対応
>どっちがいいのか微妙なところです。
ちょっとwebで調べただけなので、外してるかもしれませんけど
「Cygwin/X」に関して言えば、XwinClipのバグ・制限なのではないですか。
自分で言っておいてなんですが、
Unicode形式が利用できるのは2k/XPだけで、そのXp/2Kのメモ帳などは元々シフトJIS拡張文字が区別できないものの、そこまで問題になっているとは聞きません。
 他にも、キーボードレイアウトが日本語でないときに、???に化ける問題。
 AccessのOEMTEXTが切れる問題。
このあたりをトータルで考えるとUnicode対応してくれた方が、幸せになる人は多そうな気がします。

また最終的には、
>>dev:4244 みくさん提案 クリップボード形式を指定して貼り付け
のような機構を実装する以外に両方の問題を解決する方法はないと思っています。

2005/6/18 (土) 16:36:24 novice  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
[3953] Re5:クリップボード UNICODE TEXT 対応
▼ もかさん
> ちょっとwebで調べただけなので、外してるかもしれませんけど
> 「Cygwin/X」に関して言えば、XwinClipのバグ・制限なのではないですか。

ご指摘の通り、「XWin.exe」の変換に問題あるように思います。

> このあたりをトータルで考えるとUnicode対応してくれた方が、幸せになる人は多そうな気がします。
Unicode→SJIS変換はサクラエディタに内蔵しているので、Unicodeデータはサクラエディタ側で変換したほうが統一感があるように思います。
特に反対意見がなければ、今回の機能をマージして頂ければと思います。

> また最終的には、
> >>dev:4244 みくさん提案 クリップボード形式を指定して貼り付け
> のような機構を実装する以外に両方の問題を解決する方法はないと思っています。

Officeにも「編集」-「形式を選択して貼り付け」というのがあるので、サクラエディタで実装する場合、それと似たようなインタフェースにすれば、違和感なく使ってもらえるように思います。

2005/6/18 (土) 16:52:23 げんた  
INCM1.23c
[3954] Re6:クリップボード UNICODE TEXT 対応
>特に反対意見がなければ、今回の機能をマージして頂ければと思います。
ああ,タッチの差でリリースしてしまった.

2005/6/18 (土) 20:19:29 Uchi  
Opera/8.0 (Windows NT 5.1; U; ja)
[3955] Re7:クリップボード UNICODE TEXT 対応
Sakura Editor を仕事で使用させてもらっています。
で一部バイナリなファイルなども扱うことがあるのですが、
そういったデータでもカット&ペーストで扱うことができなくなるのは非常に困ります。
>>dev:4244 みくさん提案 クリップボード形式を指定して貼り付け
を取り込むまでは仕様の変更は待ってもらえないでしょうか。

2005/6/18 (土) 21:15:45 もか 〔URL 
INCM1.23c
[3956] Re8:クリップボード UNICODE TEXT 対応
>で一部バイナリなファイルなども扱うことがあるのですが、
>そういったデータでもカット&ペーストで扱うことができなくなるのは非常に困ります。

補足説明しますと、サクラエディタからサクラエディタにカット&ペーストする場合は、Unicode対応しても従来通りのバイナリー形式が扱えます。
あと、現在の実装でも他のソフトウェアからのバイナリーデータを貼り付けるとナル文字以降が切れますので注意が必要です。
 Uchiさんの場合は、前者だと思うのですが、他のソフトから貼り付けてるとなると、困りますね。

2005/6/27 (月) 02:35:02 げんた  
INCM1.23c
[3963] Re6:クリップボード UNICODE TEXT 対応
2つほど質問です.

UnicodeからSJISに変換する時にcmemUnicodeという一時変数で変換してからcmemBufにコピーしていますが,
cmemBufにUnicodeのまま設定してUnicodeToSJIS()を呼べばいいのでは?

SetDataSz()だと\0までを取り出しますが,Unicodeからの変換も含めてそれ以外の部分では長さを指定しているので\0を含んでいても処理できるように見えますから,ここで無理に\0までにしなくてもと思います.
あと,SJISに変換できない文字列が入っているとそこはUnicodeのまま残ってしまうようなので,Unicode表現で0を含むものがあるとそこで文字列が切れてしまう可能性があるのでは?(変なものが入っている時点でそれ以降は正しく処理できない可能性が高いですが)
もう1つ.一般掲示板3306(2003/09/18)でCF_LOCALEについて言及されていますが,これは今回の問題とは関係ないのでしょうか.

2005/7/2 (土) 13:23:16 novice  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
[3965] Re7:クリップボード UNICODE TEXT 対応
▼ げんたさん
> UnicodeからSJISに変換する時にcmemUnicodeという一時変数で変換してからcmemBufにコピーしていますが,
> cmemBufにUnicodeのまま設定してUnicodeToSJIS()を呼べばいいのでは?

下記の通りやってみたのですが、文字列の最後に空白が挿入されました。

cmemBuf.SetData( lptstr, GlobalSize(lptstr) );
cmemBuf.UnicodeToSJIS();

> SetDataSz()だと\0までを取り出しますが,Unicodeからの変換も含めてそれ以外の部分では長さを指定しているので\0を含んでいても処理できるように見えますから,ここで無理に\0までにしなくてもと思います.
上記に関連しますが、SJIS変換後のデータとデータ長の整合が取れてないみたいです。MemUnicodeToSJIS()を一部修正して正しいデータ長を返すようにすれば直るかもしれません。

> あと,SJISに変換できない文字列が入っているとそこはUnicodeのまま残ってしまうようなので,Unicode表現で0を含むものがあるとそこで文字列が切れてしまう可能性があるのでは?(変なものが入っている時点でそれ以降は正しく処理できない可能性が高いですが)
パッチを当てたものをしばらく使ってますが、今のところSJISに変換できないようなデータには遭遇してません。
CF_UNICODETEXTにはUnicodeデータが入っているという前提なので、大丈夫だろうと楽観してますが。

> もう1つ.一般掲示板3306(2003/09/18)でCF_LOCALEについて言及されていますが,これは今回の問題とは関係ないのでしょうか.
CLCL(http://www.nakka.com/soft/clcl/)でクリップボードの中身を確認したのですが、CF_UNICODETEXTの中にだけ使えそうなデータが格納されていて、CF_OEMTEXTの中は 3F 3F 3F 3F ... のようなデータが格納されていました。
LCMapString()を使えば、正しいデータを取得できるのでしょうか(理解不足です)。

ということで、もう少し調査してみます。

2005/7/2 (土) 15:43:46 げんた  
INCM1.23c
[3967] Re8:クリップボード UNICODE TEXT 対応
>下記の通りやってみたのですが、文字列の最後に空白が挿入されました。
>上記に関連しますが、SJIS変換後のデータとデータ長の整合が取れてないみたいです。

了解です.

ところで,私も試しにやってみたのですがCF_UNICODEの方には日本語が?????に変換されたものが入ってきました.
KDE/Cygwinを入れていたのでKonquerでCopyして貼り付けてみました.

>CF_OEMTEXTの中は 3F 3F 3F 3F
という話から察するに,これでも一応期待通りの動作と考えてよろしいですか?

2005/7/2 (土) 17:08:17 げんた  
INCM1.23c
[3968] Re9:クリップボード UNICODE TEXT 対応
>>CF_OEMTEXTの中は 3F 3F 3F 3F
読み返してみると,ASCIIは普通にコピーできていて今回のパッチで漢字もコピー可能になるはずだったのですね.
KDEのツールからコピーすると??になってしまうのは,CygwinではなくてKDEの問題でしょうか.
とりあえず取り込むだけ取り込んでおきます.

2005/7/2 (土) 18:43:56 もか 〔URL 
INCM1.23c
[3969] Re9:クリップボード UNICODE TEXT 対応
すでに新版リリースされてますが、ぶら下げときます。
>cmemBuf.SetData( lptstr, GlobalSize(lptstr) );
>cmemBuf.UnicodeToSJIS();

これだと、最後のNUL文字もコピーと変換に含まれますね。
あと、GlobalSizeはHGLOBALを引数に取るので
 cmemBuf.SetData( lptstr, GlobalSize(hglb) - sizeof(WCHAR) );
とすればよさそうですが、確保したサイズ=有効データとは限らない可能性もあるため
 cmemBuf.SetData( lptstr, wcslen(lpstr) * sizeof(WCHAR) );
のほうが個人的にはいいかなと思います。

Localeに関しては、
CF_TEXTにセットして、キーボードレイアウトが英語だと
  Unicode,OEM共に貼り付けはダメ。
OEMにセットして、キーボードレイアウトが英語だと
  Unicode,Text共に貼り付けはダメ。(sakura/キーボード英語でコピー、メモ帳貼り付け等)
Unicode,Textにセット、キーボードレイアウトが英語だと
  OEM共に貼り付けはダメ。(Mozillaからsakuraに貼り付けるパターン)
というように、コピーした側で、データを設定していないフォーマットは、
コピー側のキーボードレイアウトと連動している文字コード以外の文字が
基本的に化けるようです。
 ただしCF_TEXTにEUC-JPでデータをセットして、CF_OEM/CF_UNICODEが化けるのは、そもそもCF_TEXTに問題があるとしか言えません。

# 現行ログ以前は、INCMで拾えないので、過去ログ更新お願いしたいです。

2005/7/23 (土) 20:28:12 novice  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
[3991] Re8:クリップボード UNICODE TEXT 対応
▼ noviceさん
> ▼ げんたさん
> > UnicodeからSJISに変換する時にcmemUnicodeという一時変数で変換してからcmemBufにコピーしていますが,
> > cmemBufにUnicodeのまま設定してUnicodeToSJIS()を呼べばいいのでは?

> 下記の通りやってみたのですが、文字列の最後に空白が挿入されました。
>
> cmemBuf.SetData( lptstr, GlobalSize(lptstr) );
> cmemBuf.UnicodeToSJIS();


上記の処理でも動作するようにしました。
CMemory::MemUnicodeToSJIS()のところで、ワイド文字の終端まで変換するようにしています。

それと、間違って「#include "my_icmp.h"」をコメントアウトしてしまったので戻しました。

変更対象ファイル
ssrc_2005-07-20.tar.bz2

差分ファイル
diff_ssrc_2005-07-20.zip

INCM/CMT
Cyclamen v3.81
[ut:0.010][st:0.010]