[ 新規に投稿する ]

Google検索で同一タブNo.10184
おすぎ さん 23/09/15 09:56 [ コメントを投稿する ]
お世話様です。

見よう見まねで、ネット検索マクロを作って使ってます。

主なコードはこんな感じです。
run getenv("Comspec") + " /c start " + $URL + " >nul";

これだと、検索ごとに別タブが開きます。
これを、毎回同一タブにすることは可能でしょうか?

毎回、別タブが開くより、同一タブの方が処理が速いのではないかと期待しています。


場違いな質問だったらスミマセン。
[ ]
RE:10184 Google検索で同一タブNo.10185
秀丸担当 さん 23/09/15 16:02 [ コメントを投稿する ]
  URLを開く方法として、run文の場合cmd.exeとstartを経由することになっているので、直接開くようにしたほうがいいかもしれません。

openbyshell $URL;

とすると、開くことができます。
chromeやedgeなどのブラウザを、外部アプリ(=秀丸エディタ)から開く場合、新しいタブが出るのを制御するのは、普通はできなさそうです。
(もしかしたら特殊なやり方があるかもしれないですが)

最近の秀丸エディタであれば、ブラウザ枠を使って秀丸エディタの枠の1つとして表示させることができます。

showbrowserpane 1;
setbrowserpaneurl $URL;

こちらの場合は、1つの枠に出てタブが増えていくということは無いようにできます。
ブラウザ枠の場合は幾つかやり方があって、書き方が少々ややこしくなりますが、共通のものだけでなく個別ブラウザ枠(タブごともの)など、様々な方法で指定できたりします。
[ ]
(発言者削除)No.10186
おすぎ さん 23/09/15 16:24
 
[ ]
RE:10185 Google検索で同一タブNo.10187
おすぎ さん 23/09/18 14:39 [ コメントを投稿する ]
詳しい説明をありがとうございます。

さっそく実行してみます。
[ ]
RE:10187 Google検索で同一タブNo.10188
おすぎ さん 23/09/18 14:43 [ コメントを投稿する ]
すみません。

browserpanecommand の使い方について教えてください。

マクロヘルプにはこのような例が書かれています。
//例1
browserpanecommand """
  {
    "target":"_common",
    "show":1,
    "uri":"https://hide.maruo.co.jp/",
    "place":"leftside",
  }
  """;
endmacro;

"https://hide.maruo.co.jp/" の部分に、URLが記憶されたパラメータを
指定するにはどうするのでしょうか?

 "uri": $URL1 + $URL2,

とかで良いのでしょうか?
[ ]
RE:10188 Google検索で同一タブNo.10189
でるもんたいいじま さん 23/09/18 23:20 [ コメントを投稿する ]
  でるもんた・いいじまです。

> マクロヘルプにはこのような例が書かれています。
> //例1
> browserpanecommand """
>   {
>     "target":"_common",
>     "show":1,
>     "uri":"https://hide.maruo.co.jp/",
>     "place":"leftside",
>   }
>   """;
> endmacro;

> "https://hide.maruo.co.jp/" の部分に、URLが記憶されたパラメータを
> 指定するにはどうするのでしょうか?

まずは上記の例題の、 """ という表記の意味を理解する必要があります。
こんなマクロを実行してみてください。

message """
こんにちは。
こうやって、" を何度も使わずに、
\nなどの表記も使わずに、
長い文字列を、
簡潔に書くことができます。
""";

次に、browserpanecommand のパラメータの指定順は「順不同」です。
なので上記の例題は、たとえば

browserpanecommand """
  {
    "uri":"https://hide.maruo.co.jp/",
    "target":"_common",
    "show":1,
    "place":"leftside",
  }
  """;
endmacro;

と書いてもいいわけです。ついでに言うとコンマの後の改行も不要で、

browserpanecommand """
  {
    "uri":"https://hide.maruo.co.jp/","target":"_common","show":1,"place":"leftside",
  }
  """;
endmacro;

でもかまいません。
さらにいうと、""" を使って書かなければいけない、という制約もないので、古典的な表記法で

browserpanecommand "{\"uri\":\"https://hide.maruo.co.jp/\",\"target\":\"_common\",\"show\":1,\"place\":\"leftside\",}";
endmacro;

と書いても動作自体は変わりません。

というわけで、パラメータを色々と変数で指定したい、でも最近のバージョンで追加された新しい文法はよく分からない、という場合には、こんな書き方が順当だと思います。

