更新日時 : 2009-02-09 18:40
DropboxによるFirefoxのプロファイル共有をサポートするアドオンDropfoxのバージョン0.3.0をリリースしました。設定ファイル中のJavascriptからbashやPowerShellなどのシェルコマンドを実行し結果を文字列で受け取ることができるようになりました。任意の外部設定ファイルもスクリプト中から実行できるようになっています。また、それらの機能を使用するためのDropfox API を公開しました。
Dropfoxとは
DropfoxとはDropboxなどを利用した複数の異なる環境をまたがったプロファイル共有をサポートするFirefox拡張機能(アドオン)です。環境変数や通常のJavascriptコードなどが記述可能な言わば「拡張版user.js」がOS別に複数使用できるようになります。これにより、キャッシュフォルダの位置やダウンロードファイルの保存先、外部エディタのパスなど、一部の設定だけをその環境に適した値に変更できます。
Dropfox 0.3.0 のスクリーンショット
Dropfox 0.3.0 の主な変更点
- 設定ファイル中のJavascriptからShellクラスによるシェルスクリプトの実行が可能に(sh, bash, zsh, PowerShellで動作確認)。実験的実装。
- 任意の外部設定ファイルをスクリプト中から実行可能に(execFile()関数)
- 多数のDropfox APIを設定ファイルのJavascriptから利用可能に
- 共有設定ファイル・外部設定ファイルを任意のエディタで開くボタンを追加
- 共有設定ファイルをリロードするボタンを追加
- 外部設定ファイル用のファイル選択ダイアログ追加
- 適用ボタンの追加
- about:configを開くボタンを追加
- APIリファレンスを開くボタンを追加
- プロファイルフォルダを開くボタンを追加
- バージョン表記をオプションウィンドウ下部に
- オプションウィンドウ下部に公式サイト・ブログ・AMOへのリンク追加
- 外部ファイルのロードの進捗状況を表すプログレスバー表示機能追加
- テスト実行の中断ボタン追加(外部ファイルのロード時のみ反応)
- 実行結果をタブ表示する設定追加
- 実行結果の内容を字下げして見やすく
- テスト実行結果をタブ表示する設定を追加
- 設定ファイルのパーミッション変更(0664→0600)
- コンフリクトファイル自動削除機能でFirefox終了時の処理を同期処理に
- en-USのメッセージをいくつか修正
- その他数え切れない細かい修正
インストール
Dropfox公式サイト
addons.mozilla.org
上記2つのリンク先のどちらからでもインストールできますが、addons.mozilla.orgの方はアカウント登録が必要です。addons.mozilla.orgでインストールした場合は自動アップデートチェック機能は利用できません。公式サイトの方でインストールした場合は自動アップデートチェック機能が利用できます。
Dropfox API について
Dropfoxの内部処理で使用している関数やクラス、変数や定数をDropfox APIを公開しました。設定ファイル中で自由に利用できます。
Dropfoxは基本的にはuser.jsと同様の設定ファイル内のuser_pref()関数でFirefoxの設定値を書き換えることに特化した拡張ですが、設定ファイルには通常のJavascriptコードやXPCOMのような特権コードを記述しても動作するようになっています。それに加えて今回のAPIを利用すればより自由度の高いコードが書けると思います。ぜひおもしろい使い方を模索してみてください。
APIリファレンスの専用ページを用意しました。まだ未完ですが今回のアップデートの目玉でもあるShellクラスについてはそれなりの情報を載せています。オプションウィンドウにもリファレンスを開くボタンが追加されています。
Dropfox API Reference for Ver. 0.3.0 JA
Dropfox APIのShellクラスを使ってJavascriptからシェルコマンドが実行可能
設定ファイル中のJavascriptからshやbashやzsh、PowerShellなどのシェルコマンドを実行し、結果を文字列で受け取ることができるようになりました。以下のようなJavascriptコードでシェルコマンドが実行できます。
var shell = new Shell("/bin/bash", "/home/itmst/tmp", "UTF-8");
var res = shell.cmd("ls /");
Shellクラスコンストラクタ の第1引数はシェルプログラムのパス(省略可)。第2引数は作業ディレクトリ(省略可)。第3引数はシェルとやりとりする文字セット(省略可)。インスタンスを生成したらあとはcmdメソッドに実行したいシェルコマンド文字列を渡してやると実行結果文字列が変数resに格納されます。ここでは「ls /」でルートディレクトリのファイルリストを取得しています。cmdメソッドに渡すのは複数行にわたるしっかりしたシェルスクリプトでもかまいません。
詳細はリファレンスの
Shellを見て下さい。
Shellクラスを使ってCygwinのbashとやりとりする場合
Windows + Cygwin環境なら以下のようにCygwin上のbashとやりとりできます。
var cygbash = new Shell("D:\\cygwin\\bin\\bash.exe", null, "Shift_JIS");
var cygbash.option = "--login -i"; //ログインオプション(なくても可)
var res = cygbash.cmd("ls -al");
Shellクラスを使ってWindowsPowerShellとやりとりする場合
WindowsPowerShellの同じように利用できます。ただし前もってSet-ExecutionPolicyでスクリプトの実行ポリシーをRemoteSignedなどに変更しておく必要があります。
var ps = new Shell("c:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe");
var res = ps.cmd("dir");
スクリプト中から任意の設定ファイルを実行可能に
今までDropfoxで利用可能な設定ファイルは各OSごとに「共有設定ファイル」と「外部設定ファイル」の2ファイルでしたが、設定ファイル内のJavascriptコードから任意の設定ファイルをロードして実行できるようになりました。Dropfox APIのexecFile()関数を使います。設定ファイルのフルパスを渡すだけです。
execFile("C:\\User\\itmst\\myPrefs.js");
環境変数や特殊フォルダ変数が自由に変換可能に
いままでのバージョンではuser_pref()関数の第2引数内のみに ${変数名} 形式の変数を記述可能でした。
user_pref("hoge.foo.bar", "${USERPROFILE}\\boo.js");
これが0.3.0では以下のようにconvVar()関数またはconvVarsInStr()関数を使って自由に変数変換できるようになっています。
//単体の変数の変換にはconvVar関数を使用する
var myprof = convVar("USERPROFILE");
//文字列中の変数の変換にはconvVarsInStr()関数を使用する
var aPath = convVarsInStr("${USERPROFILE}\\デスクトップ");
詳しくはAPIリファレンスの
convVarと
convVarsInStrを参照してください。
設定ファイルを外部エディタで開くボタン
共有設定ファイルの編集はオプションウィンドウのテキストボックスから可能でしたが、正直編集しやすいものとはいえません。これをなんとかするために外部のテキストエディタで開くボタンを追加してみました。外部エディタプログラムは設定「view_source.editor.path」の値が使用されます。