一括表示

− 野ざらし言 −

[3349] 文字列の選択複写

としき 2009/06/10(Wed) 22:24
http://www.hinocatv.ne.jp/~toshiki/
Vzには文字列の複写というコマンドがあります。
標準のキーアサインてだと ^QI。
これがコマンドラインでも有効だという事をつい最近知りました。

そこで、質問。
標準で ^KA にアサインされている文字列の選択複写なんですが、これはコマ
ンドラインでは効かないようです。そこで、これをコマンドラインでも可能にする
既存のマクロってありませんでしょうか。ウィンドウを出す必要があるから、
もしかして難しいのかな。

ご存知の方がいらっしゃったらご教示ください。

[3350] Re: 文字列の選択複写

めざら 2009/06/11(Thu) 07:57
[3349]へのコメント http://homepage3.nifty.com/mezala/
次のコードで実現できると思います。通勤電車からなので、細かいチェックはしていません。

mx+, pw[=ps, &g("Paste",64) &?("%s",pw) pw], mx-,

あとは&g()直後のエラー処理を加えればそこそこ使えるでしょう。
注意点は、
・当然のことですがpsを直接いじるので履歴順が変わる
・コマンドと同じキーアサインでは工夫が必要
…というところでしょうか。後者は、編集モード以外ではコマンドキーが優先される由。それで、工夫、です。

[3351] Re^2: 文字列の選択複写

としき 2009/06/11(Thu) 11:45
[3350]へのコメント http://www.hinocatv.ne.jp/~toshiki/
> 次のコードで実現できると思います。通勤電車からなので、細かいチェックはしていません。

> あとは&g()直後のエラー処理を加えればそこそこ使えるでしょう。

エラー処理も加えないそのままで、とりあえずは動きました。
どうもありがとうございます。
あと、いろいろと付け加えるべきものは多いかもしれませんが。

> ・当然のことですがpsを直接いじるので履歴順が変わる

これって、純正の選択複写でも変わるような気がします。
なので、むしろ仕様の統一という点から好ましいと思うのですが。
あるいは、履歴順の変わらない ^KA を密造して使われているとか?
もしかして私、なにか勘違いしてます?

> ・コマンドと同じキーアサインでは工夫が必要

そのまま ^KA を割り当ててしまいました。

> 編集モード以外ではコマンドキーが優先される由。

コマンドラインは編集モードではない
→コマンドラインではコマンドキーが優先される
→^KAを割当てても#61が優先される
#61はコマンドラインでは機能しない
→こちらのマクロが実行される

・・・というような感じなのですが、なにかおかしいでしょうか。

[3352] Re^3: 文字列の選択複写

めざら 2009/06/11(Thu) 21:14
[3351]へのコメント http://homepage3.nifty.com/mezala/
> なので、むしろ仕様の統一という点から好ましいと思うのですが。

 そのように割り切っておられるのなら問題はありません。単に,編集モードに戻った時に編集モードでは使わない文字列がトップにあるのが気になるかも,と思っただけですから。おっしゃるとおり,これは履歴バッファの仕様です。

> あるいは、履歴順の変わらない ^KA を密造して使われているとか?

 あ,いや。わたしの ^KA は ps 以外のいずれの履歴バッファも出せるようになっているだけです。履歴順位の変化は上のとおり仕様であることは変わりありません。

> →#61はコマンドラインでは機能しない
> →こちらのマクロが実行される

 そうでしたっけ? ヤキが回ったかしら。。。
 いずれにしても,問題なく便利に使えるならそれでよいのではないでしょうか。

[3353] Re^4: 文字列の選択複写

としき 2009/06/11(Thu) 23:02
[3352]へのコメント http://www.hinocatv.ne.jp/~toshiki/
>  いずれにしても,問題なく便利に使えるならそれでよいのではないでしょうか。

いやぁ、とっても便利です。
今まで、文字列を編集モードからコマンドラインに持ってくるのに削除バッ
ファ経由しか知らなかったので、ちと面倒な手順を踏んでいたりしました。
単に選択肢が増えるというだけでも嬉しいのですが、そればかりではなく、
場合によっては直感的に素直な操作性になる点もありがたいです。

ちょっとしたエラーチェックも加えて、現在、以下のようになっています。

23 ^KA "文字列の選択複写"
    ?{
        mx[+, pw[=ps, &g("【複写文字列】",40)
        (r!=-1 && r!=-2)?{ &?("%s",pw) }
        pw], mx], . 
    }?#61

