ポップしないpoppaste??No.06904
かかし さん 00/11/28 18:30
 
かかしです、こんにちは。

あるマクロを作っているのですが、選択範囲のデータを
マクロの中で、別のファイルにコピーして使っています。

マクロが終わった後そのときコピーしたものを
忘れさせようと思い、poppasteを使用しているのですが
popしません。

例えば、
--
if(!selecting){
message "選択して実行して下さい。";
endmacro;
}
copy;
escape;
poppaste;
--
というマクロがあるとします。
で、まず、「しゃけ」をコピーします。
次に「まぐろ」を選択して、実行すると、「まぐろ」がペーストされます。

マクロの実行後、ペーストした時、「しゃけ」が出て欲しいのですが、
「まぐろ」がクリップボードに残ってしまいます。

ご教授下さるようお願いいたします。

秀丸3.06Beta3です。

---かかし

[ ]
RE:06904 ポップしないpoppaste??No.06910
番頭++ さん 00/11/29 10:52
 
かなり前に poppaste の話をここでしました。
poppaste で検索してみてはいかがですか ???
自宅にあるかも、過去のログ ...

[ ]
RE:06910 ポップしないpoppaste??No.06911
番頭++ さん 00/11/29 10:54
 
>かなり前に poppaste の話をここでしました。
>poppaste で検索してみてはいかがですか ???

消えてるみたいです。

>自宅にあるかも、過去のログ ...

[ ]
RE:06911 ポップしないpoppaste??No.06912
ENCODINGSHIFTJIS さん 00/11/29 10:59
 
copy の動作
 クリップボードにcopy & 履歴の先頭にpush
poppaste の動作
 履歴の先頭からpasteしてpop & クリップボードはそのまま

二つの記憶場所 クリップボードと履歴の先頭は
copy直後は一致するがpoppaste後は一致しなくなるでは。
動作の解釈では、それが使いやすいかはわからないが。
秀丸3.06β3


 

[ ]
RE:06912 ポップしないpoppaste??No.06913
ENCODINGSHIFTJIS さん 00/11/29 11:03
 
ついでに
クリップボード履歴面は同時に2面開ける、
A)常駐タスクバーアイコン
B)編集面から メニュー>編集>クリップボード履歴

Aはフリーだが、Bは編集面と強く結合している。


[ ]
RE:06912 ポップしないpoppaste??No.06914
かかし さん 00/11/29 11:49
 
ENCODINGSHIFTJIFさん、番頭++さん、ありがとうございます。

かかしです。

私のメーラにも、過去ログが残っていませんでした。
ネットに探しに行くか・・・。

>copy の動作
> クリップボードにcopy & 履歴の先頭にpush
>poppaste の動作
> 履歴の先頭からpasteしてpop & クリップボードはそのまま

1、「1」をcopy
2、「2」をcopy
3、張り付け+履歴戻し--->「2」がペーストされる。
4、張り付け------------->「2」がペーストされる。

3の代わりに、
3'、張り付け+履歴戻し--->「1」がペーストされる。
4、張り付け-------------->「1」がペーストされる。

マクロで、クリップボードを使用した時に、
そのクリップボードの情報を忘れるために
poppasteは使えないということが分かりました。

ちょっと残念。

---かかし

[ ]
RE:06911 これにコメントを付けないでくだNo.06915
番頭++ さん 00/11/29 12:34
 
>>自宅にあるかも、過去のログ ...

あったのですが。勘違いかも ...

これにコメントを付けないでください。後で消します。
==================================================

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;

01423 98/07/24 19:54 番頭++

マクロのヘルプ では、
「 poppaste 貼り付け+履歴戻し」... 確かに現在のクリップボードの表現は無い ...

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

popcliphist & paste and ... nothing ...

あたりだね 。。。

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


01434 98/07/27 16:54 秀丸担当

>poppaste の仕様は 、
>「クリップボードの履歴は更新するが、クリップボードはもとのままで更新しない
...」
>
>クリップボードに最新の履歴を戻すには、
>「getcliphist 0 を実行すること ...」
>
>これが、本来の仕様ですか ??? > 秀丸担当 様

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

