「検索」の「位置を固定する」についてNo.09306
Buckeye さん 06/02/22 08:51
 
お世話になっています。

動作環境の「検索」で「位置を固定する」にチェックを入れたときの動作につい
て、できたら変更していただきたい点があります。

上記の状態で検索を実行すると、基本的に、カーソルの上下位置が動かないよう
になります。視線を動かさなくてすむし前後が見えてとても便利なので、私はこ
の設定をずっと使っています。特にデスクトップで画面が大きいと、能率にも疲
れにも大きな違いがでます(検索語の強調表示ができるようになって、能率が落
ちることはあまりなくなりましたが、それでも、視線が泳ぐと疲れる)。

問題は、文書の末尾付近に検索語があった場合です。カーソル位置が画面の上半
分にある(というか、私はいつも中央ちょい上にしているので、必ずこの位置)
状態で検索してゆくと、文書末尾付近では、カーソル位置が下にずれてしまうん
です。これ、できるかぎりずれないようにできないでしょうか。

文書末尾だと、秀丸ウィンドウの上半分に表示というところまでしかスクロール
できないので、そこまでずれるのは仕方ないと思います(カーソルをウィンドウ
トップにおいて検索し、末尾行がヒットしたようなケースでカーソルがウィンド
ウ中央に移動する)。逆に言えば、そこまでスクロールできるのなら、その範囲
でできるかぎり、カーソル位置がずれないようにしていただきたいのです。言い
かえると、ウィンドウ内で文書の位置を調整する処理より、カーソル位置を固定
するというユーザー設定の処理を優先していただきたいのです。

もう少し詳しく書くと……

・長い文書の末尾で、ウィンドウの上半分に文書が表示されるところまでスク
  ロールします。
・上半分に複数ある文字を検索します(たとえば「。」)。
・そうすると、1行、スクロールすればいいはずのときや、まったくスクロール
  しなくてもいいはずのときでも、画面全体が下にスクロールしてしまい、カー
  ソル位置が一番下に来てしまいます。せっかく、ウィンドウの上半分に文書が
  表示されるところまでスクロールしておいたのに……

人によって違うとは思いますが、私は、画面の下端というのは使いにくく、中央
付近の半分(上から1/4から3/4までの範囲)で作業をするようにしています。そ
の辺りが見やすいということもありますし、文章を作ったり直したりするとき、
前後ともに見えたほうがやりやすいということもあります。モニター下端で作業
をしていると姿勢が悪くなり、背中や肩がこるということもあります。検索で
カーソル位置を固定している理由のひとつに、そうすれば検索語の前後が確認で
きるということもあります。いろいろな理由があって固定しているので、ユー
ザー指定を優先する形にしていただければ助かります。

    全置換ではカーソル位置が必ずウィンドウトップに来ます。そのため、置換
    開始後、いったんキャンセルしてカーソル位置を下げ、もう一度置換を始め
    るほどです。そういう意味では、文書冒頭も、ウィンドウの下半分に表示で
    きるようにして、なるべくカーソル位置が動かないようにしていただけると
    助かるのですが……それはちょっとぜいたくでしょうか。

よろしくご検討ください。

Best regards,
Buckeye

[ ]
RE:09306 「検索」の「位置を固定する」にNo.09311
Buckeye さん 06/02/22 11:46
 
>    全置換ではカーソル位置が必ずウィンドウトップに来ます。そのため、置換
>    開始後、いったんキャンセルしてカーソル位置を下げ、もう一度置換を始め
>    るほどです。そういう意味では、文書冒頭も、ウィンドウの下半分に表示で
>    きるようにして、なるべくカーソル位置が動かないようにしていただけると
>    助かるのですが……それはちょっとぜいたくでしょうか。

全置換時、カーソル位置が必ずウィンドウトップに来るっていうのも、考えてみ
れば、おかしな動作ですよね。動作環境の「検索」で「位置を固定する」を指定
している人間からすると、このときも、カーソル位置はそのままであって欲しい
ところです。

また、動作という観点から見たとき、全置換時、カーソル位置が必ずウィンドウ
トップに来なければならない理由もないように思います。

カーソルがウィンドウトップに来てしまうと、前後を見て置換すべきかどうかを
決めるとき、見たい部分がウィンドウの外に出てしまって困ることがあるんです。

文書冒頭も、ウィンドウの下半分に表示できるようにしてって部分が無理でも、
その部分にヒットがないときカーソル位置を固定することはできるはずです。全
置換をいったんキャンセルした後、下検索で置換を続けるときにはできているの
だし。

こちらについても検討をお願いしますm(_ _)m

Best regards,
Buckeye

[ ]
RE:09306 「検索」の「位置を固定する」にNo.09380
秀丸担当 さん 06/02/23 12:27
 

>動作環境の「検索」で「位置を固定する」にチェックを入れたときの動作につい
>て、できたら変更していただきたい点があります。

このあたりの動作は、おそらくファイル末尾付近では画面をなるべくフルに使っ
たほうがいいという配慮からこうなったのだと思います。
こういう微妙な動作は少し変更しただけでも、以前と違うことになった、と苦情
がくるのを何度も経験しているので、慎重に考えなければいけません。

ずれたときは、

disabledraw;
enabledraw y - 4;

みたいなマクロを実行するとそれなりにすっきりできるかもしれないです。

[ ]
RE:09311 「検索」の「位置を固定する」にNo.09382
秀丸担当 さん 06/02/23 12:52
 

>全置換時、カーソル位置が必ずウィンドウトップに来るっていうのも、考えてみ
>れば、おかしな動作ですよね。動作環境の「検索」で「位置を固定する」を指定
>している人間からすると、このときも、カーソル位置はそのままであって欲しい
>ところです。

これはなぜだろうかと思っていたのですが、「置換の前に確認」になっていると
そうなるのですね。
「置換の前に確認」でなければ、置換時は「位置を固定する」の動作は影響しな
いのですが、「置換の前に確認」の場合は「位置を固定する」の動作が影響して
います。
全置換の場合はいったいカーソルがファイルの先頭にいってから置換されるので、
結果的にカーソルが画面の上のほうに行くということになってしまうようです。
これも微妙なところで、難しいです。

[ ]
RE:09380 「検索」の「位置を固定する」にNo.09384
Buckeye さん 06/02/23 13:08
 
