マクロの getclipboard がへんですNo.01415
セキセイニャンコ さん 98/07/23 13:43
 
こんにちは、セキセイニャンコです。

getclipboard がへんです。少々こみ入ったマクロを作っている最中に、
どうもクリップボード関連の動作がへんなので、怪しい部分だけを残して
単純化してみました。以下のマクロを実行してみて下さい。

openfile "/h";
insert "It's Funny!";
selectall;
copy;
beginclipboardread;
$R = getclipboard;
poppaste;
setactivehidemaru 1;
closehidemaruforced 1;
beginclipboardread;
$B = getclipboard;
message $R+"/"+$B;

$B には、マクロ実行時のクリップボード内容の1行目が入ることを期待して
いますが、$R と同じもの(It's Funny! 固定)が入ってしまい、結果として
最後の表示が It's Funny!/It's Funny! となってしまいます。

なお、その直後には、キー操作で貼り付けを行うと、It's Funny! が出てきて
しまいます。クリップボードを空にしてから実行して頂くとよくわかりますが、
その場合マクロ実行直後にクリップボード履歴は空に見えるのに、貼り付けで
It's Funny! が出てきます。まるで $B = getclipboard が setclipboard $B の
ように働いてしまったかのようです。なおこの時でも、貼り付け+履歴戻しは、
なにも出てきませんし、その操作後は It's Funny! も出なくなります。

Win95 + Plus の環境下の Ver2.24 で、秀丸を常駐させていますが瞬間起動は
指定していません。

[ ]
RE:01415 マクロの getclipboard がへんNo.01416
noro さん 98/07/23 16:28
 
セキセイニャンコさんこんにちは(^^)noroです。

》getclipboard がへんです。少々こみ入ったマクロを作っている最中に、
 poppaste の問題ではないでしょうか?
 poppaste を、paste; と getcliphist 1; に変更すると、希望通りの動作を
するようです。


[ ]
RE:01416 マクロの getclipboard がへんNo.01418
番頭++ さん 98/07/23 17:54
 
> poppaste の問題ではないでしょうか?

Ver. 2.22 以前でも poppaste はうまくいきませんでしたです。
クリップボードの履歴は更新されるが、クリップボードはもとのまま ...

そこで、こんなコーディングにしました。回避策ですね ...

paste;
getcliphist 1; // 「クリップボード履歴」
if( ! result ){ setclipboard "";} // 「クリップボード履歴」
//R poppaste; // 「クリップボード履歴」

// test1.mac
clearcliphist;
setclipboard "1";
setclipboard "2";
setclipboard "3";
gofileend;
poppaste;
beginclipboardread;
$str = getclipboard;
message $str;
showcliphist;
undo;
endmacro;

// test2.mac
clearcliphist;
setclipboard "1";
setclipboard "2";
setclipboard "3";
gofileend;
paste;
getcliphist 1;
beginclipboardread;
$str = getclipboard;
message $str;
showcliphist;
undo;
endmacro;

[ ]
RE:01418 マクロの getclipboard がへんNo.01421
セキセイニャンコ さん 98/07/24 18:40
 
noro さん、番頭++さん、こんにちは。
素早いレスをありがとうございます m(__)m

回避策をお教え頂いたのですが、その状況の下クリップボードの
内容を読み込めないということの他に(クリップボード履歴では
見えないものの)、キー操作での貼り付けで不可思議な文字列が
貼り付けられてしまうという現象も問題でした。

ことろがお教え頂いた回避策を参考にしつつ、いろいろ試行錯誤を
繰り返すうち、問題の(後半)部分の beginclipboardread の直前に
getcliphist0 を行うと、なぜかその現象も起きなくなることを
発見しました。ただ、本当に回避できるのかどうかには疑わしい
面もあり(試行錯誤の最中に回避できない場合にも遭遇したなど)、
安心はできない状況です。

自作のマクロを暫く使っている間に、じきに回避策の有効性も確信
できるようになるかと思いますので、とりあえず様子見することに
致します。

なんにせよ、お教え頂いた回避策がたいへんに参考になりました。
どうも、ありがとうございました m(__)m。

[ ]
RE:01421 マクロの getclipboard がへんNo.01422
番頭++ さん 98/07/24 19:12
 
とすると ...

poppaste の仕様は 、
「クリップボードの履歴は更新するが、クリップボードはもとのままで更新しない ...」

クリップボードに最新の履歴を戻すには、
「getcliphist 0 を実行すること ...」

これが、本来の仕様ですか ??? > 秀丸担当 様

もし、そうだったら、ガーーーン ...

// test1.mac // original. 01418 98/07/23 17:54 番頭++
clearcliphist;
setclipboard "1";
setclipboard "2";
setclipboard "3";
gofileend;
poppaste;
getcliphist 0; // add. 01421 98/07/24 18:40 セキセイニャンコ さんの回避策
beginclipboardread;
$str = getclipboard;
message $str;
showcliphist;
undo;
endmacro;

[ ]
RE:01422 マクロの getclipboard がへんNo.01423
番頭++ さん 98/07/24 19:54
 
マクロのヘルプ では、
「 poppaste 貼り付け+履歴戻し」... 確かに現在のクリップボードの表現は無い ...

「 getcliphist は、パラメタとしてヒストリーの番号を指定してください。0が
最新の履歴、1が1つ前 ...」

popcliphist & paste and ... nothing ...

あたりだね 。。。

今年の初めに悩んだ数日間は 。。。move to Kioku and purge ...

[ ]
RE:01423 マクロの getclipboard がへんNo.01434
秀丸担当 さん 98/07/27 16:54
 
>poppaste の仕様は 、
>「クリップボードの履歴は更新するが、クリップボードはもとのままで更新しない
 ...」
>
>クリップボードに最新の履歴を戻すには、
>「getcliphist 0 を実行すること ...」
>
>これが、本来の仕様ですか ??? > 秀丸担当 様

ちょっと悩んでしまいましたが、仕様はそうです。
貼り付け+履歴戻しです。

[ ]
RE:01434 マクロの getclipboard がへんNo.01437
番頭++ さん 98/07/27 18:27
 
>>poppaste の仕様は 、
>>「クリップボードの履歴は更新するが、クリップボードはもとのままで更新しない
> ...」
>>
>>クリップボードに最新の履歴を戻すには、
>>「getcliphist 0 を実行すること ...」
>>
>>これが、本来の仕様ですか ??? > 秀丸担当 様
>
>ちょっと悩んでしまいましたが、仕様はそうです。
>貼り付け+履歴戻しです。

仕様と言われれば、その様に使用しますが ...

// test13.mac
clearcliphist;
setclipboard "1";
setclipboard "2";// push 1 回目
setclipboard "3";// push 2 回目
gofileend;
poppaste;
beginclipboardread;
$str = getclipboard;
message $str;// 3 です。
showcliphist;
endmacro;

// test12.mac
clearcliphist;
setclipboard "1";
setclipboard "2";
setclipboard "3";
gofileend;
poppaste;
poppaste;
beginclipboardread;
$str = getclipboard;
message $str;// 2 です。
showcliphist;
endmacro;

// test11.mac
clearcliphist;
setclipboard "1";
setclipboard "2";
setclipboard "3";
gofileend;
poppaste;
poppaste;
poppaste;
beginclipboardread;
$str = getclipboard;
message $str;// 1 です。
showcliphist;
endmacro;

// test23.mac
clearcliphist;
setclipboard "1";
setclipboard "2";
setclipboard "3";
gofileend;
poppaste;
getcliphist 0;
beginclipboardread;
$str = getclipboard;
message $str;// 2 です。
showcliphist;
endmacro;

// test22.mac
clearcliphist;
setclipboard "1";
setclipboard "2";
setclipboard "3";
gofileend;
poppaste;
getcliphist 0;
poppaste;
getcliphist 0;
beginclipboardread;
$str = getclipboard;
message $str;// 1 です。
showcliphist;
endmacro;

// test21.mac
clearcliphist;
setclipboard "1";
setclipboard "2";
setclipboard "3";
gofileend;
poppaste; // pop 1 回目
getcliphist 0;
message str(result);
poppaste; // pop 2 回目
getcliphist 0;
message str(result);
poppaste;// pop 3 回目
message str(result); // 1 でしょう
getcliphist 0;
message str(result); // 0 でしょう
beginclipboardread;
$str = getclipboard;
message $str;// 1 です。
showcliphist;
endmacro;

Loop をさせるマクロを書くと、なんとなくおかしな気がしますが 。。。
この辺で終わりにしましょう ...

[ ]