1442 98/07/28 10:14 番頭++  poppaste の動き、考察ですね ...

紛らわしい発言をしてきたのでまとめておきます。ただし poppaste に興味のな
い方はこの発言を読まない事をお勧めします、余計に「紛らわしく」なってきま
す。

ヘルプには、「貼り付け+履歴戻し」にこの様な説明があります。

> 貼り付けを実行してからクリップボード履歴をひとつ前に戻します。このコマ
>ンドは,「コピー」または「切り抜き」コマンドを連続して実行することとセッ
>トで利用することを想定しています。

> 例えば,あるファイルの中から必要とする各部分だけを別のファイルに移動さ
>せたい場合に,まず「切り抜き」コマンドを連続実行して最初に全部切り抜いて
>しまい,あとで「貼り付け+履歴戻し」コマンドを連続実行すればまとめて移動
>することができます。

なるほど便利な操作です。VZ の頃はスタック的な考えだった記憶があります。

これをマクロで可能にするのが、poppaste みたいです。マクロの考え(世界)で
はクリップボードの履歴は 0 から n-1 個あります。 0 からなんです、通常に
「クリップボードの履歴」を見ると 1 から n 個あります。

copy, cut, setclipboard 等はクリップボードにデータを入れると同時に、クリ
ップボードの履歴 0 にもデータを入れます。クリップボード履歴のプッシュ
(push) も行ないます。つまりこれらの処理では、クリップボードと履歴 0 は同
期が取れていることになります。

poppaste を実行すると、「貼り付けと履歴戻し」の操作が行われますが、履歴
戻しは履歴 0 からクリップボードに対しても行われます。cut 等を数回繰り返
した後の poppaste 実行後は、クリップボードと履歴 0 は同期が取れていない
ことになります。

明示的に getcliphist 0; で同期を取ることも可能です。同じデータを、その後
は paste しないこと(目的)が前提です。マクロの作者の思惑でコードする事に
なります。

今回、あちきの勘違いは、pop とは以前のデータを取り戻すと思い込んだことで
す。poppaste の機能後は、その paste のデータを保持すべきでしょう。当たり
前の仕様です。ですから pop clip hist (n) & paste のような動きとなります。

次の(操作) poppaste または paste を考慮して、同期が一つずれるんです。
あちきは、こんな仕様だと理解しています ...


01444 98/07/28 12:57 セキセイニャンコ

番頭++ さん、いつもお世話になります m(_ _)m

番頭++ さんのご発言が、どうも私には理解できないようです。
行きがかり上^^;、もう少しご説明頂けると、たいへんありがたいの
ですが... m(_ _)m

ええと、逆に、私の現状の理解では、この問題は単に秀丸の単純な
バグと思っています。回避方法は複雑ですし、現象は少々混乱して
いますが、バグであるということ自体は単純なことのように思われる
のです。

試しにクリップボード履歴の「消去」で、先頭のものを消去してみて
下さい。この操作を行っても、貼り付け操作で貼り付くのは、消去
した筈の文字列です。これは、マクロの仕様としての強引な理解は
不可能なことではないかと感じます。

なお、履歴の取り出しや貼り付け+履歴戻しは、期待の動作を行い
ます(クリップボード履歴と操作で貼り付く文字列は一致している)。
マクロの場合には逆に poppaste(貼り付け+履歴戻し)で問題が
起きるわけで、事情は逆ですが、クリップボード履歴で表示される
状態と、実際に貼り付けられる文字列の不一致という点は同じです。


01445 98/07/28 15:16 番頭++

VZ の編集をご存知でしょうか、(言語の)ソースの並べ替え(編集)は削除(Del.)
によるスタックへの push と挿入(Ins.)による pop で行なっていました。これ
に慣れてしまうと「秀丸エディタ」とか Windows の cut & paste によるソース
の並べ替えには違和感を感じました、私はそうでした。

ここで言う push, pop は一般的なコンピュータ用語のスタックオペレーション
です。

