「YubNubコマンドの作り方2 (gtrs)」で作ったgtrsコマンドにあった2つの問題点を改善したgtrs2を作ったので、方法を紹介しておきます。
ここで、問題の2点をおさらいしておきます。
これらの問題は、空白を空白のままに使うためにURLエンコードを止めてしまったことによります。
順を追って説明すると、前回の方法はコマンドを次のように展開していることが問題でした。
そこで、今回は「URLエンコードは行いつつ空白は空白のまま維持する」ということと、「検索ワードに対して空白を+に置換する処理を入れる」ことで対応しようと思います。
同様に書くと、次のようになります。
まずはURLエンコードを行いつつ、空白は空白のまま維持する必要があります。
そこで、前回用いた[no url encoding]を止めて、代わりに[use for spaces]と記述してみます。
useとforの間に空白を入れることで空白を空白に置換することが可能でした。
ちょっと変な構文ですが、これに気づいたのが解決の糸口でした。
空白が空白として維持できた時点で、問題の片方は解決しています。
あとは複数ワードですが、これは{% 3 %s}を{% 3- %s}とすることで一応の解決はできます。
しかし、空白を維持してしまっているために、「A B」という文字が「A+B」となって欲しいのに、そのままになってしまっています。
そこで、URLエンコードされ空白で結合された文字列に対して「空白を+に置換せよ」というコマンドを発行してやります。
ちょっと悩みましたが、{}をネストしてやることで実現できました。
{strReplace -find " " -replace + -string {% 3- %s}}
ただし、このネストコマンドを含ませた途端にYubNubのパース処理が遅くなったように感じます。
もしかすると推奨されない処理だったのかもしれません。
とりあえず、gtrs2コマンドのURL最終形を載せておきます。
http://translate.google.com/translate_s?hl={% 1 %s}&clss=&q={strReplace -find " " -replace + -string {% 3- %s}}&sl={% 1 %s}&tl={% 2 %s}[use for spaces]
長くなってしまいましたが、レスポンスが若干悪いことを除けば、一応は不満無く完成しました。 最後にコマンド作成に便利なコマンドを紹介しておきます。