作成したマクロについてアドバイスが欲しNo.02788
ませま さん 01/12/09 12:45
 
少し前に作ったマクロについて,アドバイスをもらえたらと思います.

作成したマクロの機能は選択中の文字列を CraftLaunch に送るだけの
簡単なマクロです.CraftLaunch というのはめちゃめちゃ強力なコマ
ンド型ランチャのことです.

CraftLaunch を使っていない人には何のことか分らないと思うけど,こ
のマクロによって,選択中の文字列をいきなりオンラインの辞書で調べ
るとか,いきなりサーチエンジンで検索するとかできます.

また,文字列を選択しないで起動したときは現在のファイル名を送りま
す.これは編集中のファイルをブラウザなど,他のアプリで開き直すと
きに使います.

もちろん,使う人のやる気次第で他にもいろいろできると思います.

さて,このマクロを公開しようかと思っているのだけど,マクロは素人
なもので,不都合あるとまずいです.

そこで,CraftLaunch 使っている人で,しかもマクロに詳しい人いたら
次の点についてアドバイス欲しいです.

1.既に同じようなマクロが(ある/ないとおもう)
2.秀丸の設定に依存するような不都合がある.
3.こんな機能付けたら?
4.コーディングが不自然である

以上,よろしくお願いします.

マクロのソース:
// ---( s t a r t )--------------------------------------------
//【 マクロ名 】: ませCL Ver 1.00b
//【ファイル名】: maseCL.mac
//【 作    者 】: ませま xxxxxx@ma4.justnet.ne.jp
//【 サポート 】: http://www4.justnet.ne.jp/~masema/
//【 機    能 】: 選択中の文字列を CraftLaunch 送信する.
//
// このマクロは CraftLaunch がインストールされていないと使えません.
// CraftLaunch の入手先:
//   http://hp.vector.co.jp/authors/VA012411/
// ------------------------------------------------------------
// パス設定:CraftLaunch のパスを設定して下さい.
$Craft_Path="C:\\usr\\bin\\clnch\\clnch.exe";
// オプション設定:わかる人だけ編集して下さい.
$Craft_Optinon="/c0 ;";
if (!selecting) {
  $sword = "\"" + filename2 + "\""; // 選択中じゃないなら現在編集中のファイル名
} else {
  copy2;
  beginclipboardread;
  $sword = "\"" + getclipboard + "\"";
}
run $Craft_Path + " " + $Craft_Optinon + $sword;
if(!result) message "CraftLaunch の起動に失敗しました.\nclnch.exe の Path
の設定を確認して下さい.";
endmacro;
// ---(   e n d   )--------------------------------------------

[ ]
RE:02788 作成したマクロについてアドバイNo.02796
ひろ さん 01/12/09 22:35
 
 ませまさん今日は、ひろです。
> 少し前に作ったマクロについて,アドバイスをもらえたらと思います.
 CraftLaunch を使っていないので、気づいたところだけフォローを入れます。

> 選択中の文字列をいきなりオンラインの辞書で調べ
> るとか,いきなりサーチエンジンで検索するとかできます.
 これについては、適切な文字列をブラウザに渡してやれば、外部ツールを
使用しなくてもほとんどの場合上手くいきます。google の例が
hidesoft.2:09310 にありますので、興味があればご覧ください。

> これは編集中のファイルをブラウザなど,他のアプリで開き直すと
> きに使います.
 こちらも同様にできます。こちらのライブラリにも、NN (Ver.6.x では、
再表示が上手く動作しない?) と I.E に対応したマクロがあります。ほとん
どの場合、
run $application " \"" + filename + "\"";
でできますよね。

 ただどの場合も、個別にマクロを組まなければならないのが、今回のマク
ロに比べると欠点と言えますね。

> $Craft_Path="C:\\usr\\bin\\clnch\\clnch.exe";
 もしレジストリなどで、自動で取得可能なら、その様にコーディングする
とユーザが使いやすいと思います。例えば、
> openreg "LOCALMACHINE",
> "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\clnch.exe";
> $Craft_Path = getregstr( "" );
> closereg;
という要領になると思います。(上記のレジストリは適当です。)

>   copy2;
>   beginclipboardread;
>   $sword = "\"" + getclipboard + "\"";
 この方法では、クリップボードが書き変わってしまい、ペースト時にユーザーが戸惑