秀丸担当さん、

おそらくそういう配慮からだろうなというのは想像できます。ただ、その配慮が
裏目に出てしまう例もあるということで。設定をあまりふやしたくないとお考え
なのもわかっていますが、「位置を固定する」の下に「ファイル末尾でもなるべ
く位置を固定する」なんて設定があれば、私はチェック入れて使いますけど……

>ずれたときは、
>
>disabledraw;
>enabledraw y - 4;
>
>みたいなマクロを実行するとそれなりにすっきりできるかもしれないです。

あ〜、enabledrawに引数を持たせられるとは知りませんでした。これを使えば、
マクロに入った時点で表示範囲を覚えておいて、disabledraw状態で検索、範囲
選択を行い、enabledrawで元にもどせば、マクロについては解決できそうですね。

というわけで、やってみたらうまくいきました。おかげさまで、マクロについて
は、カーソル位置固定にほぼ等しい処理ができるようになりました。ありがとう
ございました。

ただ、個人的には、マニュアルの検索で位置がずれるのも不便なので(末尾が検
索でヒットしたときだけだから、たまに、にすぎませんけど)、やはり、できれ
ばなんとかしていただきたいところではあります。

Best regards,
Buckeye

[ ]
RE:09382 「検索」の「位置を固定する」にNo.09386
Buckeye さん 06/02/23 13:25
 
秀丸担当さん、

あー、そういうケースでカーソルが動くんですね。それならユーザーとしては、
なおさら、なんとかしていただきたいところです。

置換すべきかどうかを前後を見て判断したいから「置換の前に確認」にチェック
を入れて使うわけで、「置換の前に確認」にチェックを入れると前側の確認がで
きなくなるというのはとっても困ります。10年近くもそんなものだと思って使っ
てきましたが、こうして気づいてしまうと、いつも困っていたのにどうして要望
を出さなかったのかと不思議なくらいです。

>全置換の場合はいったいカーソルがファイルの先頭にいってから置換されるので、
>結果的にカーソルが画面の上のほうに行くということになってしまうようです。
>これも微妙なところで、難しいです。

処理としては、検索のマクロ処理と一緒で、スタート時点のy座標とスクリーン
トップのy座標の差Δyを覚えておいて、一発目がヒットしたところで、これが同
じになるようにenabledrawすればいいので(一発目のヒット位置が文書冒頭のと
き、ちょっと違う処理が必要かもしれませんが)、それほど難しいことではない
ように思います。

もちろん、ユーザーがどう思うかという点については、また別問題ですけど。

改めてマクロヘルプを見ると、replacedialogでふつうの置換用ダイアログが出
るのかもしれませんね。そうなら、個人的には、マクロから置換用ダイアログを
出し、一回、検索をかけてキャンセルし、その位置で処理を分岐するってやって
いけば、なんとかこの問題を回避できるかもしれないとは思います。でも、これ
は他の人も気づいていないだけで、実は困ってる人がけっこういるんじゃないか
と思いますけど。

Best regards,
Buckeye

[ ]
RE:09386 「検索」の「位置を固定する」にNo.09402
秀丸担当 さん 06/02/24 09:37
 

>あー、そういうケースでカーソルが動くんですね。それならユーザーとしては、
>なおさら、なんとかしていただきたいところです。

意見を考えつつ、検討していきたいと思います。
いろいろと忙しいのもあり、とりあえず保留としたいと思います。

[ ]
RE:09402 searchdownやreplacedownの検索No.09471
Buckeye さん 06/02/25 11:37
 
秀丸担当さん、

searchdownやreplacedownの検索オプションを文字列から展開できるようにして
いただけませんか。

一応、全置換でカーソル位置を固定するサブルーチンはできました。