クリップボードの履歴が何時、いつどのような経緯で出来たのかは分かりません
が。クリップボードの履歴をスタックに見立てて並べ替えを行ないたいと考える
と、cut; でデータを push することになります。ところが「秀丸エディタ」に
は VZ の挿入(Ins.)の機能はありません。Windows の標準は cut & pasteです。
挿入(Ins.)はスタックからデータを pop しながら挿入を繰り返します。ところ
が paste; には、再度 paste; できる、言い換えれば、履歴を残すと言う
Windows の標準化が付きまといます。

もし誰かが VZ のような並べ替えの機能を希望したら、(その根拠は RE1442 の
ヘルプを見て下さい) 何らかの新しい操作を作ることになります。「貼り付け+
履歴戻し」がその機能ではないかと思いました。poppaste; はそのマクロでしょ
う。「秀丸エディタ」の機能はキーに割り当てる単一操作になっています。

その poppaste; はこんな動きに見えてきます。cut; はクリップボードの履歴を
push してクリップボード及び履歴 0 にデータをいれる、poppaste; はクリップ
ボード履歴を pop して、クリップボードからデータを paste; する。履歴 0 を
クリップボードにいれた後で paste; しているように見えてきます。これにより
同じデータを paste; 出来ると言う標準化も保たれ、次の poppaste; への準備
も出来たことになります。==> test41.mac を参照

ただこの時点で、履歴 0 とクリップボードは不一致と言う矛盾が出てきます。

getcliphist 0; で同期を取るとは push を完了して、履歴 0 とクリップボード
の内容を一致させることになるわけです。

// test1.mac // original. RE:01418
clearcliphist;
setclipboard "1"; setclipboard "2"; setclipboard "3";
gofileend;
poppaste;
getcliphist 0; // add. RE:01421 同期をとる。==> clipboard に複写
beginclipboardread;
$str = getclipboard;
message $str;
showcliphist;
endmacro;

次のマクロを実行すると、

// test41.mac
clearcliphist;
setclipboard "1"; setclipboard "2";
clearcliphist;
// この時点ではクリップボードだけは 2
// 履歴 0 は 無し
// 履歴 1 は 無し
gofileend;
paste; // 2 がクリップボードから paste; される
poppaste; // 何も paste; されない、クリップボードは空になる
message str(result); // 1 ???
endmacro;

と言うことは poppaste; は pop cliphist アンド paste; に似ている。
この結果は操作でも同じです。

マクロだけを考えると popcliphist; と paste; でもよいのですが、
「秀丸エディタ」の機能はキーに割り当てる単一操作になっています。
そうでないと不便でしょう。

履歴 0 は poppaste; の連続操作に使われるワークエリアにも見えてきます。

paste; は再度実行しても同じデータを paste; する義務があります。
poppaste; は連続操作に耐える義務があります。次 poppaste; の準備が必要です。
履歴 0 とクリップボードの矛盾はここでおきます。

バグと言えばその様な気がしますが、
「仕様」だと言われると返す言葉がありません。

p.s. クリップボードにゴミが入るのは、以前あちきも経験しましたが再現出来
ません。これが何のバグなのか判らない状況です。


01446 98/07/28 16:56 セキセイニャンコ

番頭++さん、こんにちは。早速のコメント、ありがとうございます。

番頭++さんのおしゃることは、一応理解できたように思います。
同じことかどうか自信がありませんが、おかげさまで私も poppaste の
動作に、ある思い込みをしていたことに気づきました。

>今回、あちきの勘違いは、pop とは以前のデータを取り戻すと思い込んだことで
>す。poppaste の機能後は、その paste のデータを保持すべきでしょう。当たり
>前の仕様です。ですから pop clip hist (n) & paste のような動きとなります。

私も、poppaste というのは、クリップボードをスタックと見立てた場合、
そのスタックトップを paste すると同時に、スタックポインタを動かして
paste した 内容自体はクリップボードから捨て去るのだと思っていました。

ところが、キー操作で試してみるとそうではなくて、poppaste した内容は
依然クリップボードに残っていて(でも履歴からは消えている)、もう一度
poppaste してはじめて捨てられるもののようです。

paste の連続、あるいは poppaste の連続の操作をしている限り、どちらでも
変わりはないのですが、これらを混在して使用すると違いが出るわけですね。

