クリップボード内の文字列の判別方法につNo.05675
Basil さん 07/11/04 14:17
 
お世話になります。Basilです。

VisualStudioIDEと同様の動作+αをさせるために
Copy,Cut,Pasteを全てマクロに置き換えて利用しています。
(状況・状態によって処理を変化させているだけですが。)

拡張Copy,拡張Cutの方は問題ないのですが、
拡張Pasteのマクロで
「クリップボード内の文字列がBOXでCopy,Cutされたかどうか」
が、判断できなくて微妙に困っています。
(強制的に通常動作を行う分岐がマクロにあり、運用で回避しています。)

「内部的な値を表現するキーワード」あたりに無いものかと
思いましたが、見当たりません。
マクロ内部で地味に判断するのでも構いませんので、
何か判別方法に「実は内部的な値が存在する・アイデア・既存の解決方法」がありま
したら、ご教示ください。

マクロ作成自体は問題ありませんので、アイデアだけで構いません。

[ ]
RE:05675 クリップボード内の文字列の判別No.05676
h-tom さん 07/11/04 15:22
 

h-tom です。

>Copy,Cut,Pasteを全てマクロに置き換えて利用しています。
ならば、iniファイルやレジストリに記録して、Paste時に読めばいいのでは?
複数のファイルを開いている場合は、色々と工夫しないと、怪しい動作になり
そうですが。

[ ]
RE:05676 クリップボード内の文字列の判別No.05677
Basil さん 07/11/04 16:18
 
Basilです。

>>Copy,Cut,Pasteを全てマクロに置き換えて利用しています。
>ならば、iniファイルやレジストリに記録して、Paste時に読めばいいのでは?

秀丸単体で使っている場合なら、それでもいいのですが

>複数のファイルを開いている場合は、色々と工夫しないと、怪しい動作になり
>そうですが。

秀丸上で複数のファイル開いている場合もそうですが、
他のアプリからコピーする場合も多々ありますので、
できれば、リアルタイムで現在のクリップボード内容を
判断したいと考えています。

ペースト時は、クリップボードが改行で終わっている場合なら
通常は行の途中にカーソルがある場合、その場所にペーストしますが、
1行は1行として丸ごとペーストするイメージで動作したりします。
ここら辺がVisualStudioIDE的なところ。

以前実験したときは、BOXコピーでのクリップボード内容も
全行改行しているようだったので、この判定だけでは無理だった記憶があります。

秀丸本体でもクリップボード内の文字列がBOXコピーされたかものか
どうかの判定は行っていると思うのですが、

リアルタイムで判定しているなら
・クリップボード内の文字列の入り方で判断している
・文字列ではない全く異なる値を見て判断している

リアルタイムで判定していないなら、BOXコピーフラグがあって
・BOXコピーされた場合フラグを立てる→コレを参照
・外部アプリでクリップボードが書き換えられたらフラグをクリア

等の処理をしている気がします。
内部にフラグがあるなら
「内部的な値を表現するキーワード」で見られると嬉しいんですけどね。<やんわり
と要望
同様なフラグはマクロでは立てられても、クリアできないので。

[ ]
RE:05677 クリップボード内の文字列の判別No.05678
Basil さん 07/11/04 16:30
 
Basilです。

h-tomさん、レスありがとうございました。
書き忘れました^^;

ついでに訂正w

>同様なフラグはマクロでは立てられても、クリアできないので。

同様のフラグは、マクロではiniファイルやレジストリを利用して、立てることは可
能ですが、クリアできないので。

ついでにネタ

私が単純なマクロを作るとき(キーの記録に毛が生えた程度の捨てマクロ)に面倒だ
と思うのが、
いちいちファイル保存しないマクロ内容が見えないところなんですが、
「キー操作をクリップボードにコピー」があってもいいような気がするんですが、ど
うですかね?
初心者にはうっかりクリップボードが変わったりして分かりづらかったりかもしれま
せんが。
「全部手打ちしなさいよ!」って言われると返す言葉は無いんですが^^

[ ]
RE:05677 クリップボード内の文字列の判別No.05679
IKKI さん 07/11/05 01:08
 
ユーザーの IKKI です。こんばんは。

クリップボードには同時に複数のフォーマットでデータを格納できます。
秀丸で BOX コピーすると、文字列が TEXT フォーマットで格納されると同時に
"BOX" という値が PRIVATE TEXT フォーマットで格納されます。

なので、 PRIVATE TEXT フォーマットで格納されている値を何らかの方法で
取得できればよさそうです。

 案1: 自分で DLL を作る

 案2: AutoHotKey を使う
 参考: http://d.hatena.ne.jp/eamat/20050920/p1

あるいは、原始的なアイディアとして

 案3: 一度貼り付けてみる

 IsBox:
 escape;
 ##orgx = x;  ##orgy = y;
 paste;
 ##box = (x == ##orgx && y == ##orgy);
 undo;
 moveto ##orgx, ##orgy;
 return ##box;

なんてのもアリかと思います。以上、ご参考までに…。

[ ]
RE:05679 クリップボード内の文字列の判別No.05680
Basil さん 07/11/06 09:48
 
おはようございます。Basilです。

IKKIさん、レスありがとうございました。

>クリップボードには同時に複数のフォーマットでデータを格納できます。

言われてみればその通りです。完全に頭にありませんでした。

>秀丸で BOX コピーすると、文字列が TEXT フォーマットで格納されると同時に
>"BOX" という値が PRIVATE TEXT フォーマットで格納されます。

XP使っていて初めてclipbrd.exe使いました。
中身確認できますね、基本的な確認方法を忘れています^^

>なので、 PRIVATE TEXT フォーマットで格納されている値を何らかの方法で
>取得できればよさそうです。

案3は盲点でした。とりあえず、案3で対応して、案1か案2最終的に何とかしよう
かと思います。
何せペーストなので速度が多少心配ですが、キー押しっぱなしで連続ペーストとかし
なければ、使えそうです。
DLLをロードしたりするオーバーヘッドを考えると案外、案3でも速いのかもしれま
せん。

解決法の糸口になりました。ありがとうございます。助かりました。

[ ]