なひです.

> From: 中村暁史 Nakamura Akifumi [mailto:BXQ04723 / nifty.ne.jp]
> Sent: Tuesday, December 14, 1999 1:57 AM

> Clipboardってデータのtypeを「登録」するわけですね。
> delphiのClipboardオブジェクトのソースの感じからして、適当な名前で
> 登録をかけるか、登録済みの名前を流用するか、どっちかすれば
> 任意のバイト列についてClipboardが扱えるんでわ。

大元の話をちゃんと把握してませんでしたが(すいません),
新たなフォーマット(中村暁史さん書かれたところのtype?)として
Rubyのオブジェクトフォーマットを登録,ということなんでしたっけ?

テキストフォーマット指定で取り出された時用にはinspectしたものを登録し,
ビットマップ形式用にクラス図ビットマップを登録し(やりすぎ),
Rubyフォーマット用にはMarshal#dump.

> openの第一引数ってファイル名、つまりいわば「インスタンス名」ですよね。
> インスタンス名必須のIOがアリなら、クラス(type)名必須のIOもアリでも
> 悪いと言える理由はないように思います。

  m1 = MSWinClipboard::open( :CF_TEXT, "w" )
  m1.write( anObject.inspect )
  m1.close()
  m2 = MSWinClipboard::open( :CF_RUBYOBJECT, "w" )
  m2.write( anObject.dump )
  m2.close()
  m3 = MSWinClipboard::open( :CF_TEXT, "r" )
  m3.read()
  m3.close()

うーん,やっぱりなんか気持ち悪い.

  m = MSWinClipboard::open()
  m.set( { :CF_TEXT => anObject.inspect, :CF_RUBYOBJECT => anObject.dump } )
  m.get( :CF_TEXT )
  m.get( :CF_RUBYOBJECT )
  m.close()

  あるいは

  MSWinClipboard::open() do |m|
    m.set( { :CF_TEXT => anObject.inspect, :CF_RUBYOBJECT => anObject.dump } )
    m.get( :CF_TEXT )
    m.get( :CF_RUBYOBJECT )
  end

が自然に見えるのは,染まってるのかな...

> Clipboardにインスタンス名がない(つまり一個しかない)のは
> 悲しいがそれはさておき。

複数あったらただの共有メモリかも.
共有メモリに「OSベースで標準化されたフォーマット」
があっても悪くないですが,次々に増えていく異種フォーマットは,
「OSベンダー」にはコントロールしきれないでしょう.:-)