ただ、番頭++さんは、それをそれでも仕様であると理解を示しておられますが、
少なくとも私には信じられない仕様です。ことによると、Windows API 側にも
遠因があるのかもしれませんが、少なくとも、クリップボードの最大の用途は
カット&ペーストのためのものですから、クリップボード履歴の先頭の内容と
いうのは、貼り付け及びマクロの paste した時に出てくるものでなければ
なりません。これがずれる場合があるというのは、まず、バグであると言って
良いと思います。

また、その点を除いてもけっして良い仕様ではありませんね。

しかし、特にマクロに関する部分では、仕様を変えようとすると従来との互換を
失うわけですから、容易には変えられないことは理解できます。poppaste を
現状の仕様で置いておかねばならないならば、せめて pastepop(paste してから
pop する、即ちスタックトップは捨て去る)を用意して頂きたいものです。なお
マクロに関しては本当はそれよりも、単に pop だけの方が有用だと思います。


[ ]
RE:06904 ポップしないpoppaste??No.06917
yoshi223 さん 00/11/29 12:42
 
マクロ作者会議室の
 00821 99/11/05 21:42  クリップボード履歴の消去
から始まるスレッドはどうでしょう?
ENCODESHIFTJISさんがレスつけてますが...

私はこれを参考にしてレジストリをいじって
マクロ中で履歴を残さないようにしてます.

[ ]
RE:06917 ポップしないpoppaste??No.06919
yoshi223 さん 00/11/29 12:45
 
>ENCODESHIFTJISさんがレスつけてますが...
ごめんなさい.名前間違えてしまいました.

[ ]
RE:06911 ポップしないpoppaste??No.06920
かかし さん 00/11/29 13:22
 
かかしです、こんにちは。

番頭++さん、ありがとうございます。
大変参考になる過去ログの抜粋でした。

yoshi223さん、対応策に関しての参考ログのご教授ありがとうございます。

>>自宅にあるかも、過去のログ ...

で、いくつか、コメントを付けたいのですが、
セキセイニャンコさんに、無断での引用お許し下さい。

>01446 98/07/28 16:56 セキセイニャンコ

>>今回、あちきの勘違いは、pop とは以前のデータを取り戻すと思い込んだことで
>>す。poppaste の機能後は、その paste のデータを保持すべきでしょう。当たり
>>前の仕様です。ですから pop clip hist (n) & paste のような動きとなります。
>
>私も、poppaste というのは、クリップボードをスタックと見立てた場合、
>そのスタックトップを paste すると同時に、スタックポインタを動かして
>paste した 内容自体はクリップボードから捨て去るのだと思っていました。

これは、私も勘違いをしていた点です。

>ところが、キー操作で試してみるとそうではなくて、poppaste した内容は
>依然クリップボードに残っていて(でも履歴からは消えている)、もう一度
>poppaste してはじめて捨てられるもののようです。

結果を見るとそのようですね。

>ただ、番頭++さんは、それをそれでも仕様であると理解を示しておられますが、
>少なくとも私には信じられない仕様です。ことによると、Windows API 側にも
>遠因があるのかもしれませんが、少なくとも、クリップボードの最大の用途は
>カット&ペーストのためのものですから、クリップボード履歴の先頭の内容と
>いうのは、貼り付け及びマクロの paste した時に出てくるものでなければ
>なりません。これがずれる場合があるというのは、まず、バグであると言って
>良いと思います。

と、わたしも同意見なのですが、昔からの「仕様」と決まっていて、すでに長い年月を
経ている(1998年のログだし・・・)ようですし、poppasteに関しては使い方を
気を付けるように致します。

で、クリップボードの履歴消去に関しては、別の方法で対処することに致します。
ありがとうございました。

---かかし

[ ]
RE:06913 ポップしないpoppaste??No.06921
ENCODINGSHIFTJIS さん 00/11/29 13:55
 
pastepop を追加してクリップボード=履歴先頭 の同期が実現できると
わかりやすいかも。
paste : クリップボードから編集面に貼り付け
pop   :  履歴pop & {新しい先頭をクリップボードにも転送}

現状の poppaste は
pop : 履歴先頭をクリップボードに転送 & 履歴pop
paste : 前記と同じ
なのですね


[ ]