えらく前にも調べたような。
メモを取っても、継続的に残さないと意味がありませんな。
リッチテキストフォーマット(RTF)の中身はただのエスケープされたテキストです。
例えば、ワードパッドの文書をテキストディタで開くとこうなってます。
{\rtf1\ansi\ansicpg932\deff0\deflang1033\deflangfe1041{\fonttbl{\f0\fnil\fprq1\fcharset128 \'82\'6c\'82\'72 \'83\'53\'83\'56\'83\'62\'83\'4e;}{\f1\froman\fprq1\fcharset128 \'82\'6c\'82\'72 \'82\'6f\'83\'53\'83\'56\'83\'62\'83\'4e;}}
{\colortbl ;\red0\green0\blue255;\red0\green128\blue0;}
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\cf1\lang1041\f0\fs20 static\cf0 PCHAR CodeBuff; \cf2 /* Character code buffer */\par
\cf1 static\cf0 PCHAR AttrBuff; \cf2 /* Attribute buffer */\par
\cf1 static\cf0 PCHAR AttrBuff2; \cf2 /* Color attr buffer */\par
\cf1 static\cf0 PCHAR AttrBuffFG; \cf2 /* Foreground color attr buffer */\par
\cf1 static\cf0 PCHAR AttrBuffBG; \cf2 /* Background color attr buffer */\par
\cf0\f1\par
}
先日VisualStudioのソースエディタからコピペしたコード片をワードパッドの文書に貼り付けて保存した*.rtfファイルをテキストエディタで開いたものです。
しかしソースエディタからコード片をテキストエディタに直接コピペすると、プレーンなテキストになります。
static PCHAR CodeBuff; /* Character code buffer */
static PCHAR AttrBuff; /* Attribute buffer */
static PCHAR AttrBuff2; /* Color attr buffer */
static PCHAR AttrBuffFG; /* Foreground color attr buffer */
static PCHAR AttrBuffBG; /* Background color attr buffer */
この当たり前の仕組みを思い出すのに半日も検索地獄めぐりをしてしまいました。断片的な情報はあるのですが、そのものずばりの解説がなかなか見つかりませんでした。
How To Add Custom Table to the Clipboard to be Pasted into Word
http://support.microsoft.com/kb/216676/en-us/
ポイントは以下の箇所です。クリップボードへの
・・・
EmptyClipboard();
・・・
// Put data on the clipboard!
::SetClipboardData(cf, hText);
・・・
// Put data on the clipboard as CF_TEXT
::SetClipboardData(CF_TEXT, hText);
・・・
クリップボードには、異なるフォーマットで複数のデータを登録できるのでした。
# 受け取る側は対応しているフォーマットのデータを取り出せばよい
なのでterateremの場合、すでにあるCF_TEXTでの登録はそのままで、RTFのデータの登録を追加すれば期待の動作をさせることができそうです。
クリップボードからteratermへ貼り付ける際にはCF_TEXTしか受け取らないようです。端末上でコピーした書式付文字列のエスケープ文字が端末に貼り付いてぐちゃぐちゃになるというようなことは余計な心配ということでしょう。
リンク:
Rich Text Format (RTF) Specification, version 1.6
http://msdn.microsoft.com/en-us/library/aa140277%28office.10%29.aspx
コメント