plugin 作者、あなたは天使だ

http://d.hatena.ne.jp/janus_wel/20081105/1225832798 にこんなにつっこんでもらえると思わなかった。あと昨日今日のおれの日記タイトルに関して s/plugin 作者/ヴァニラさん/g するといいよ。いやなんとなく。

bat を使う方法

http://d.hatena.ne.jp/janus_wel/20081105/1225832798#chttp://d.hatena.ne.jp/teramako/20081105/p1 を併せて以下のようなスクリプトを書いてみた。いやまぁ書いてみたっていうか写経してみたカンジ。ディレクトリ構成は以下のような感じでとりあえず現状の設定を移動しなくてもいいようにしてみた。 bat とかひさびさに書いたぜ。ふー。

  • C:\Documents and Settings\USERNAME\Config\
    • vimperator.bat
    • .vimperatorc
    • vimperator
      • plugin
      • colors
    • vimperator1.2
    • other profile
@echo off
setlocal

@rem name vimperator.bat
@rem Usage: vimperator.bat [PROFILE_NAME] [-no-remote] [OTHER_ARGUMENTS]

@rem set common ( root ) directory
set COMMON_DIR=
if "%COMMON_DIR%" == "" set COMMON_DIR=%~dp0

@rem profile name is first argument
set PROFILE_NAME=%1

@rem :help initialization
set VIMPERATOR_HOME=%COMMON_DIR%%PROFILE_NAME%

@rem environment variable MOZ_NO_REMOTE is bool to multiple launch for firefox
@rem refer: http://level.s69.xrea.com/mozilla/index.cgi?id=20060107_DupFirefox
set MOZ_NO_REMOTE=
for %%i in (%*) do (
    if "%%i" == "-no-remote" set MOZ_NO_REMOTE=true
)

@rem launch
start "" "C:\Program Files\Mozilla Firefox\firefox.exe" -p %PROFILE_NAME%

endlocal

Magic Formation を以下のように設定して使ってる。


vimperatorrc 内で自動認識させる方法

http://d.hatena.ne.jp/nokturnalmortum/20081105#1225877001 の方法。うちの環境でも動くのを確認。ただ、これだと vimperatorrc をわけることができないので細かい制御ができないけどプロファイル名の認識を自動でやってくれるのでたとえば 2.0pre しか使わないという状況で plugin だけ細かくわけたい場合に適していると思う。

wsh を使う方法

bat でできるなら wsh でもできるはずと思って以下のスクリプトを書いてみたんだけど最後の Run でこける。オプション指定なしだと default のプロファイルで立ち上がるんだけど。もしかしてアプリケーションのオプションがハイフンの形式だとうまくいかないとか ?

@if (false)==(false) echo off
cscript //Nologo /E:JScript "%~f0" %*
goto :EOF
@end

var fso = WScript.CreateObject('Scripting.FileSystemObject');
var commonDir = fso.GetAbsolutePathName('.\\');

var args = WScript.Arguments;
var profileName = args.Item(0);
var vimpHome = commonDir + '\\' + profileName;
WScript.Echo(vimpHome);

var noRemoteFlag;
for (var i=0, max=args.length ; i<max ; ++i) {
    var arg = args.Item(i);
    if (arg === '-no-remote') noRemoteFlag = 'true';
}

WScript.Echo(noRemoteFlag);

var wshShell = WScript.CreateObject('WScript.Shell');
var envVar = wshShell.Environment('USER');
envVar.Item('VIMPERATOR_HOME') = vimpHome;
envVar.Item('MOZ_NO_REMOTE') = noRemoteFlag;
WScript.Echo(envVar.Item('VIMPERATOR_HOME'));
WScript.Echo(envVar.Item('MOZ_NO_REMOTE'));

// そんなファイルはねぇよと怒られる。よくわからん。
var command = '"C:\\Program Files\\Mozilla Firefox\\firefox.exe -p ' + profileName + '"';
WScript.Echo(command);

wshShell.Run(command);