[#50363] [質問] Ruby socket.send でUDP Packet が出ない? ネットワーク環境によるものか? — <yamataka@...08.itscom.net>

山口と申します。

9 messages 2016/07/27

[ruby-list:50355] Re: [再]Re: TkDND での日本語名の扱い

From: Toshihiko Ichida <dogatana@...>
Date: 2016-07-12 10:53:06 UTC
List: ruby-list #50355
こんにちは、市田です。

On 2016/07/11 13:41, Hidetoshi NAGAI wrote:

> 添付されたように変更してしまうと,他の ?l
> (action, descriptions, source_types, modifiers, types) の処理も
> すべて置き変わってしまい不都合が出ます.

これはまずい場合が出てきそうですね。

> 識別文字を ?d などとして,KEY_TBL 登録を [?D, ?d, :data] とした上で

なるほど、そういう風にできるんですね。

> PROC_TBL に新たに [ ?d, ...処理... ] を追加するという形は可能かと思いますが,
> 「データはファイルパスとは限らない」とすると,望ましくはなさそうです.

データはファイルパスとは限らないですね。
実際、text/plain, text/uri-list の両方とも同じ処理が呼ばれていました。

また上の
> PROC_TBL での ?s の処理が TkComm.method(:string) ですから,
も text/plain の場合に "{abc}" を食べさせると、{}が剥ぎ取られてabcのみ
になってしまうので、それはそれでよろしくなさそうです。

> 目的に合わせて設定できるようにするのであれば,
> 処理型 ?d として PROC_TBL に登録する処理の中で,
> ユーザが定義したハンドラを呼び出せるようにするという対応はいかがでしょうか?
> 従来との互換を維持するのであれば,デフォルトのハンドラの処理を
> TkComm.list を呼ぶ形にしておくことで可能です.

それだとうまくいきそうですね。空白や、{ }がエスケープされていたりするの
をハンドラ側でTkCommのメソッドで処理することになりますが、汎用性は高いと
思います。

期待としては
1) text/plain の場合文字列が取得できる
2) text/uri-list の場合文字列(ファイル名)のArrayが取得できる
なので、この type 情報が、解釈の際に利用することができれば、Dropされた文
字列が、単なる文字列と、リストを表す文字列かの判断ができ、利用する側とし
ては便利です。

わからないなりに試しましたが、tkdnd.rb だけではやはり難しく、tcl 部分
に手を入れてなんとかなりそうなところまでは来ました。
ただしこれはこれはでTkDNDを利用する他の言語(Python?)に影響が出てしまうで
しょうし、解決策としては今ひとつです。

結局、利用する側でハンドラを用意するという永井さんの案が一番汎用的に解決
できそうに思います。

> 私が TkDND をよく理解できていないのが悪いのですが,
> data タイプの値は,1次元リスト (埋め込みのリスト構造なし) と
> 断言しても問題なしでしょうか.
> そうであるなら,KEY_TBL の :data の ?l を ?L に変更して,
> simplelist を呼ぶようにした方がいいのでしょうね.

1次元リストというのがよくわかりませんが、上の書いたとおり、
text/plain
text/uri-list
で同じ処理が呼ばれるというのは要考慮と考えます。

一律 simplelist を呼ぶようにすると、ファイル名の場合は良いのですが、
text/plain の場合、テキストに含まれる空白でsplitされた Array が返ってき
てうまくいかないです。

--
市田

In This Thread