これで、ファイル名窓だろうがなんだろうが複写できるようになって、個人
的にはとってもハッピー。さすがにファイラーモードで起動しても仕方ない
ので、今後、その辺は外す予定ですが。
ただ、もしよろしければアドバイスをお願いしたい点があって。
編集モードの#61では、起動時に最後の検索文字列が窓に表示されています。
でも、&g窓では、残念ながら表示されません。&g窓の直後に安直に#eなんて
いれてみたのですが、最後の検索文字列は表示されませんでした。
この点はどのようにすればよいか、ご教示いただければ幸いです。


あ、そうだ、ついでにもう少し。

> > →#61はコマンドラインでは機能しない
> > →こちらのマクロが実行される
>  そうでしたっけ? ヤキが回ったかしら。。。

私が勘違いしているだけなのかもしれないので、ちょっと確認。
「編集モード以外ではコマンドキーが優先される」ということなのですが、
これに対する例外は発見されていないという事でよろしいでしょうか。
それと、文字列の選択複写以外にも編集モード以外で機能しないコマンドは
あるかと思いますが、それと同じキーを割り当てたマクロを、例えばコマン
ドラインで実行した場合、どのような挙動になるのでしょうか。
 

[3355] Re^5: 文字列の選択複写

めざら 2009/06/14(Sun) 15:45
[3353]へのコメント http://homepage3.nifty.com/mezala/
> 編集モードの#61では、起動時に最後の検索文字列が窓に表示されています。
> でも、&g窓では、残念ながら表示されません。&g窓の直後に安直に#eなんて

 &g() はそこで入力待ちになっていますので履歴の呼出しはできません。ですので &g() の初期文字列を設定するしか手はありません。次のようにしてみてください。

&g("【複写文字列】",40,ps)

 ただし,高橋版以降でないと履歴が壊されます。

 余談ですが,履歴を破壊しない初期文字列というのは,相当に面倒なコーディングを要したようで,高橋さんも作業後に「c.mos さんが単純コピーにした理由が身に染みてよくわかった。(^^;」(dc15#10611)とコメントしていました。高橋さんの苦労に報いるためにも敬意を表して活用しましょう。

> 「編集モード以外ではコマンドキーが優先される」ということなのですが、
> これに対する例外は発見されていないという事でよろしいでしょうか。

 例外の発見というか,仕様だと理解していましたので疑念をはさむこともなかったのですが,ちょっと今回の件でわからなくなってきました。

 編集モードでしか扱わないスタックの操作に割り当てられたコマンドキーに被せてみると,場合によって動きが異なったりします。

 例えば,^Y に割り当てると,コマンドキーがあるにもかかわらず入力窓でもコマンドラインでもマクロキーが有効になりますが,^J に割り当てると,入力窓はマクロキーが有効で,コマンドラインでは無効になります。

 ひょっとして,いずれの版からか編集モード以外でもマクロキー優先になったのか?! と,^QN に割り当ててみると,入力窓でもコマンドラインでもコマンドキーが優先されますので特に変ったわけではなさそう。

 ^Y と ^J のように特別な違いの考えられないキーで振る舞いが異なるのはなぜなのか,考えれば考えるほど謎。ほんと,ヤキが回ったみたいです。

 混乱からしばらく立ち直れそうにないので,先日から作り始めていたトークン覚書を中途半端で上げちゃいます。迷宮に入るといつまでも上げられなくなるかもしれないので。マクロ関連覚書からどうぞ。

[3357] Re^6: 文字列の選択複写

としき 2009/06/14(Sun) 17:57
[3355]へのコメント http://www.hinocatv.ne.jp/~toshiki/
>  &g() はそこで入力待ちになっていますので履歴の呼出しはできません。ですので &g() の初期文字列を設定するしか手はありません。次のようにしてみてください。

助かります。ありがとうございます。

>  例外の発見というか,仕様だと理解していましたので疑念をはさむこともなかったのですが,ちょっと今回の件でわからなくなってきました。

何気なく質問してみただけだったのですが、こんな複雑な結果になるとは。
私の想定していたシナリオは、
「例外はありません、ちょっと勘違いしただけです」
という答が返ってきて、
「ぢゃぁ、dokokeyを使って工夫してみます」
と返して終り、というものでした。
まだまだ奥が深いソフトというか、いじり甲斐があって楽しそうです。

↑ このページの先頭