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つの枠に出てタブが増えていくということは無いようにできます。
ブラウザ枠の場合は幾つかやり方があって、書き方が少々ややこしくなりますが、共
通のものだけでなく個別ブラウザ枠(タブごともの)など、様々な方法で指定できたり
します。

[ ]
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":"l
eftside",
  }
  """;
endmacro;

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

browserpanecommand "{\"uri\":\"https://hide.maruo.co.jp/\",\"target\":\"_com
mon\",\"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() の詳しいご説明をありがとうございました。

今度、使ってみます。

[ ]