わないと思います。必ずしもクリップボーである必要がなければ、
$sword = getext(seltopx.,seltopy,selendx,selendy);
の方がベターだと思います。

> run $Craft_Path + " " + $Craft_Optinon + $sword;
これだと、$Craft_Path, $Craft_Optinon, $sword に空白が含まれていた場
合、上手く動作しないと思いますが、良いのでしょうか? 必要ならば、
「" (マクロ内なので「\"」)」で括る必要があると思います。

[ ]
RE:02796 作成したマクロについてアドバイNo.02799
ませま さん 01/12/10 00:31
 
 ませまです.
  ひろさん,早速のレスありがとうございます.

> CraftLaunch を使っていないので、気づいたところだけフォローを入れます。
>
>> 選択中の文字列をいきなりオンラインの辞書で調べ
>> るとか,いきなりサーチエンジンで検索するとかできます.
> これについては、適切な文字列をブラウザに渡してやれば、外部ツールを
>使用しなくてもほとんどの場合上手くいきます。google の例が
>hidesoft.2:09310 にありますので、興味があればご覧ください。
<途中省略>
> ただどの場合も、個別にマクロを組まなければならないのが、今回のマク
>ロに比べると欠点と言えますね。

  教えて頂いた記事確認しました.Readme 作るときに参考にしようと
思います.僕のマクロだと CraftLaunch の設定次第で何でもできるの
が売り,といったとこです.

  本当は Fortran ソースの印刷に a2p とか xyzzy とか使うときに
いちいち印刷ツールごとにマクロ作るのいやなので作ったマクロです.
  他にも,カレントフォルダをファイラで開くときにも使っています.

>> $Craft_Path="C:\\usr\\bin\\clnch\\clnch.exe";
> もしレジストリなどで、自動で取得可能なら、その様にコーディングする
>とユーザが使いやすいと思います。例えば、
>> openreg "LOCALMACHINE",
>> "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\clnch.exe";
>> $Craft_Path = getregstr( "" );
>> closereg;
>という要領になると思います。(上記のレジストリは適当です。)

  レジストリは使わないソフトなので無理そうです.一応実行ファイルの
名前でレジストリを検索してみたけど検出されませんでした.
自動推定の機能は欲しいと思うのだけど,うまい手が無いです.

>必ずしもクリップボーである必要がなければ、
>$sword = getext(seltopx.,seltopy,selendx,selendy);
>の方がベターだと思います。

  全然考えてませんでした.これは即採用させて頂きます(^^)

>> run $Craft_Path + " " + $Craft_Optinon + $sword;
>これだと、$Craft_Path, $Craft_Optinon, $sword に空白が含まれていた場
>合、上手く動作しないと思いますが、良いのでしょうか? 必要ならば、
>「" (マクロ内なので「\"」)」で括る必要があると思います。

  ホントだ,と思ってチェックしてみたら $Craft_Path, $Craft_Optinon