disabledraw;
gofiletop;
searchdown $$1, word, nocasesense, regular, hilight;
moveto foundtopx, foundtopy;
enabledraw y - (#CurY - #WindowTopY);
replacedown $$1, $$2, word, nocasesense, regular, ask, hilight;
return result;

    #CurYは置換動作に入る前のy、#WindowTopYは置換動作に入る前のウィンド
    ウトップのyです。

問題は、検索オプションごとに別ルーチンとする必要があることと、searchdown
とreplacedownでうっかり条件を違えてしまう危険性があることです。
searchdownの二番目、replacedownの三番目の引数が文字列や変数なら展開して
処理していただけると、処理ルーチン側はひとつにまとまります。

マクロ処理のほうは、上記のような形に書き換え、前後が見えるようになってと
ても使いやすくなりました(どうして今まで不便なやり方であきらめてたんだろ
う)。ただ、同じような形でダイアログからの処理をなんとかするのは、置換ダ
イアログ自体を自分で出して処理するのでないかぎり(秀丸ってそういうことは
できたんでしたっけ)、不可能ですね。

というわけで、

>意見を考えつつ、検討していきたいと思います。
>いろいろと忙しいのもあり、とりあえず保留としたいと思います。

とのことですが、やはり、なんとかしていただきたいという希望だけ、改めて提
出しておきます。

Best regards,
Buckeye

[ ]
RE:09471 searchdownやreplacedownの検索No.09475
Iranoan さん 06/02/25 14:50
 
 Buckeye さん今日は、Iranoan です。
> 問題は、検索オプションごとに別ルーチンとする必要がある
 マクロ全体が掲載されていないので、間違っているかもしれませんが、
setsearch や finddown2 等を使えばその必要は無い気がします。
> disabledraw;
> gofiletop;
> searchdown $$1, word, nocasesense, regular, hilight;
> moveto foundtopx, foundtopy;
> enabledraw y - (#CurY - #WindowTopY);
> replacedown $$1, $$2, word, nocasesense, regular, ask, hilight;
> return result;
がサブルーチン全体なら、
disabledraw;
gofiletop;
setsearch $$1, searchoption&0xFFFB;//置換フラグを OFF
finddown2;
moveto foundtopx, foundtopy;
enabledraw y - (#CurY - #WindowTopY);
setsearch $$1, searchoption|0x0004;//置換フラグを ON
setreplace $$2;
finddown2;
return result;
の要領です。
> 置換ダ
> イアログ自体を自分で出して処理する
 replace が有ります。

[ ]
RE:09475 searchdownやreplacedownの検索No.09478
Buckeye さん 06/02/25 15:26
 
Iranoanさん、

はい、その後、setsearchは見つけましたし、ざっとテストもしてみました……
が、指定があるとき、ないときのフラグの状態、複数項目間の関係など、ヘルプ
だけからでは、秀丸内部と同じ解釈ができるかどうか、不安があります。「自動
的に〜になります」と書かれているところなど、setsearchでこちらでセットす
るなら、どのフラグをどうすればいいのかよくわからない書き方になっています
から。もちろん、全部の組み合わせについてテストルーチンを書き、洗い出せば
わかるわけですが、そこまでするよりは、処理時に展開してもらうのが簡単だと
思います(秀丸側の処理では、いずれにせよ、マクロを文字列として取り込んだ
後、内部表現に変換しているわけですから)。検索・置換というのは文字列処理
としてよく行うものであり、オプションを文字列から展開できるようになれば、
簡略化できるサブルーチンが世の中にはたくさんあると思いますし。

    自分で使うだけなら、自分で使うパターンだけ検証すればいいんでかまわな
    いのですが。ただ、この機能は、あれば便利だと思う人が多いんじゃないか
    と思うので、せっかくなら公開できるレベルのサブルーチンまで持っていき
    たいと思います。となると、秀丸と同じ解釈をしないとまずいわけです。

>> 置換ダ
>> イアログ自体を自分で出して処理する
> replace が有ります。

残念ながら、replaceでは「自分で処理」ができませんよね。replaceのようにダ
イアログから置換されてしまうのではダメなんです。

置換ダイアログを出し、ダイアログからでは置換せずにマクロにパラメーターを
もらって、マクロ側で処理しなければ実現できないことをしようというわけです
から。

Best regards,
Buckeye

[ ]
RE:09478 searchdownやreplacedownの検索No.09482
h-tom さん 06/02/25 17:47
 

h-tom です。

>はい、その後、setsearchは見つけましたし、ざっとテストもしてみました……
>が、指定があるとき、ないときのフラグの状態、複数項目間の関係など、ヘルプ
>だけからでは、秀丸内部と同じ解釈ができるかどうか、不安があります。「自動
>的に〜になります」と書かれているところなど、setsearchでこちらでセットす
>るなら、どのフラグをどうすればいいのかよくわからない書き方になっています
>から。もちろん、全部の組み合わせについてテストルーチンを書き、洗い出せば
setsearchって範囲選択以外、検索・置換ダイアログの設定そのままでは?
setsearchの説明にも、そう書いてありますし。
"複数項目間の関係"もJRE32.DLLを使っているならありますが、HMJRE.DLLを使っ
ているならないと思います。(少なくとも検索・置換ダイアログ上ではない)

"自動的に〜"は、おそらくsearch〜文の解説だと思いますが、引数が省略された
場合、動作をどうするかって事なのでは。

>残念ながら、replaceでは「自分で処理」ができませんよね。replaceのようにダ
>イアログから置換されてしまうのではダメなんです。
>
>置換ダイアログを出し、ダイアログからでは置換せずにマクロにパラメーターを
>もらって、マクロ側で処理しなければ実現できないことをしようというわけです
>から。
田楽DLLかサーバーを使って、ダイアログを作れば可能。

[ ]
RE:09478 searchdownやreplacedownの検索No.09484
Iranoan さん 06/02/25 18:58
 
 Buckeye さん今日は、Iranoan です。
> 置換ダイアログを出し、ダイアログからでは置換せずにマクロにパラメーターを
> もらって、マクロ側で処理しなければ実現できないことをしようというわけです
> から。
 あまりスマートではないですが、disabledraw をしておいて、一旦置換して
しまい、undo, replacebuffer で置換文字列も取得、とすれば出来ると思いま
す。そういったことが嫌なら、田楽シリーズなどの外部ツールを使う方法も有
ります。
http://www.ceres.dti.ne.jp/~sugiura/hidemaru/macros/dgserver/index.html

 念の為お断りしておくと、元々「検索」+「位置を固定する」についての動
作に反対しているわけではありません。ただプログラムの動作としては、秀丸
担当さんの仰る事はある意味自然なので、賛成も出来ないので、現状で出来る
方法を提示しているだけです。

[ ]
RE:09484 searchdownやreplacedownの検索No.09501
Buckeye さん 06/02/27 09:08
 
Iranoanさん、

> あまりスマートではないですが、disabledraw をしておいて、一旦置換して
>しまい、undo, replacebuffer で置換文字列も取得、とすれば出来ると思いま
>す。

すみません、ここのお話、理解できません。

ここは、置換ダイアログからのコマンド代替のアイデアですよね?

disabledrawしてからreplaceでダイアログを出し(ここは逆?)、置換してから
undoで最初に戻ってやりなおす……??? なんにせよ、ダイアログを出し、そ
こからユーザーが「全置換」としたら、マクロに制御がこないですよね??? 
いや、それが私の理解なんですが……何か勘違いしているのでしょうか。

>ただプログラムの動作としては、秀丸
>担当さんの仰る事はある意味自然なので、賛成も出来ないので、現状で出来る
>方法を提示しているだけです。

私も、プログラムの動作としては自然だと思います。しかし同時に、ユーザーか
ら見た動作としては不自然だと思いますし、ユーザーフレンドリーじゃないよな
とも思います。もちろん、モノゴトには優先順位があるわけで、Ver.6に向けて
新しい機能を作るほうに注力したいという気持ちもわからないではありません。
ただ、マクロレベルでさえ、ほんの数行で実現できてしまう程度の機能であれば、
それほど手間がかかるものではないだろうという気もします。秀丸のソースコー
ド外から呼べるものなら内部から当然に呼べるはずだと思うので。

カーソルがウィンドウの一番上に移動してしまうと、実は、文字の頭が問い合わ
せダイアログに隠れて困るという問題もあるんですよね。文字をなるべくたくさ
ん表示するため、ツールボックスもステータスバーもなくしているからいけない
って話もあるんですが……それでも、最近は、タブモードにしているから頭だけ
ですんでるんで、タブモードをやめると、置換するかどうか聞かれている部分が
完全にダイアログ(置換するかなどと聞いてくるダイアログ)に隠れて見えず、
毎回、マウスでダイアログをずらすか、いったんキャンセルしてカーソル位置を
ずらしてやりなおすか、どっちかにしないと使えない状態です。

これでよくみなさん、修正要望も出さずに使っておられますよね(って、私も10
年近く、ほとんど毎日使っていて、ここを直してもらったら格段に使いやすくな
るってようやく気づいた体たらくで、他人のこと、言えた義理じゃないんですけ
ど^^;)

Best regards,
Buckeye

[ ]
RE:09482 searchdownやreplacedownの検索No.09502
Buckeye さん 06/02/27 09:08
 
h-tomさん、

コメント、ありがとうございます。ただ、問題点を誤解されているところが多い
ようです。

>setsearchって範囲選択以外、検索・置換ダイアログの設定そのままでは?
>setsearchの説明にも、そう書いてありますし。

あらためて読みなおしてみましたが、どこにもそういう記述はありません。ヘル
プ内のあちこちを読み歩くと、検索・置換ダイアログとsetsearchの関係は検
索・置換ダイアログのチェックボックスがsetsearchのフラグに対応している可
能性が高いとは思われますが、明記はされていないので、確認しないとこわくて
使えません。

>"複数項目間の関係"もJRE32.DLLを使っているならありますが、HMJRE.DLLを使っ
>ているならないと思います。(少なくとも検索・置換ダイアログ上ではない)

問題は2点あって、ひとつは検索・置換ダイアログからのコマンド代替、もうひ
とつは、search〜文を代替するサブルーチンです。ですから、検索・置換ダイア
ログとの関係だけを言われても……。

検索・置換ダイアログとsearch〜文の動作はいろいろと違うらしいことがヘルプ
にも書いてありますから、検索・置換ダイアログとの関係がすっきりしているな
ら、なおさら、search〜文との関係はややこしいことになります。

自分で検索・置換ダイアログを作って出し、そこから検索・置換を行うコマンド
代替を作ろうと思ったら、h-tomさんも書かれているJRE32.DLLとHMJRE.DLLのど
ちらを使うのかによって条件が変化する点などにも対応しないといけませんよね。
これはこれでかなり面倒そうなので、そこまではよほどヒマでないとやれないな
と感じています。置換ダイアログから「全置換→キャンセル→ウィンドウ範囲調
節→次候補」という手順をふめば、不便ではあっても、一応使えるわけで、不完
全なものを作るのに多大な手間をかける気にはなかなかなりません。

>"自動的に〜"は、おそらくsearch〜文の解説だと思いますが、引数が省略された
>場合、動作をどうするかって事なのでは。

はい、そのとおりです。だから、ユーザー側で汎用ルーチンをまじめに作ろうと
するなら、どういうときにはどうなるのか、全部洗い出して、同じ解釈ができる
アルゴリズムを作る必要がある、それより、秀丸内では、いずれにせよ、文字列
から内部フラグに展開しているわけで、その前に文字列変数だったらその内容に
展開するルーチンをかませてもらえば、そのほうが簡単だし(洗い出す手間など
がないから)、完璧だし、私だけじゃなくて他の人も使えるし、それでマイナス
になる人はいないしといいことづくめだから、お願いしてみているわけです。

>田楽DLLかサーバーを使って、ダイアログを作れば可能。

方法はあるんですね。情報、ありがとうございます。そのうちヒマになったら考
えてみます。

Best regards,
Buckeye

[ ]
RE:09501 searchdownやreplacedownの検索No.09506
秀丸担当 さん 06/02/27 11:44
 


>searchdownやreplacedownの検索オプションを文字列から展開できるようにして
>いただけませんか。

に関しては、setsearchしてからfinddownなどをするのがそれにあたります。
もし同じ動作にならない点があれば、それはそれとして不具合かもしれないので
報告いただければ調査させていただきます。

>これでよくみなさん、修正要望も出さずに使っておられますよね(って、私も10
>年近く、ほとんど毎日使っていて、ここを直してもらったら格段に使いやすくな
>るってようやく気づいた体たらくで、他人のこと、言えた義理じゃないんですけ
>ど^^;)

ということですが、たぶん設定の組み合わせが非常に限定されていることと、あ
まり不便と感じないからだと思います(個人的な感覚ですが)。

・位置を固定する
・置換の前に確認
・ツールバーを表示しない
・タブモードではない

という条件が全て揃って、さらに推測ですが、[動作環境]→[表示/操作]→[カー
ソル操作]→[カーソルでスクロールする開始位置]が「画面の端」になってるの
でしょうか。

ここまでの条件が揃う人が少ないかもしれないのと、個人的な感覚では普通の置
換でカーソル位置は気になりますが、全置換でカーソル位置を気にすることはあ
まりないからだと思います。

ひょっとして確認のダイアログが少し上にずれればそれでいいということでしょ
うか?

[ ]
RE:09506 searchdownやreplacedownの検索No.09510
Buckeye さん 06/02/27 12:27
 
秀丸担当さん、

>に関しては、setsearchしてからfinddownなどをするのがそれにあたります。
>もし同じ動作にならない点があれば、それはそれとして不具合かもしれないので
>報告いただければ調査させていただきます。

たとえば、searchdownの検索オプションでfuzzyを指定するときには、setsearch
であいまい検索のビット5をたてればいい、ということでしょうか。searchdown
の説明を読む限りでは、もしかすると、searchdownの検索オプションでfuzzyを
指定したときと同じ動作にするには正規表現のビット4もたてる必要があるなど、
あまり単純ではないかもしれないと思えるのですが。ヘルプだけからではどちら
とも判断しかねます。

自分の検索条件だけなら、searchdownをやってみて、その検索オプションを取得
してみれば確認ができるのでいいのですが、公開したり汎用とするなら、すべて
のパターンに対応できないとまずいですよね。

>という条件が全て揃って、さらに推測ですが、[動作環境]→[表示/操作]→[カー
>ソル操作]→[カーソルでスクロールする開始位置]が「画面の端」になってるの
>でしょうか。

そんな設定があったんですね。ご推測のとおり、「画面の端」になっていました。
この辺りをいじったのはもう何年も前なので、どうしてそうしたのか、あるいは
なったのかは不明ですが。

>ひょっとして確認のダイアログが少し上にずれればそれでいいということでしょ
>うか?

確認のダイアログがモニター上限ぎりぎりに出てくれれば、上記の設定を変えた
状態なら、一応、直前の2〜3行が見えるようになるので、キャンセルしてまでや
り直さなければならないことがかなり減ります。

    文章を書いていると、もっと前まで確認したいことがあるのでこれだけで完
    璧とはならず、やはり、ときにはキャンセルしてやり直す必要があります。
    当該段落のトップまでは見たいと思うことがけっこうありますから。また、
    前後のかなりの幅を確認したいと思うこともあるからモニターも大型にして
    真ん中あたりで作業するようにしているわけだし、検索でのカーソル位置も
    固定にしているわけで。視線を動かさずにすむほうが目が疲れないという利
    点もありますし。

個人的には、カーソルをファイルトップに持っていくのはソフトウェア側の都合
であり、ユーザーが移動したわけではないので、カーソル位置固定をユーザーが
指定するなら、なるべく同じ位置になるようにすべきだと思いますし、そうして
いただければ、さらに一段、使い勝手があがるのになぁとは思います。全置換す
るならファイルトップからが当たり前というのはそうなんですが、そのようにソ
フトウェア側の都合を優先するなら、カーソルをトップに置かないと全置換がで
きないようにしてもいいわけです。でも、それはせず、ユーザーの都合を優先し
て、ファイル中のどこからでも、ファイルトップから置換するようにされている
わけで。それなら、徹底的にユーザーの都合を優先してもいいはずだし、使い勝
手とはそういう細かいところで決まるんだと思いますけど。

どこかに悪影響が出るのなら、もちろん、話は別ですし、ユーザーとしては要望
を出すまでしかできないわけで、これまたもちろん、最終的に採用する・しない
はサイトー企画さんの決定であり、一ユーザーがとやかく言えることではないの
で、最終決定はお任せしますけど。

Best regards,
Buckeye

[ ]
RE:09510 goscreentop時のカーソル位置No.09515
Buckeye さん 06/02/27 15:06
 
秀丸担当さん、

どうもうまくありません。

[動作環境]→[表示/操作]→[カーソル操作]→[カーソルでスクロールする開始位
置]を「画面の端」にせず、「上下に余裕を持たせる」とした上で、現在のカー
ソル位置がウィンドウに対してどの位置にあるのかを知る方法はないでしょうか。
あるいは、goscreentopでカーソルを移動させたとき、ウィンドウから何行下に
いるのかを知る方法でもいいです。

マニュアルの置換コマンドで前が見えるように「上下に余裕を持たせる」とする
と、先日来、マクロ側で強制的にカーソル位置を固定しようとして成功したパ
ターンが使えなくなります。goscreentopでスクリーンのトップに行けなくなる
ため、そこを基準に位置調整をするとずれていくのです。しかも、この余裕幅は
ウィンドウの大きさで変化するとのことなので、決め打ちをしてしまうわけにも
いきません。

Best regards,
Buckeye

[ ]
RE:09501 searchdownやreplacedownの検索No.09530
Iranoan さん 06/02/27 18:02
 
 Buckeye さん今日は、Iranoan です。
> そ
> こからユーザーが「全置換」としたら、マクロに制御がこないですよね???
> いや、それが私の理解なんですが……何か勘違いしているのでしょうか。
 あ、そうだ(^^;。失礼しました。そうすると、やっぱり田楽シリーズなどを
使うしかないですね。

> これでよくみなさん、修正要望も出さずに使っておられますよね(って、私も10
> 年近く、ほとんど毎日使っていて、ここを直してもらったら格段に使いやすくな
> るってようやく気づいた体たらくで、他人のこと、言えた義理じゃないんですけ
> ど^^;)
 プログラムとしては当然の動きなので、修正要望ではなく仕様変更要望なの
で、気が付いたのですぐ要望とは...。   ^^^^            ^^^^^^^^

 元々の要望の件は一先ず置いておくとして、マクロに限らずプログラムの仕
様に関しては、ヘルプを初めとして書籍に細かい部分の記載はあまり期待して
も仕方がありません。最初から細かい部分まで書いて有っても、結局解りませ
んよ。それに
> あらためて読みなおしてみましたが、どこにもそういう記述はありません。ヘル
> プ内のあちこちを読み歩くと、検索・置換ダイアログとsetsearchの関係は検
> 索・置換ダイアログのチェックボックスがsetsearchのフラグに対応している可
> 能性が高いとは思われますが、明記はされていないので、確認しないとこわくて
> 使えません。
の様に、実際には明記されていることはよくあります(^^)。この件は、
searchoption の所に、
> 検索フラグは、以前に実行された検索コマンドまたは置換コマンドのダイアロ
> グボックスで指定された各種のオプションを記憶しています。      ^^^^^^^^
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
と有ります。

> たとえば、searchdownの検索オプションでfuzzyを指定するときには、setsearch
> であいまい検索のビット5をたてればいい、ということでしょうか。searchdown
> の説明を読む限りでは、もしかすると、searchdownの検索オプションでfuzzyを
> 指定したときと同じ動作にするには正規表現のビット4もたてる必要があるなど、
> あまり単純ではないかもしれないと思えるのですが。ヘルプだけからではどちら
> とも判断しかねます。
 これは、詳細を書けない良い例です。fuzzy に限らずダイアログ・ボックス
の「あいまい検索」オプションを ON にしたときの動作は、自分が選択してい
る正規表現 DLL によって変化します。標準で付いている JRE32.dll,
HmJre.dll を例にすると、元々 JRE32.dll は正規表現を用いないあいまい検
索は出来ません。よって fuzzy を付ければ、regular を付けても付けなくて
も、正規表現が ON の扱い、つまりビット 4,5 の両方が ON の扱いになり、
noregular は効きません。HmJre.dll なら ビット 4,5 は完全に独立していて、
noregular が有効です。この動作の違いは、できるだけ上位ヴァージョンの互
換性を重要視した結果です。

 と、ここまで書けばご理解頂けると思いますが、こんな細かいことを、最初
に知っていても、説明が長くなるだけで、却って敷居を高くしてしまいますよ
ね(^^)。詳細が書かれていない部分は、過去ログを調べるか、ここで質問すれ
ばよいでしょう。

[ ]
RE:09530 searchdownやreplacedownの検索No.09542
Buckeye さん 06/02/27 20:06
 
Iranoanさん、

> プログラムとしては当然の動きなので、修正要望ではなく仕様変更要望なの
>で、気が付いたのですぐ要望とは...。   ^^^^            ^^^^^^^^

うーん、使いにくい点に気づいたら、「修正要望」にせよ「仕様変更要望」にせ
よ、要望を出すのが当然じゃないんですか? 先日来、私が出している文字種の
切り分けの問題も同じですよ。プログラムとしては、単に文字コードを見ている
だけで、ユーザーにとってそれがどういう意味があろうと関係なし。プログラム
としては当然の動きをしていただけです。でも、それじゃ使いにくいから何とか
なりませんかってお願いして、修正していただいたわけです。プログラムとして
当然の動きなら修正しないのであれば、文字種の切り分けも修正せず、ダブルク
リックからの単語選択でおかしなところまで選択されたら、シングルクリックか
らの選択をやりなおせばいいじゃん、という回答だってアリでしょう(実際、ア
リだと思うから、修正していただいて感謝してますけど)。

今回の件も、「検索でカーソル位置を固定する」と動作オプションまであるくら
いで、秀丸のプログラム側としても、カーソル位置を固定したほうがいい(とい
うユーザーからの要望を過去に聞いた結果?)という可能性を肯定しているわけ
で、そこを肯定するなら、検索や置換のとき、なるべく固定して欲しいという要
望を否定する理由はないはずです。

で、そうやってプログラムとして当然の動きよりもユーザーの使い勝手を優先し
てきたからこそ、秀丸が使いやすいエディタに成長したんだと思いますけど? 
それが秀丸の原点なんだと思ってましたけど、私の理解は間違ってるんでしょう
か?

    念のため一言。別に絶対に実現しろと言っているわけではありません。要望
    は否定しないけど、実装はしないっていうのは、もちろん、アリです。実装
    しない理由としては、他に悪影響が出るから面倒くさいまで、いろいろとあ
    るでしょう。検索・置換のサイズ制限みたいに、バッファ関連を下手にいじ
    ると他に多大な影響が出るおそれがあるっていうのも、技術的に不可能では
    ないのだから、ある意味、そこまでするのは「面倒くさい」という理由です
    けど、C系で組んでいるならそりゃあそうだろうという「面倒くさい」なわ
    けで。いずれにしても、使いにくくても使えるわけで不具合とは言えないも
    のであり、どうしてもと言えるものではありません(「使いにくくても使え
    ればいい」を極論すると、秀丸でなくてメモ帳でもいいじゃんってなっちゃ
    いますけどね)。ただ、使い勝手をかなり大きく左右すると思うので、こち
    らとしては、いろいろと理由を挙げて食い下がってみているだけです。

> と、ここまで書けばご理解頂けると思いますが、こんな細かいことを、最初
>に知っていても、説明が長くなるだけで、却って敷居を高くしてしまいますよ
>ね(^^)。詳細が書かれていない部分は、過去ログを調べるか、ここで質問すれ
>ばよいでしょう。

はい、一般的に言って敷居が高いから、低くしてくれとお願いしているわけです。

私自身が使う分には、自分が使うパターンをその都度調べればいいので、対応し
ていただけなければいただけないで別にいいんですよ(自分が使いたいコマンド
を実行してsearchoptionで中身を確認すればいい)。setsearchは、「長い検索
文字列の検索・置換」で使ってますし、自分で使うには困らないくらいの理解は
しているつもりです。

ただ、汎用ルーチンを組めるほどに調べてみる気にはならないんです。だからと
いって、setsearch関連が理解できなければ使えないルーチンを公開しても、こ
の部分の敷居が高くて、使ってみたいけど使えなくて困るという人が出てくるだ
ろうなと思うだけで。ま、マクロ会議室のほうで聞いた「長い検索文字列の検
索・置換」も、使ってみたいという人が現れないようですし、あちらを公開しな
いなら、setsearch関連は、特段、どうこうしていただく必要はないと思います。
公開しなければ、「長い検索文字列の検索・置換」を使いたいけどsetsearchが
わからなくて使えないという人も出てこないし、私以外の人が使わないなら、
「長い検索文字列の検索・置換」を使ったマクロがユーザーの設定次第で使えた
り使えなかったりするケースも出てこないでしょうから。

    「長い検索文字列の検索・置換」は、過去に何度か、要望が出ていたと記憶
    しているので、使いたい人が他にもいるかなと思ったので(置換リストによ
    る置換なんかで長い文字列が出てきても大丈夫になるわけですし)、
    setsearch関連の要望を出したんですけどね。

Best regards,
Buckeye

[ ]
RE:09542 searchdownやreplacedownの検索No.09543
Buckeye さん 06/02/27 20:35
 
補足です。

元々の検索・置換におけるカーソル位置固定の要望についてですが……私として
はかなり大きな問題だと思うから要望を出しているわけで、開発を担当している
方から「それはたいした問題ではないと自分は思う」といった理由で却下されて
しまうと、「かなりの意義があるんだよ」という反論を出さざるをえないんです
よ。「要望は分かるけど、とりあえず1人しか要望を出していないし、今は他に
やることがたくさんあるから保留」といった理由なら、満足はしないけど、納得
はしますよ。

    余談ながら、この関係で不満と言えば、全置換をかけて、「一気」を選択す
    ると、自動的にカーソル位置が非固定の動きに入る点も不満です。カーソル
    がウィンドウ内のどこに飛んだのか、探さなければなりませんから。それを
    すると目が疲れるから、カーソル位置を固定にしているという面もあるわけ
    で。ただ、すでに出したカーソル位置固定の要望に比べれば、必要度が低い
    ので要望という形で出さずにいるわけです。

Best regards,
Buckeye

[ ]
RE:09502 置換ダイアログをマクロで作るNo.09545
IKKI さん 06/02/28 03:43
 
こんばんは。 IKKI です。
横から茶々を入れるようで恐縮ですが…

>>田楽DLLかサーバーを使って、ダイアログを作れば可能。
>
>方法はあるんですね。情報、ありがとうございます。そのうちヒマになったら考
>えてみます。

車輪を再発明する必要はないと思います。
拙作 "Quarta"(大きな置換ダイアログ)に、先日 Beckeye さんが作られた
全置換でカーソル位置を固定する処理を入れてみました。ご参考までに…
http://www18.big.or.jp/~fujiwara/ikki/hidemaru/quarta/

ちなみに、山紫水明さんも同様のマクロを作っていらっしゃいます。
改造のベースにするならこちらの方がとっつきやすいかも…
http://hide.maruo.co.jp/lib/macro/replace300.html

--------------------------------
以下、秀丸担当さんへ。

全置換で [置換の前に確認] = ON のときカーソル位置が固定されない件は
(今まで気づきませんでしたが)言われてみれば確かに不便です。
秀丸エディタ側で改善できるのならば、そうした方がよいと思います。

検索オプションの件は、文字列から展開するのでもよいですが、むしろ
すべて数値で指定できるようにした方がよいと思います。現状では
replaceall(fast) と grep で検索オプションを数値で指定できないことが
汎用のマクロを作ろうとするときの足かせになっています。

[ ]
RE:09545 置換ダイアログをマクロで作るNo.09546
Buckeye さん 06/02/28 08:14
 
IKKIさん、

>車輪を再発明する必要はないと思います。
>拙作 "Quarta"(大きな置換ダイアログ)に、先日 Beckeye さんが作られた
>全置換でカーソル位置を固定する処理を入れてみました。ご参考までに…

ありがとうございます。とりあえずダウンロードしてきました。使ってみます。

>全置換で [置換の前に確認] = ON のときカーソル位置が固定されない件は
>(今まで気づきませんでしたが)言われてみれば確かに不便です。
>秀丸エディタ側で改善できるのならば、そうした方がよいと思います。

ご賛同、ありがとうございます。賛同する人が増えればやっていただける可能性
が高まるかと思いますので。

ファイル末尾でずれるのは、カーソル位置固定となるべく多くの情報の表示とど
っちを優先したいかが人によって異なるだろうと思うので、現状を変えてくれと
いうのはきびしいだろうなと思います(それでは困るという人が出てくる可能性
があるので、切り替えられるようにしないといけないだろうし、そうなると、ま
た、設定項目が増えてしまう)。

でも、こっちは、それで困る人はいないというか、それで困るようならカーソル
位置固定をオフにして使っているはずで(ここをオンにしておくと、下検索・上
検索で置換に入ればカーソル位置が固定されてしまうのだから)、多くの人にと
ってプラスにこそなれマイナスにはならないはずだと思うんですよね。

>検索オプションの件は、文字列から展開するのでもよいですが、むしろ
>すべて数値で指定できるようにした方がよいと思います。現状では
>replaceall(fast) と grep で検索オプションを数値で指定できないことが
>汎用のマクロを作ろうとするときの足かせになっています。

あー、それはたしかに、IKKIさんが言われることのほうが優先かも。使いにくい
けどできるものとできないものがあるなら、それはできないことをどうにかする
ほうが優先でしょう。ついでに文字列からの展開もしていただけるとありがたい
ですけどね。

Best regards,
Buckeye

[ ]
RE:09545 置換ダイアログをマクロで作るNo.09554
秀丸担当 さん 06/02/28 17:19
 

>全置換で [置換の前に確認] = ON のときカーソル位置が固定されない件は
>(今まで気づきませんでしたが)言われてみれば確かに不便です。
>秀丸エディタ側で改善できるのならば、そうした方がよいと思います。

他のことを進めるべく保留にしようと思っていましたが、このことを考えると他
のことが進まなくなってきたので、やってしまおうと思います。

>検索オプションの件は、文字列から展開するのでもよいですが、むしろ
>すべて数値で指定できるようにした方がよいと思います。現状では
>replaceall(fast) と grep で検索オプションを数値で指定できないことが
>汎用のマクロを作ろうとするときの足かせになっています。

これは確かに現状で難しいので、あったほうがいいと思います。
文法解析する上で、今の文のままでやるには困難なので、やるとしたら新しい文
を作る必要があります。
そうすると名前に悩むのですが、replaceall2、grep2でしょうか。うーむ。
検討したいと思います。

[ ]
RE:09554 置換ダイアログをマクロで作るNo.09557
Iranoan さん 06/02/28 17:35
 
 秀丸担当さん今日は、Iranoan です。
> そうすると名前に悩むのですが、replaceall2、grep2でしょうか。うーむ。
> 検討したいと思います。
 検索/置換に関しては、ダイアログ・ボックスを表示して result で何を選
択しかが解り、[キャンセル] 以外なら searchbuffer, replacebuffer,
searchoption に値をセットするだけで、実際の検索/置換を行わないコマンド
の方が便利だと思います。実際に上候補等は既存のコマンドで出来るので。

 別件ですが、「置換の前に確認」は確認しながら作業をしたいので ON にし
ているので、
> ひょっとして確認のダイアログが少し上にずれればそれでいいということでしょ
> うか?
というか、ダイアログ・ボックスは必ず文字列と重ならない位置に表示されな
いと、意味がないでしょうね。

[ ]
RE:09554 置換ダイアログをマクロで作るNo.09561
Buckeye さん 06/02/28 18:43
 
秀丸担当さん、

V6.00β5で全置換でもカーソル位置がなるべく固定されるようになったことを確
認しました。

ありがとうございましたm(_ _)m

Best regards,
Buckeye

[ ]
RE:09515 goscreentop時のカーソル位置No.09563
Buckeye さん 06/02/28 18:43
 
秀丸担当さん、

「上下に余裕を持たせる」としたとき、スクリーントップのyを取得する方法も、
そのうち、なんとか実現してくださいませ。

ウィンドウ内でカーソル位置を調整しようとすると、現状ではスクリーントップ
のyを基準にすることになるわけで、その位置が動作環境の設定やウィンドウの
大きさであっちこっちに移動してしまうと、公開しているマクロが他人の環境で
おかしな動きをすることになります。

    今、公開しているマクロにもスクリーントップのyを基準に位置調整してい
    るものがあって、それらは今も環境によってはおかしな動きをしているはず
    ですが……とりあえず、変だという苦情をもらっていないので、あわてなく
    てもいいのかも(って、他の方々のマクロは知りませんが)。まあ、ウィン
    ドウの表示範囲がずれていっても、「なんか変なの」と思いつつ使っている
    か、「こんな変な動きのものは使い物にならん」と捨てられているかかもし
    れませんけど。

Best regards,
Buckeye

[ ]
RE:09563 goscreentop時のカーソル位置No.09603
秀丸担当 さん 06/03/01 18:28
 

>「上下に余裕を持たせる」としたとき、スクリーントップのyを取得する方法も、
>そのうち、なんとか実現してくださいませ。

確かに「上下に余裕を持たせる」のときは取得が難しいです。
検討したいと思います。

[ ]
RE:09603 goscreentop時のカーソル位置No.09604
Buckeye さん 06/03/01 18:39
 
秀丸担当さん、

よろしくお願いしますm(_ _)m

個人的には、内部的な値を表現するキーワードに「screentopy」とかなんとか追
加していただくのがいいように思いますが、とにかく、何らかの方法で取得でき
ると助かります。

Best regards,
Buckeye

[ ]
RE:09554 置換ダイアログをマクロで作るNo.09639
IKKI さん 06/03/03 02:25
 
IKKI です。

> そうすると名前に悩むのですが、replaceall2、grep2でしょうか。うーむ。
ちょっと考えてみました。

■A案
 検索文字列は検索バッファを使う

  replaceall   ⇔ 『findall』
  replaceallfast ⇔ 『findallfast』
  grep      ⇔ 『grepbybuf』
  localgrep   ⇔ 『localgrepbybuf』

 例
  setsearch  "hoge", 0x07;
  setreplace "fuga";
  findallfast;

 問題点
  ・findall で置換ビットが落ちてたら?
   愚直に文書頭から文書末まで検索してヒット個数を result で返す?
  ・grepbybuf で置換ビットが立ってたら?
   将来 GREP 置換機能を作ったとき、それを実行する?

■B案
 検索文字列を引数で指定する

  『replaceall2』
  『replaceallfast2』
  『grep2』
  『localgrep2』

 例
  replaceallfast2 "hoge", "fuga", 0x07;

 問題点
  ・バッファの設定と実行が分離していないため、凝った処理をしようと
   したとき柔軟性に欠ける?
   (これが問題となる例をすぐに思いつきませんが)
  ・既存の find ←→ find2 や grepdialog ←→ grepdialog2 からの
   類推が利かない

[ ]
RE:09639 置換ダイアログをマクロで作るNo.09645
秀丸担当 さん 06/03/03 12:01
 

>ちょっと考えてみました。
>
>■A案
> 検索文字列は検索バッファを使う
>
>  replaceall   ⇔ 『findall』
>  replaceallfast ⇔ 『findallfast』
>  grep      ⇔ 『grepbybuf』
>  localgrep   ⇔ 『localgrepbybuf』
>
> 例
>  setsearch  "hoge", 0x07;
>  setreplace "fuga";
>  findallfast;
>
> 問題点
>  ・findall で置換ビットが落ちてたら?
>   愚直に文書頭から文書末まで検索してヒット個数を result で返す?
>  ・grepbybuf で置換ビットが立ってたら?
>   将来 GREP 置換機能を作ったとき、それを実行する?
>
>■B案
> 検索文字列を引数で指定する
>
>  『replaceall2』
>  『replaceallfast2』
>  『grep2』
>  『localgrep2』
>
> 例
>  replaceallfast2 "hoge", "fuga", 0x07;
>
> 問題点
>  ・バッファの設定と実行が分離していないため、凝った処理をしようと
>   したとき柔軟性に欠ける?
>   (これが問題となる例をすぐに思いつきませんが)


案ありがとうございます。
B案もできたらいいですが、それはsearchdownなど引数で指定するもの全てにも
言えることになってくるので、とりあえずはA案の方向で一貫性を持つようにで
きたらいいと思います。

>  ・既存の find ←→ find2 や grepdialog ←→ grepdialog2 からの
>   類推が利かない

というのが悩みどころです。
以下のような感じかとおも思いますが、先に折りたたみと部分編集を維持するマ
クロの互換をやらなければいけないと思っているので、現時点では保留としてお
きたいです。

検索ダイアログ
  searchdialog          引数
  find                  (旧式互換)
  find2                 バッファ

検索実行
  searchdown            引数
  searchdown2           引数(開始カーソル位置の違い)
  finddown              バッファ
  finddown2             バッファ(開始カーソル位置の違い)

全置換実行
  replaceall            引数
  (replaceallbybuf?)    バッファ

grepダイアログ
  grepdialog            (旧式互換)
  grepdialog2           引数
  (grepdialogbybuf?)    バッファ

grep実行
  grep                  引数
  (grepbybuf?)          バッファ


[ ]
RE:09645 置換ダイアログをマクロで作るNo.09648
Iranoan さん 06/03/03 12:59
 
 秀丸担当さん今日は、Iranoan です。
>   (replaceallbybuf?)    バッファ
 まだ先でしょうが、これらのマクロを使う人は置換フラグについて、
setsearch を使うでしょうから、それほど気にする必要はないと思います。ま
た新たにコマンドを追加して頂かなくとも、
disabledraw;
gofiletop;
finddown;
while( result )finddown;
で (繁雑ですが) 出来るので、必要無い気もします。

[ ]
RE:09645 置換ダイアログをマクロで作るNo.09663
IKKI さん 06/03/03 21:33
 
IKKI です。こんにちは。

> 以下のような感じかとおも思いますが、先に折りたたみと部分編集を維持するマ
> クロの互換をやらなければいけないと思っているので、現時点では保留としてお
> きたいです。

それがいいと思います。時機を見てまたご検討ください。

> 検索ダイアログ
>   searchdialog          引数
>   find                  (旧式互換)
>   find2                 バッファ
>
> 検索実行
>   searchdown            引数
>   searchdown2           引数(開始カーソル位置の違い)
>   finddown              バッファ
>   finddown2             バッファ(開始カーソル位置の違い)
>
> 全置換実行
>   replaceall            引数
>   (replaceallbybuf?)    バッファ
>
> grepダイアログ
>   grepdialog            (旧式互換)
>   grepdialog2           引数
>   (grepdialogbybuf?)    バッファ
>
> grep実行
>   grep                  引数
>   (grepbybuf?)          バッファ

こんな感じに直交性をもたせられると、わかりやすくていいですね。

[ ]