disablehistoryで禁止した項目の解除No.31595
K'zawa さん 12/10/16 14:24
 
こんにちは、K'zawaです。

ヘルプにはないですが、「disablehistory 0;」とすると禁止の解除ができてし
まいますが、これは仕様なんでしょうか?それとも想定外の使い方なんでしょう
か?
disableなのに解除していいのかとも思いますし(笑)

具体的には、クリップボード履歴を原則禁止しつつ、大事な値だけは入れておこ
うと思ったのですが、enablehistoryはないし、どうしたものかと思って調べて
みたら、引数で指定したものは禁止、指定されてないものは解除していたので、
0もあるのかなと。

しかし、

disablehistory 0x40;

disablehistory 0;
setclipboard "hoge";
disablehistory 0x40;


のように、解除してクリップボード系文を実行し、すぐにまた禁止すると、履歴
には入らないです。


[ ]
RE:31595 disablehistoryで禁止した項目のNo.31599
秀まるお2 さん 12/10/16 17:35
 
 調べてみたんですが、たしかにdisablehistoryとsetclipboardを組み合わせる
と、期待通りにいかないことが多いです。

 これの根本的な原因は、クリップボード履歴を取ってるのが常駐秀丸で、マク
ロを実行してる秀丸とは別プロセスで、基本的には非同期で(独立したCPU単位
で)動いてることが原因なります。なので、ちょっと解決するのが難しいです。

 わかりやすい例だと、

    disablehistory 0x40;
    setclipboard "a";
    setclipboard "b";
    setclipboard "c";
    endmacro;

 とやっただけでも、クリップボード履歴に"c"が入ってしまうことが多いです。
これはなぜかというと、"c"をクリップボードに入れた直後にマクロが終了して
しまうので、そのタイミングでdisablehistoryしてたのがクリアされ、そのクリ
アされた後にクリップボードの更新通知が常駐秀丸に届いてしまい、そのタイミ
ングでは既にマクロが終了してるので通常のクリップボードの更新の通知だと思
って履歴に入れてしまうようです。

 これの問題を解決するには、「disablehistotory 0x40」を実行してる最中で
も、とにかく秀丸マクロでクリップボードを書き換えたら、常駐秀丸側に更新の
通知が届くまでウェイトするような処理を入れてやるしか無いです。

 とりあえずそういう風に修正予定とさせていただきつつ、現状では
disablehistoryで完全に履歴ON/OFFがコントロール出来ないケースがあるという
前提で使っていただくしか無いです。

 とりあえず、この問題への対処も一筋縄でいかなそうなので、V8.22β1の次の
V8.22β2の方で対処予定とさせていただきます。少々お待ちください。

[ ]
RE:31599 disablehistoryで禁止した項目のNo.31601
K'zawa さん 12/10/16 20:07
 
秀まるおさん、こんにちは。
K'zawaです。

> これの問題を解決するには、「disablehistotory 0x40」を実行してる最中で
>も、とにかく秀丸マクロでクリップボードを書き換えたら、常駐秀丸側に更新の
>通知が届くまでウェイトするような処理を入れてやるしか無いです。
>
> とりあえずそういう風に修正予定とさせていただきつつ、現状では
>disablehistoryで完全に履歴ON/OFFがコントロール出来ないケースがあるという
>前提で使っていただくしか無いです。
>
> とりあえず、この問題への対処も一筋縄でいかなそうなので、V8.22β1の次の
>V8.22β2の方で対処予定とさせていただきます。少々お待ちください。

わかりました。
ところで、disableだけどON/OFF可って方向でいくのですか?(どっちでもよい
ですが)

[ ]
RE:31601 disablehistoryで禁止した項目のNo.31604
秀まるお2 さん 12/10/17 11:48
 
> ところで、disableだけどON/OFF可って方向でいくのですか?(どっちでもよい
> ですが)

 これ自体は現状そういう仕様になってしまてるようなので、そういう仕様のま
までお願いします。

 ちなみにV8.22β1でまずいレベルダウンのバグを出してしまったので、この件
はまだ手つかずの状態で、V8.22β2をアップロードさせていただきます。

[ ]