クリップボード履歴の消去No.00821
MoW さん 99/11/05 21:42
 
たいした事ではないので,お暇な方がいましたらお答え頂けると幸いです。

選択範囲を cut し,その後 paste ではなく,1行ずつ修正しながら insert文
で文字列を挿入するマクロを作っています。

そのマクロの最後で,クリップボード履歴をマクロ起動前の状態に復元してお
いてあげたいのですが,履歴を1つだけ消去するような文はないのでしょうか?
clearcliphist文を使用すると,全消去されてしまいますし・・・。

    poppaste;
    undo;

または,

    getcliphist 1;

とするしかないのでしょうか?

[ ]
RE:00821 クリップボード履歴の消去No.00827
ENCODINGSHIFTJIS さん 99/11/09 14:47
 
>そのマクロの最後で,クリップボード履歴をマクロ起動前の状態に復元してお
>いてあげたいのですが,履歴を1つだけ消去するような文はないのでしょうか?

//cut;が多数行な時はそうかもしれない。
//表と裏で共用する物の扱いは難しい。
// (データ処理では気にしないが)
// クリップボード履歴のダイアログには消去はあるが
// コマンド一覧には無い。

openfile "/h";poppaste;quit;// 履歴を捨てるための編集画面

// 最後にしかできない。画面戻りは書くのが面倒くさい
// 早くはない。disabledraw;中にpoppaste;undo;のほうが早いはず
// 履歴を捨てたり作業するだけの為に開きぱなし画面を置けば
// いくぶん早くなるかな?作業変数扱いの編集画面
// setwindowpos cxworkarea-222,0,222,22;


[ ]
RE:00827 クリップボード履歴の消去No.00828
MoW さん 99/11/11 00:32
 
ENCODINGSHIFTJISさん、どうもです。

>// クリップボード履歴のダイアログには消去はあるが
>// コマンド一覧には無い。

やっぱり無いですか。
とりあえずは,getcliphist 1; で対処する事にしました。
次のバージョンに期待するしかないですね。

どうもありがとうございました。

[ ]
RE:00828 クリップボード履歴の消去No.00829
ENCODINGSHIFTJIS さん 99/11/11 10:57
 
>>// クリップボード履歴のダイアログには消去はあるが
>>// コマンド一覧には無い。

履歴は秀丸でなく常駐秀丸管理の扱いなのでマクロが届きにくい?

オマケとして、cliphist の一時停止・再開はレジストリ操作かな?
マクロ内で自由にcut;copy;できる。

しかし履歴の1番は必ず現クリップボードになっているから
getcliphist 1;とか、setclipborad ""; でマクロの足跡を
消さないと。(データ処理では気にした事は無いけど)
動作の痕跡を綺麗にしたマクロは難しい、それ以上にエディタ
の実装も難しい。やたら内部を公開するとエディタ作りの仕様が
固定化して改善の自由度が少なくなるしバランスは微妙。

以下のマクロも現秀丸の実装依存でしょう。

openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
if(!result){beep;endmacro; }
writeregnum "ClipHist",0;// クリップボード履歴を取らない。
closereg;envchanged;

numの値を 0x64 にすると 100k まで履歴を取るになるらしい。

<end/>


[ ]
RE:00829 クリップボード履歴の消去No.00894
ENCODINGSHIFTJIS さん 99/12/06 13:20
 
// クリップボード履歴のダイアログには消去はあるが
// コマンド一覧には無い。
実用性はともかく SendKeys が使える。

// PopClip.mac
run "wscript.exe PopClip.JS "+filename;endmacro;

// PopClip.js
// クリップボード履歴 POP
// 外部から key 送りなので実装依存で間接的。
  var WSh =new ActiveXObject("WScript.Shell");
// アクティブ画面に Key 送り。
// 秀丸のタイトルは AppActivate 向きでない。
WSh.AppActivate(WScript.Arguments(0));// 重複はしないと思うけど
WSh.SendKeys("%EH");
WScript.Sleep(999);// 時間設定が微妙。 WSH2.0
WSh.SendKeys("%E%C");
// マウスしか利かないボタンは操作できない。
// 処理が未完了のうちに次を送ると後は全滅。

実用性はレジストリEnv のクリップボード履歴数を0にしてenvchanged;
マクロ実行、クリップボードを空にして、履歴数戻し。
のほうが大量cut&pasteに向く。

><end/>

[ ]