◀ANSI版開発トップへ
  • 3934 クリップボード UNICODE TEXT 対応
    • 3935 Re:クリップボード UNICODE TEXT 対応
      • 3936 Re2:クリップボード UNICODE TEXT 対応
        • 3939 Re3:クリップボード UNICODE TEXT 対応
          • 3946 Re4:クリップボード UNICODE TEXT 対応
            • 3953 Re5:クリップボード UNICODE TEXT 対応
              • 3954 Re6:クリップボード UNICODE TEXT 対応
                • 3955 Re7:クリップボード UNICODE TEXT 対応
                  • 3956 Re8:クリップボード UNICODE TEXT 対応
              • 3963 Re6:クリップボード UNICODE TEXT 対応
                • 3965 Re7:クリップボード UNICODE TEXT 対応
                  • 3967 Re8:クリップボード UNICODE TEXT 対応
                    • 3968 Re9:クリップボード UNICODE TEXT 対応
                    • 3969 Re9:クリップボード UNICODE TEXT 対応
                  • 3991 Re8:クリップボード UNICODE TEXT 対応
  • [3934] クリップボード UNICODE TEXT 対応 novice 2005年05月28日 21:52

    「Cygwin/X」で「XWin.exe -clipboard」と起動後に、X上でテキストをコピーしてからサクラエディタに貼り付けると、「????」と表示されてしまうのを修正しました。

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

    差分ファイル
    diff_ssrc_2005-04-29.zip
    • [3935] Re:クリップボード UNICODE TEXT 対応 novice 2005年05月29日 14:41

      ▼ noviceさん
      > 「Cygwin/X」で「XWin.exe -clipboard」と起動後に、X上でテキストをコピーしてからサクラエディタに貼り付けると、「????」と表示されてしまうのを修正しました。

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

      差分ファイル
      diff_ssrc_2005-04-29a.zip
      • [3936] Re2:クリップボード UNICODE TEXT 対応 もか 2005年05月29日 19:56

        SAKURAClip
        CF_UNICODETEXT
        CF_OEMTEXT
        の順に優先して張り付けるんですよね。

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

        私のHPにも、[実験用]-[クリップボードとD&D周りの修正]
        というのを放置してあるのですが、これは実装がいまいちです。。。
        • [3939] Re3:クリップボード UNICODE TEXT 対応 novice 2005年06月01日 23:44

          ▼ もかさん
          > "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

          となってました。
          どっちがいいのか微妙なところです。
          • [3946] Re4:クリップボード UNICODE TEXT 対応 もか 2005年06月12日 22:29

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

            また最終的には、
            >>dev:4244 みくさん提案 クリップボード形式を指定して貼り付け
            のような機構を実装する以外に両方の問題を解決する方法はないと思っています。
            • [3953] Re5:クリップボード UNICODE TEXT 対応 novice 2005年06月18日 16:36

              ▼ もかさん
              > ちょっとwebで調べただけなので、外してるかもしれませんけど
              > 「Cygwin/X」に関して言えば、XwinClipのバグ・制限なのではないですか。
              ご指摘の通り、「XWin.exe」の変換に問題あるように思います。

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

              > また最終的には、
              > >>dev:4244 みくさん提案 クリップボード形式を指定して貼り付け
              > のような機構を実装する以外に両方の問題を解決する方法はないと思っています。
              Officeにも「編集」-「形式を選択して貼り付け」というのがあるので、サクラエディタで実装する場合、それと似たようなインタフェースにすれば、違和感なく使ってもらえるように思います。
              • [3954] Re6:クリップボード UNICODE TEXT 対応 げんた 2005年06月18日 16:52

                >特に反対意見がなければ、今回の機能をマージして頂ければと思います。
                ああ,タッチの差でリリースしてしまった.
                • [3955] Re7:クリップボード UNICODE TEXT 対応 Uchi 2005年06月18日 20:19

                  Sakura Editor を仕事で使用させてもらっています。
                  で一部バイナリなファイルなども扱うことがあるのですが、
                  そういったデータでもカット&ペーストで扱うことができなくなるのは非常に困ります。
                  >>dev:4244 みくさん提案 クリップボード形式を指定して貼り付け
                  を取り込むまでは仕様の変更は待ってもらえないでしょうか。
                  • [3956] Re8:クリップボード UNICODE TEXT 対応 もか 2005年06月18日 21:15

                    >で一部バイナリなファイルなども扱うことがあるのですが、
                    >そういったデータでもカット&ペーストで扱うことができなくなるのは非常に困ります。
                    補足説明しますと、サクラエディタからサクラエディタにカット&ペーストする場合は、Unicode対応しても従来通りのバイナリー形式が扱えます。
                    あと、現在の実装でも他のソフトウェアからのバイナリーデータを貼り付けるとナル文字以降が切れますので注意が必要です。
                     Uchiさんの場合は、前者だと思うのですが、他のソフトから貼り付けてるとなると、困りますね。
              • [3963] Re6:クリップボード UNICODE TEXT 対応 げんた 2005年06月27日 02:35

                2つほど質問です.

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

                SetDataSz()だと\0までを取り出しますが,Unicodeからの変換も含めてそれ以外の部分では長さを指定しているので\0を含んでいても処理できるように見えますから,ここで無理に\0までにしなくてもと思います.
                あと,SJISに変換できない文字列が入っているとそこはUnicodeのまま残ってしまうようなので,Unicode表現で0を含むものがあるとそこで文字列が切れてしまう可能性があるのでは?(変なものが入っている時点でそれ以降は正しく処理できない可能性が高いですが)
                もう1つ.一般掲示板3306(2003/09/18)でCF_LOCALEについて言及されていますが,これは今回の問題とは関係ないのでしょうか.
                • [3965] Re7:クリップボード UNICODE TEXT 対応 novice 2005年07月02日 13:23

                  ▼ げんたさん
                  > 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()を使えば、正しいデータを取得できるのでしょうか(理解不足です)。

                  ということで、もう少し調査してみます。
                  • [3967] Re8:クリップボード UNICODE TEXT 対応 げんた 2005年07月02日 15:43

                    >下記の通りやってみたのですが、文字列の最後に空白が挿入されました。
                    >上記に関連しますが、SJIS変換後のデータとデータ長の整合が取れてないみたいです。
                    了解です.

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

                    >CF_OEMTEXTの中は 3F 3F 3F 3F
                    という話から察するに,これでも一応期待通りの動作と考えてよろしいですか?
                    • [3968] Re9:クリップボード UNICODE TEXT 対応 げんた 2005年07月02日 17:08

                      >>CF_OEMTEXTの中は 3F 3F 3F 3F
                      読み返してみると,ASCIIは普通にコピーできていて今回のパッチで漢字もコピー可能になるはずだったのですね.
                      KDEのツールからコピーすると??になってしまうのは,CygwinではなくてKDEの問題でしょうか.
                      とりあえず取り込むだけ取り込んでおきます.
                    • [3969] Re9:クリップボード UNICODE TEXT 対応 もか 2005年07月02日 18:43

                      すでに新版リリースされてますが、ぶら下げときます。
                      >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で拾えないので、過去ログ更新お願いしたいです。
                  • [3991] Re8:クリップボード UNICODE TEXT 対応 novice 2005年07月23日 20:28

                    ▼ 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