$s ="{";
$s = $s + sprintf("\"%s\":\"%s\",", "uri", $uri);
$s = $s + sprintf("\"%s\":\"%s\",", "target", $target);
$s = $s + sprintf("\"%s\":%d,", "show", #show); // ここだけ %d なので注意
$s = $s + sprintf("\"%s\":\"%s\",", "place", $place);
$s = $s + "}";
browserpanecommand $s;
endmacro;
[ ]
RE:10189 Google検索で同一タブNo.10190
でるもんたいいじま さん 23/09/18 23:40 [ コメントを投稿する ]
  でるもんた・いいじまです。追記。

> $s ="{";
> $s = $s + sprintf("\"%s\":\"%s\",", "uri", $uri);
> $s = $s + sprintf("\"%s\":\"%s\",", "target", $target);
> $s = $s + sprintf("\"%s\":%d,", "show", #show); // ここだけ %d なので注意
> $s = $s + sprintf("\"%s\":\"%s\",", "place", $place);
> $s = $s + "}";
> browserpanecommand $s;
> endmacro;

念のため、browserpanecommand $s; の直前に message $s; を入れて、$s が最終的にどんな内容になったか確認してみてください。

特に、もし browserpanecommand で「パラメーターの書式がおかしい」といった主旨のエラーが出た場合は、直前の message $s; で、記号類がきちんと正しく使われているかチェックしてみて下さい。
[ ]
RE:10190 Google検索で同一タブNo.10191
おすぎ さん 23/09/19 09:37 [ コメントを投稿する ]
  でるもんた・いいじま さま

ご丁寧な回答をありがとうございました。

ですが、一番知りたかった以下の箇所は さっぱり分かりませんでした。

$s ="{";
$s = $s + sprintf("\"%s\":\"%s\",", "uri", $uri);
$s = $s + sprintf("\"%s\":\"%s\",", "target", $target);
$s = $s + sprintf("\"%s\":%d,", "show", #show); // ここだけ %d なので注

$s = $s + sprintf("\"%s\":\"%s\",", "place", $place);
$s = $s + "}";
browserpanecommand $s;
endmacro;
[ ]
RE:10191 Google検索で同一タブNo.10192
秀丸担当 さん 23/09/19 14:19 [ コメントを投稿する ]
  従来マクロのbrowserpanecommandは、1つの文字列だけになっています。
でるもんたいいじまさんの書かれている方法でも、どんな方法でもいいので、とにかくそういう文字列となるようにすればいいです。

"""〜"""の文字列の書き方は、V9.19あたりから書けるようになった新しめの書き方です。
詳しくはマクロヘルプの、「目次− 式について−文字列」 のところに各種の説明があります。
"""〜"""を使うとしたら、以下のような感じに書くとわかりやすいです。

$URL1="https://hide.maruo.co.jp/";
$URL2="software/hidemaru.html";
browserpanecommand
""""""""""""
{
  "target":"_common",
  "show":1,
  "uri":"
""""""""""""
+$URL1+$URL2+
""""""""""""
",
  "place":"leftside",
}
"""""""""""";
endmacro;


------------

JavaScriptを使ってもよければ、JavaScriptのほうがやりやすいです。
1つの文字列ではなく、{〜}のオブジェクトとして扱えるので、{}の中でそのまま計算とかできたりします。

js{
  URL1="https://hide.maruo.co.jp/";
  URL2="software/hidemaru.html";
  browserpanecommand({
      target:"_common",
      show:1,
      uri:URL1+URL2,
      place:"leftside",
    });
}
endmacro;

大部分は従来マクロで、browserpanecommandだけJavaScriptにするとしたら、以下のような感じになります。

$URL1="https://hide.maruo.co.jp/";
$URL2="software/hidemaru.html";
js{
  URL1=getVar("$URL1");
  URL2=getVar("$URL2");
  browserpanecommand({
      target:"_common",
      show:1,
      uri:URL1+URL2,
      place:"leftside",
    });
}
endmacro;
[ ]
RE:10192 Google検索で同一タブNo.10193
おすぎ さん 23/09/19 15:03 [ コメントを投稿する ]
  秀丸担当さま

詳細なご回答をありがとうございました。

秀丸マクロで JavaScript が書けるようになって、だいぶ使い勝手が良くなった
のだと思います。勉強したいと思います。

ありがとうございました。
[ ]
RE:10191 Google検索で同一タブNo.10194
でるもんたいいじま さん 23/09/20 13:40 [ コメントを投稿する ]
  でるもんた・いいじまです。

> でるもんた・いいじま さま
> ご丁寧な回答をありがとうございました。
> ですが、一番知りたかった以下の箇所は さっぱり分かりませんでした。

もしかして、「sprintf() の使い方が分からない」ということでしょうか?
当初、「そこまで念押しするのは逆に失礼かな」と思って削ったのですが、やはり念押ししておいたほうがよかったでしょうか?

sprintf() はいろいろ使い勝手の大きい関数ですし、最近の言語には大抵備わっていますので、もしまた何か機会があれば、ぜひその時にでも調べてみていただきたいです。

#でもなぜか私の知る限り、JavaScriptにはまだ採用されていないのですよね…

> $s ="{";
> $s = $s + sprintf("\"%s\":\"%s\",", "uri", $uri);
> $s = $s + sprintf("\"%s\":\"%s\",", "target", $target);
> $s = $s + sprintf("\"%s\":%d,", "show", #show); // ここだけ %d なので注意
> $s = $s + sprintf("\"%s\":\"%s\",", "place", $place);
> $s = $s + "}";

ちなみに、sprintf() を使わず、JavaScriptの併用もしない書き方としては、次のような方法があります。

$s ="{\n";
$s = $s + "\"uri\":\""+$uri+"\",\n";
$s = $s + "\"target\":\""+$target+"\",\n";
$s = $s + "\"show\":"+str(#show)+",\n";
$s = $s + "\"place\":\""+$place+"\",\n";
$s = $s + "}";
message $s;  // 動作確認完了後はコメントアウトしてOK
browserpanecommand $s;
endmacro;

もちろん、たとえば「target に指定するのは "_common" で固定」ということであれば、わざわざ変数に入れずに直接
$s = $s + "\"target\":\"_common\",\n";
のように書いてもかまいません。

また、\n をいろんなところに入れていますが、これは読みやすさのためで、ぜんぶ削ってしまっても構いません。

以上、ご参考までに。
[ ]
RE:10194 Google検索で同一タブNo.10195
おすぎ さん 23/09/20 16:29 [ コメントを投稿する ]
  でるもんた・いいじま さま

sprintf() の詳しいご説明をありがとうございました。

今度、使ってみます。
[ ]

[ 新規に投稿する ]