は何故か空白は大丈夫でした.ただ,Win98 と Win2k しかチェックしてい
ないので,環境によってはうまくいかないかもわかりません.

  ちなみに,$sword は悲惨な結果に終わりました(^^;

  取り急ぎ,ご指摘の不都合を修正したバージョンを作成したのでアップし
ておきます.後日,マニュアルを作り,ピカピカの最新バージョンをライ
ブラリにアップしようと思います(^^)

  詳しいご指摘,ありがとうございました.

// ---( B E G I N )--------------------------------------------------
//【 マクロ名 】: ませCL Ver 1.00b2
//【ファイル名】: maseCL.mac
//【 作    者 】: ませま xxxxxx@ma4.justnet.ne.jp
//【 サポート 】: http://www4.justnet.ne.jp/~masema/
//【 機    能 】: 選択中の文字列を CraftLaunch に送信する.
//
// このマクロは CraftLaunch がインストールされていないと使えません.
// CraftLaunch の入手先:
//   http://hp.vector.co.jp/authors/VA012411/
// ------------------------------------------------------------------
// パス設定:CraftLaunch のパスを設定して下さい.
$Craft_Path="C:\\usr\\bin\\clnch\\clnch.exe";
// オプション設定:わかる人だけ編集して下さい.
$Craft_Optinon="/c0 ;";

// 次の行いらないかも.
$Craft_Path    = "\"" + $Craft_Path + "\"";

if (!selecting) {
  $sword = "\"" + filename2 + "\""; // 選択中じゃないなら現在編集中のフ
ァイル名
} else {
  $sword = "\"" + gettext(seltopx, seltopy, selendx, selendy) + "\"";
}
run $Craft_Path + " " + $Craft_Optinon + $sword;
if(!result) message "CraftLaunch の起動に失敗しました.\nclnch.exe の
Path の設定を確認して下さい.";
endmacro;
// ---(   E N D   )--------------------------------------------------

[ ]
RE:02799 作成したマクロについてアドバイNo.02804
ませま さん 01/12/10 18:25
 
 ませまです.

  先日,ひろさんに指摘してもらった不都合箇所を修正したバージョンがで
きたのでアップします.クリップボードの利用をやめて,gettext を利用し
たことにより,わかってないユーザが複数行にわたる長い文字列を送ってし
まった場合にマズイことになりそうだったので,

1.限界文字数を設定.
2.改行文字をランチャに渡しても意味が無いので除去する処理を追加.

  ということにしました.2番の処理はもうちょっとスマートにできそう
なので,もうちょっと考えてみます.現在の方法は

  無限ループ開始
  ・$sword の中にある改行文字の位置を strstr で取得
  ・無かったら大丈夫だからループから出る.
  ・あったらその右側と左側の文字列をくっつけた文字列を新たに $sword に
    割り当てる
  無限ループおしまい

  簡単な方法に心当たりある人いたら,是非教えて下さい.

  また,何も選択していないときはカレントフォルダを送る,というのも使
えると思い,フラグを立てて,ユーザが選択できることにしました.将来的
にはパターンを増やそうかと考えています.

  たぶん,これといって(前回のような)酷い問題はないと思うので,マニュアル
ができたらライブラリにアップしようと思います.

  CraftLaunch は僕が知る限り最強のランチャです.やや上級者向けだけど
Orchis などのメニュー型ランチャなどとは比較にならない速さです.
アプリケーションを沢山使う人とかは特に,導入を検討してみて欲しいです(^^)

// ---( B E G I N )--------------------------------------------------
//【 マクロ名 】: ませCL Ver 1.00b3
//【ファイル名】: maseCL.mac
//【 作    者 】: ませま xxxxxx@ma4.justnet.ne.jp
//【 サポート 】: http://www4.justnet.ne.jp/~masema/
//【 機    能 】: 選択中の文字列を CraftLaunch に送信する.
//
// このマクロは CraftLaunch がインストールされていないと使えません.
// CraftLaunch の入手先:
//   http://hp.vector.co.jp/authors/VA012411/
// ----------------------------------------------------------------------
// パス設定:CraftLaunch のパスを設定して下さい.
$Craft_Path="C:\\usrapp\\c test\\clnch.exe";
// オプション設定:わかる人だけ編集して下さい.
$Craft_Optinon="/c0 ;";

// 選択せず起動したときの動作( 0: カレントフォルダ, 1: 編集中のファイル名 )
#flg = 1;
// 送れる文字数の最大値
#sword_lim=512;

// 次の行いらないかも.
$Craft_Path    = "\"" + $Craft_Path + "\"";

if (!selecting) {
  // 選択中じゃないとき
  if(#flg == 0) {
    $sword = "\"" + directory2 + "\"";
  } else if(#flg == 1) {
    $sword = "\"" + filename2 + "\"";
  }
} else {
  $sword = "\"" + gettext(seltopx, seltopy, selendx, selendy) + "\"";
  // 文字が多すぎたらエラー
  if (strlen($sword) > #sword_lim) {
    message "文字数が多すぎます.";
    endmacro;
  }
  // 改行が含まれていたら除去.
  while(1) {
    #l_len = strstr($sword, "\n");
    if (#l_len < 0) break;
    #r_len = strlen($sword) - #l_len;
    $sword = leftstr($sword, #l_len - 1) + rightstr($sword, #r_len - 1);
  }
}
run $Craft_Path + " " + $Craft_Optinon + $sword;
if(!result) message "CraftLaunch の起動に失敗しました.\nclnch.exe の Path
の設定を確認して下さい.";
endmacro;
// ---(   E N D   )--------------------------------------------------

[ ]