非同期処理中、マウスからのスクロールは許可しつつマクロからの入力に伴うスクロールは抑制したい

  1. Kuroさん

    Geminiさん 2.0 がリリースされ、先日安定版公開に至ったとのことなので、またGeminiさんの相談マクロをいじっています。Meryでの生成AI活用雑談部屋も欲しくなってきました…あとでGemini相談マクロの更新と合わせてスレッドを作ろうかしら?

    さて、Gemini相談マクロ修正中に伴い、ちょっとご相談したいことが出てきました。

    現在のGemini相談マクロでは、「応答を順次取得→Meryに順次入力」を行うことで、ChatGPT的な雰囲気の表示を実現していますが、この際の入力に伴ってスクロールがされていきます。ある程度短い応答であればそれでも問題なく読みながら処理終了を待つことができるのですが、少し長いと目と頭が追いつかなくなることがあります。

    そこで、「マクロ処理開始時点でスクロール位置を固定し、マクロからの入力ではスクロールしない。かつマクロ処理中であってもマウスホイールでのスクロールには応答する」という状態が作れると、この状況は大きく改善できるのではと考えました。

    shell.KeepRunning = true; のように、任意でプロパティを設定してこのような動作ができると嬉しいです。

    イメージとしては、 window.PersistScrollPosition = true のような設定でオンする感じですね。

    • マクロ実行中にマウスホイールでのスクロールは許可するのを標準とする
      • 現状、処理中はマウスホイールでのスクロールがブロックされているかと思いますがこれを許可する。スクロールだけできる分にはカーソル位置が変わったりはしないので、マクロ動作に影響は無いと思われる
    • 上記プロパティを新設する

    …といった流れで実現できないだろうかと想像しています。

    検討していただけると嬉しいです🙇‍♂️

     |  yuko  |  返信
  2. ご意見ありがとうございます。

    > Geminiさん 2.0 がリリースされ、先日安定版公開に至ったとのことなので、またGeminiさんの相談マクロをいじっています。

    おぉ、ついに安定版になったんですね。 無料期間、まだいけるかな…?

    こちらは相変わらず QuickJS と格闘中ですが、なかなか時間が足りなくて困ってますw

    > Meryでの生成AI活用雑談部屋も欲しくなってきました…あとでGemini相談マクロの更新と合わせてスレッドを作ろうかしら?

    雑談部屋いいですね。マニアックな話もできるし、レスが遅くても気楽にやり取りできるのがいいところですね。

    さて、本題ですが…

    > そこで、「マクロ処理開始時点でスクロール位置を固定し、マクロからの入力ではスクロールしない。かつマクロ処理中であってもマウスホイールでのスクロールには応答する」という状態が作れると、この状況は大きく改善できるのではと考えました。

    なるほど、それなら確かに使いやすくなりそうですね。技術的には、たぶんできるんじゃないかと思います。

    > マクロ実行中にマウスホイールでのスクロールは許可するのを標準とする

    仕様としてはアリかなと思います。

    > 現状、処理中はマウスホイールでのスクロールがブロックされているかと思いますがこれを許可する。スクロールだけできる分にはカーソル位置が変わったりはしないので、マクロ動作に影響は無いと思われる

    マクロへの影響があるとしたら、ScrollX や ScrollY のプロパティを読み書きする場合くらいかしら?

    でも、その時点でのスクロール位置をちゃんと取得・設定できるなら、大きな問題にはならなさそうですね。

    > 上記プロパティを新設する

    うーん、新しいプロパティを追加するとなると、慎重に検討したいですね。

    やるとしたら、個人的にはwindow.AutoScroll = false(デフォルトは true) みたいな感じの名前がしっくりくるかな?

    Microsoft 製品 (Word や Excel のオートメーション) に似たような機能やプロパティがあると検討しやすいのですが…😅

     |  Kuro  |  返信
  3. 返信ありがとうございます!

    > なるほど、それなら確かに使いやすくなりそうですね。技術的には、たぶんできるんじゃないかと思います。

    まずは希望ありとのことで、ほっとしました😊

    ちなみに、https://www.perplexity.ai/ で出力結果を待つ間の動きが実現イメージとして近いです。続々と出力されていくものの、スクロール位置はマウスホイールで操作、という感じですね。

    > 仕様としてはアリかなと思います。
    >
    > マクロへの影響があるとしたら、ScrollX や ScrollY のプロパティを読み書きする場合くらいかしら?

    たしかに、ScrollXやScrollYを取得するときの位置ずれはあり得ますね。とはいえ、マクロ動作時のスクロール位置読み書きのような重要な動作中においてマウスホイールをいじるとも思えませんし、問題なさそうではありますね。

    > うーん、新しいプロパティを追加するとなると、慎重に検討したいですね。
    >
    > やるとしたら、個人的には`window.AutoScroll = false`(デフォルトは true) みたいな感じの名前がしっくりくるかな?

    たしかにおっしゃるように「自動でスクロールする動作をオフする」的なニュアンスの名前の方が分かりやすいですね!

    ただ、「オートスクロール」と聞くとなんとなくマウス中ボタンクリックでのスクロールを想起してしまいました。例えば「ScrollOnInput = false」みたいな、「入力時のスクロールをオフする」のような、より具体的な名前の方がいいかも?

     |  yuko  |  返信
  4. ご返信ありがとうございます。

    > ただ、「オートスクロール」と聞くとなんとなくマウス中ボタンクリックでのスクロールを想起してしまいました。

    確かに、マウスの中ボタンクリックでの「オートスクロール」は思い浮かびますね。

    あとは、スクロールバーの表示/非表示を自動で切り替える「AutoScroll」っていうプロパティもあったりして、いろんな意味で使われてますね。

    > 例えば「ScrollOnInput = false」みたいな、「入力時のスクロールをオフする」のような、より具体的な名前の方がいいかも?

    分かりやすさを重視するなら、そうですね。入力だけでなく削除などにも関係するので、ScrollOnEditScrollOnChangeといったところでしょうか。

    ただ、これまでマクロ関連のプロパティに~On~という命名は使われていないので、急にScrollOnEditとかいう名前が出てくると、統一感がなくなっちゃうかなぁとも思います。

    ちなみに、私もその後、Microsoft 製品で、編集時に自動でキャレット位置にスクロールするような機能や、そういった関連のプロパティを探しているのですが、まだ見つけられていないんですよね🤷‍♂️

    Visio にはWindow.ScrollLockというプロパティがあって、trueにするとスクロールできなくなるという機能でしたが、ちょっと違いますよね…

    【参考】Window.ScrollLock プロパティ (Visio) | Microsoft Learn
    https://learn.microsoft.com/ja-jp/office/vba/api/visio.window.scrolllock

    「これだ!」ってピンとくる名前があれば、やる気も出るんですけどね。でも、とりあえず、技術的に実装できるか調べてみようと思います。

    とはいえ、QuickJS のほうが気になっちゃって、他のことが手につかない状態ですが…w😅

     |  Kuro  |  返信
  5. > 「これだ!」ってピンとくる名前があれば、やる気も出るんですけどね。でも、とりあえず、技術的に実装できるか調べてみようと思います。
    > とはいえ、QuickJS のほうが気になっちゃって、他のことが手につかない状態ですが…w😅

    ありがとうございます。趣味の延長線なのですから、興味の赴くままにやるのが一番ですw

    名前は悩ましいですね~
    あとは、設定値が true/false でなく定数になってしまうでしょうが、「ScrollMode」とかも…?Selectionオブジェクトなどでは「Mode」というのがありますから、そこまで違和感が無い気もします。

    モード方式なら、「マクロによる編集時スクロールのみ許可」「ホイールによるスクロールのみ許可」「両方許可」「両方ブロック」というバリエーションも出せるかもしれませんね。

     |  yuko  |  返信
  6. > 趣味の延長線なのですから、興味の赴くままにやるのが一番ですw

    そう言ってもらえると助かります!とはいえ、最近は趣味に没頭できる時間が減ってしまって、いわゆる「ゾーン」に入って一気に集中できる時間がめちゃくちゃ貴重になりました。

    昨日は QuickJS でどうしても動かないところがあって、気づいたら1日まるごと消滅…。でも、久しぶりにどっぷりハマれて楽しかったですw

    > あとは、設定値が true/false でなく定数になってしまうでしょうが、「ScrollMode」とかも…?Selectionオブジェクトなどでは「Mode」というのがありますから、そこまで違和感が無い気もします。

    アイデアありがとうございます。

    ただ、ScrollModeだと、ページスクロールやスムーズスクロール、慣性スクロールなど、いろいろな意味に解釈されそうで…😅

    あれから私も考えていたのですが、やっぱりAutoScrollが無難かなって結論になりました。

    というのも、よく考えてみると、編集時だけでなく、CharRight()でカーソル移動するだけでもスクロールされるし、ほかにもさまざまなタイミングで勝手にスクロールされるので、「自動スクロール」という表現が一番しっくりくるかな~と。

    最初にwindow.AutoScrollを考えたときに違和感があったのは、「ウィンドウのホイールクリックのオートスクロールっぽく見えちゃう」からだったんですよね。

    で、なぜwindowのプロパティになってたかというと、ScrollYとかがwindowのプロパティだから、なんとなくそうしたわけですが…

    よく考えてみると、これ、文書単位で制御するのが適切では?と思いまして。document.ScrollYにしたほうが自然ですよね。

    そうでないと、documents.item(1)のように、アクティブではない文書のスクロールを操作できませんからね。

    で、いろいろ検討した結果…

    • ScrollYdocument.ScrollYに移動する (もちろんScrollXも)
    • 下位互換性のためにwindow.ScrollYは非推奨として残す

    すると、

    • document.AutoScroll

    というプロパティになります。

    これなら「window のオートスクロール」ではなく、「文書ごとに自動スクロールのオン/オフを管理する」といった感じでスッキリするかと思います。

    …まだ、技術的に実装できるかどうか調べていないので、「やっぱり無理でしたー」ってなる可能性もありますが、とりあえず今日考えたところはこんな感じでした🐥

     |  Kuro  |  返信
  7. > 昨日は QuickJS でどうしても動かないところがあって、気づいたら1日まるごと消滅…。でも、久しぶりにどっぷりハマれて楽しかったですw

    私も先日、別件でハマって趣味のツールを書いていて、うっかり朝日が見えそうな時間帯までやってしまいました。時々はモチベーションに身を委ねてどっぷりと…もいいですよね😉

    > ただ、`ScrollMode`だと、ページスクロールやスムーズスクロール、慣性スクロールなど、いろいろな意味に解釈されそうで…😅

    oh...たしかに、言わればみればそうですね。

    > 最初に`window.AutoScroll`を考えたときに違和感があったのは、「ウィンドウのホイールクリックのオートスクロールっぽく見えちゃう」からだったんですよね。

    なるほど~、これはかなり腑に落ちました。

    > - `document.AutoScroll`

    これなら分かりやすいですね。実現できることを祈りつつ、楽しみにしています😊

     |  yuko  |  返信
  8. ご返信ありがとうございます。

    その後、技術的に実装できるか試してみたのですが、いけそうな感じです👍

    ひとまずテストしてみたところ、なかなか使えそうな機能ですね。

    これまでは、マクロ実行後にスクロール位置を戻すために、ScrollX、ScrollY を変数に記憶して、最後に復元…みたいなことをやってましたが、この機能を使えば一発で済みますね。これは便利かも!

    個人的にも「これはあったほうが便利!」と感じたので、実装する方向で問題ないと思います。

    > これなら分かりやすいですね。実現できることを祈りつつ、楽しみにしています😊

    そう言っていただけると助かります。

    とはいえ、ScrollXScrollYAutoScroll (仮)プロパティをdocumentに持たせる案はこのまま進めようと思っていますが、AutoScrollというプロパティ名については、もうちょっと考えさせてくださいね。

     |  Kuro  |  返信
  9. > とはいえ、`ScrollX`、`ScrollY`、`AutoScroll (仮)`プロパティを`document`に持たせる案はこのまま進めようと思っていますが、`AutoScroll`というプロパティ名については、もうちょっと考えさせてくださいね。

    横から失礼。名称はSmartScrollとかどうでしょうか。

    もはや使い道のないシリアル接続の初代インテリマウス(未開封)持ってます。
    シリアルポートを増設してもWindows11だとドライバがないと思う。

     |  enaka  |  返信
  10. Kuroさん

    > 個人的にも「これはあったほうが便利!」と感じたので、実装する方向で問題ないと思います。

    ありがとうございます!
    たしかに、 ScrollX, ScrollY は処理された後に元の場所に戻るのに使うケースが多いでしょうから、最初から AutoScroll (仮) = false みたいに動かなくできると、やりたいことに対して直接的な感じになっていいですね。

    ちなみに、AutoScroll の状態に関わらず、 Redraw = true でのマクロ動作中にはホイール操作が効くようにもできた感じでしょうか?

     |  yuko  |  返信
  11. ご返信ありがとうございます。

    >> enaka さん

    > 横から失礼。名称はSmartScrollとかどうでしょうか。

    SmartScroll、確かにかっこいい名前ですね。ただ、マクロからのスクロールを抑制するための機能なので、少し方向性がズレちゃうかもしれません ^^;

    初代インテリマウス、未開封とはすごい!それはまさに貴重なコレクターズアイテムですね。

    USB → シリアルポート変換なら、ドライバも手に入りやすいかもですよ。

    >> yuko さん

    > たしかに、 ScrollX, ScrollY は処理された後に元の場所に戻るのに使うケースが多いでしょうから、最初から AutoScroll (仮) = false みたいに動かなくできると、やりたいことに対して直接的な感じになっていいですね。

    そうなんですよね。非同期マクロだけじゃなく、普通の同期マクロにも役立ちそうなところもポイント高いですね。

    > ちなみに、AutoScroll の状態に関わらず、 Redraw = true でのマクロ動作中にはホイール操作が効くようにもできた感じでしょうか?

    ちょっと状況が分からないのですが、もしかして、Redraw = falseで画面の再描画を止めてる状態のことですか?

    もしそうなら、Redraw = falseは OS レベルで再描画を停止しているので、再描画イベントは来なくなりますし、再描画が必要となる操作も無視されるので、ホイール操作も効かないんですよね。

    【参考】WM_SETREDRAW メッセージ (Winuser.h) - Win32 apps | Microsoft Learn
    https://learn.microsoft.com/ja-jp/windows/win32/gdi/wm-setredraw

    なので、スクロールを受け付けたい場合は、コード内でRedraw = falseRedraw = trueを適切に使い分けることになるかと思います。

    それから、プロパティ名についても色々考えた結果、やっとこれかな?というものにたどり着きました。

    Microsoft の Xaml コントロールですが、アイテムの編集時にスクロール位置を維持するためのプロパティとしてKeepScrollOffsetというプロパティを見つけました。

    それを参考に、Mery のマクロでは Offset という用語は馴染みがないので、少し変更してdocument.KeepScrollPosという名前を考えてみました。

    (この場合、「スクロール位置を維持する」プロパティなので、AutoScroll = falseとは意味が逆になり、最初に戻って yuko さんが提案してくれたPersistScrollPosition = trueのように、オンにするとスクロール位置を維持する仕様になりますが)

    それから、ついでに、ホイール操作だけでなく、マクロによる編集の影響を受けずにスクロール バーでの操作も実現できそうです👍

     |  Kuro  |  返信
  12. あ、いえいえ。すみません、混乱させてしまいましたね。
    Redraw = true (描画有効状態) の話で合っています。

    要望として挙げさせていただいたのが、

    • (1) マクロ実行中のスクロール抑止
    • (2) Redraw = true (描画有効状態) でマクロ実行中にホイールスクロールができること

    の2点のつもりだったのですが、(1) については先日実現できたとのことだったので、「(2) の方はどうだったかな?」と思いまして、念のため確認でした。

    …が、

    > それから、ついでに、ホイール操作だけでなく、マクロによる編集の影響を受けずにスクロール バーでの操作も実現できそうです👍

    とのことなので、どうやら (2) の方も試していただいていたようで、ありがとうございます😊 スクロールバーでも動かせるとなると、Geminiさんの長文出力中でも待たずにサクサクと前後の文脈確認もできてしまいますね!

    > それを参考に、Mery のマクロでは Offset という用語は馴染みがないので、少し変更してdocument.KeepScrollPosという名前を考えてみました。

    ありがとうございます。AutoScrollよりも直感的な命名になりましたね。良い感じだと思います👌

     |  yuko  |  返信
  13. ご返信ありがとうございます。

    > (2) Redraw = true (描画有効状態) でマクロ実行中にホイールスクロールができること

    えっ、そんな話題ありましたっけ?😅

    ともあれ、Redraw = trueなら、マクロ実行中でもホイールでスクロールできるようになるので大丈夫そうですね。

    > スクロールバーでも動かせるとなると、Geminiさんの長文出力中でも待たずにサクサクと前後の文脈確認もできてしまいますね!

    ですですw ただ、ホイール操作を許可すると、Ctrl + ホイールでフォントサイズ変更とかもできちゃうので、スレッドセーフ的にちょっと心配ですが…、今のところ問題なく動いてるっぽいです。

    > ありがとうございます。AutoScrollよりも直感的な命名になりましたね。良い感じだと思います👌

    ほっ、そう言ってもらえて安心しました!では、次のバージョンで実装できるように開発を進めていきますね👍

     |  Kuro  |  返信
  14. > えっ、そんな話題ありましたっけ?😅
    > ともあれ、Redraw = trueなら、マクロ実行中でもホイールでスクロールできるようになるので大丈夫そうですね。

    あら…
    冒頭の『そこで、「マクロ処理開始時点でスクロール位置を固定し、マクロからの入力ではスクロールしない。かつマクロ処理中であってもマウスホイールでのスクロールには応答する」という状態が作れると、この状況は大きく改善できるのではと考えました。』の、「マクロ処理中であってもマウスホイールでのスクロールには応答する」のところがその要望のつもりで書いていました😅

    まぁ、結果的にはマクロ実行中のホイールスクロールも実現できたということなので結果オーライでしたねw

    > ほっ、そう言ってもらえて安心しました!では、次のバージョンで実装できるように開発を進めていきますね👍

    これまた次バージョンも楽しみです!

     |  yuko  |  返信
  15. > 「マクロ処理中であってもマウスホイールでのスクロールには応答する」のところがその要望のつもりで書いていました😅

    ええっ…、なんだか、情報の伝達に齟齬が発生している可能性が…

    Redraw = trueについては、ちょっとわからなくなってきました。

    おそらく、

    > 『そこで、「マクロ処理開始時点でスクロール位置を固定し、マクロからの入力ではスクロールしない。かつマクロ処理中であってもマウスホイールでのスクロールには応答する」という状態が作れると、この状況は大きく改善できるのではと考えました。』

    が文字どおりの意味であれば、その状況は実現できると思います。

    Redraw = trueが関係しているとは想定していなかったので、もしかしたら私が何か勘違いしているのかもしれません。

    うーん、どういうことなんだろう…?😱

     |  Kuro  |  返信
  16. > ええっ…、なんだか、情報の伝達に齟齬が発生している可能性が…
    > Redraw = trueについては、ちょっとわからなくなってきました。

    いや、Kuroさんに伝わらないということは、たぶん私が Redraw プロパティ自体を勘違いしている可能性が高そう…😥

    私の現行仕様に対する認識は、以下のようなものでした。

    • Redraw のデフォルト値は true
    • デフォルト状態、もしくは明示的な指定により Redraw = true になっていると、マクロ実行中の画面描画 (編集に伴うスクロール) がされる
    • Redraw = true であっても、マクロ実行中にマウスホイールによるスクロールはできない
    • Redraw = false は画面描画が完全に止まるので、マクロからであってもホイールからであってもスクロールさせることは不可能
    • 上記は、JScript、V8マクロいずれも同様

    その認識の下で、以下の考えが生まれました。

    • 画面描画されている状況 (Redraw = true) であれば、マクロ処理に伴うスクロールはされるのだから、マウスホイールでスクロールもできないものだろうか?
    • Redraw = false の場合、画面の表示処理が完全に止まるので、スクロールもできなさそう

    なので、「Redraw = false では無理だろうけど Redraw = true 状態の場合のみ、マウスホイールスクロールが効く状態にしてもらいたい」となった感じです。

    伝わるでしょうか…?
    なんとなく、私の Redraw = true の仕様認識に違いがあるせいで前提がずれて話が噛み合ってない感もするのですが…

    「マクロ処理開始時点でスクロール位置を固定し、マクロからの入力ではスクロールしない。かつマクロ処理中であってもマウスホイールでのスクロールには応答する」という状態は、画面描画できる状態、つまり Redraw = true 状態下における動作が前提でイメージしていました。そもそも Redraw = false だったら描画されないのでスクロールも何も表示が動かないですよね、と理解しておりまして。

    なので、以下のような気持ちで要望を書いていました。

    • Redraw = true 時 → マクロ処理中にマウスホイールでスクロール操作をしたい
    • Redraw = false 時 → 特に希望なし。この要望によって結果的に Redraw = false 中の処理に影響があっても構わない (スクロール操作はいずれにせよ処理終了時点でしか画面反映されないため)

    Redraw = true の場合の処理のみ変えてほしい」といった条件付けは特に意図しておらず、あくまで実装結果を Redraw = true でのみ見ることができればよくて、 Redraw = false 中の処理は問いませんよという感じですね。

     |  yuko  |  返信
  17. ご返信ありがとうございます。

    > Redraw のデフォルト値は true
    > Redraw = true であっても、マクロ実行中にマウスホイールによるスクロールはできない
    > Redraw = false は画面描画が完全に止まるので、マクロからであってもホイールからであってもスクロールさせることは不可能
    > 上記は、JScript、V8マクロいずれも同様

    はい、仕様についてはそのとおりです。

    > その認識の下で、以下の考えが生まれました。
    >
    > 画面描画されている状況 (Redraw = true) であれば、マクロ処理に伴うスクロールはされるのだから、マウスホイールでスクロールもできないものだろうか?
    > Redraw = false の場合、画面の表示処理が完全に止まるので、スクロールもできなさそう

    なるほど、今回のご提案の発端が「Redraw = trueを指定しているのにホイール操作でスクロールできない」というところから来ていた、というわけですね。

    突然 Redraw プロパティの話題が出たため、少し混乱しました。

    > なので、以下のような気持ちで要望を書いていました。
    >
    > Redraw = true 時 → マクロ処理中にマウスホイールでスクロール操作をしたい

    はい。Redraw = true、または、何も指定しない場合は、マクロ処理中にホイール操作でスクロールできるようになります。

    > Redraw = false 時 → 特に希望なし。この要望によって結果的に Redraw = false 中の処理に影響があっても構わない (スクロール操作はいずれにせよ処理終了時点でしか画面反映されないため)

    この点については、説明が不足していました。

    Redraw = falseの場合、画面の再描画が停止するだけでなく、ホイール操作などの入力も OS レベルで無視されます。

    そのため、ホイール操作によって、停止中の画面の裏でスクロールが発生していたり、処理が保留されて後で反映される、といったことはありません。

    > 「Redraw = true の場合の処理のみ変えてほしい」といった条件付けは特に意図しておらず、あくまで実装結果を Redraw = true でのみ見ることができればよくて、 Redraw = false 中の処理は問いませんよという感じですね。

    それを聞いて安心しました。

    もともと Redraw って「再描画を止めるためのプロパティ」という認識だったので、Redraw = trueをわざわざ指定する場面が思い浮かばず、「何か特別な意図があるのかな?」と思ってしまいました😅

     |  Kuro  |  返信
  18. なにかと余計な混乱を招いてしまって申し訳ないです…🙇‍♂️

    ともかく当初の要望どおりの動きが実現できたとのことで、とても楽しみです。直近、Geminiさんは2.0となり、GPTの方も間もなく4.5が出てくるとのことで、この新機能でますます使いやすくなりそうだなぁとワクワクしています😁

     |  yuko  |  返信
  19. ver 3.7.13 リリースご苦労さまです!

    早速、搭載していただいた document.KeepScrollPos プロパティ、 editor.ExecuteMacro メソッドをGeminiさん相談マクロで使って、動作中スクロールの挙動と起動時のポップアップ表示の高速化を試してみました。

    https://www.haijin-boys.com/wiki/Google_Gemini_に相談#V8_開発版
    -> V8 開発版

    しばらく日常使いして動作確認をしようと思っていますが、今のところ良好です。特に、スクロールが自分で動かせるのでゆっくり読んでいけて良いですね😁

     |  yuko  |  返信
  20. ありがとうございます!

    > https://www.haijin-boys.com/wiki/Google_Gemini_に相談#V8_開発版
    > -> V8 開発版

    早速試させていただきました。おおー、メニュー表示が速くなってますね!スクロール位置の維持もいい感じです。

    call_gemini_api.jsが別ファイルになるのは仕方ないと思いますが、QuickJS ならテンプレートリテラル (`) が使えるので、1 つのファイルに組み込むこともできそうですね。

    ちなみに、ExecuteMacroのファイルの相対パスは次の順で参照されます。

    1. 呼び出し元のマクロからの相対パス
    2. Mery\Macrosフォルダーからの相対パス
    3. ルートマクロからの相対パス
      例: 親マクロ → 子マクロ → 孫マクロの場合は、親マクロがルートマクロ

    この仕様を利用すると、Mery\Macrosに共通処理 (call_gemini_api.jsなど) を置いておけば、Gemini に相談.jsがどこにあっても相対パスでcall_gemini_api.jsを呼び出せます。

    > しばらく日常使いして動作確認をしようと思っていますが、今のところ良好です。特に、スクロールが自分で動かせるのでゆっくり読んでいけて良いですね😁

    動作確認のご協力ありがとうございます。リリースした瞬間にバグが見つかる現象が発生しないことを祈るばかりです…😮‍💨

     |  Kuro  |  返信
  21. > `call_gemini_api.js`が別ファイルになるのは仕方ないと思いますが、QuickJS ならテンプレートリテラル (`) が使えるので、1 つのファイルに組み込むこともできそうですね。

    なるほど、その手が…🤔 なんとなく、クォーテーション内のクォーテーションエスケープを気合い入れてやればJScript上でも1つにまとめることもできそうな気がしてきました。でもテンプレートリテラルの方が絶対に手軽なのでなかなか気乗りしないかんじ…🫠

    > ちなみに、`ExecuteMacro`のファイルの相対パスは次の順で参照されます。

    おお、.bashrc の呼び出し順みたいな感じで、スマートで親切な仕様!流石です。

     |  yuko  |  返信
スポンサーリンク