Firefoxのkeyconfigでタブ切り替えをカスタマイズ2007年08月19日 03時32分38秒

Firefoxの新規インストール久しぶりだし

ちょっと前のエントリで書いたが、ThinkPadのHDDがイカれたために久しぶりにOSからインストールしなおすハメになっていた。

余談だが、OSのファイルの一部が壊れたんだろうくらいの認識だったがそうではなく、パーティションはかろうじて認識できるが中身はまったく確認できないという状態になってた。おかげでメールやらはすっとんでしまった。よくある教訓だが、こまめにバックアップはとっておけ、ということだ。まぁ、とんで困るようなデータはそれほど多くなかったんだけどね。

で、当然ブラウザなんかもインストールしなおすことになったワケで、久々にFirefoxを新規インストール。

Firebugをはじめ、ないと困るものをころころとインストールしていき、まぁ使える環境になってきたが困ったのがタブ切り替え。

Sleipnirを使っていたころの名残で、タブの切り替えがF2・F3じゃないと落ち着かない。で、keyconfigでカスタマイズしてたんだけど、タブのフォーカスを移動させるコードが思い出せない。さて、困った。

検索してはみるが

「keyconfig タブ 切り替え」とかで検索してみるが、なかなかこれだという情報にたどり着かない(同じようなカスタマイズしている人の記事とかにはあたるけど、コードが載ってない)。

最終的になんてキーワードで検索したか覚えてないが、なんとかMDCこちらの記事に、そのものズバリのコードが載ってた。

以下、引用。

選択されているタブを変更する
タブを一つ (右へ) 移動します。
gBrowser.mTabContainer.advanceSelectedTab(1, true);
こちらは左へ移動します。
gBrowser.mTabContainer.advanceSelectedTab(-1, true);
これでなんとかF2・F3でタブ切り替えができる環境になった。快適、快適。

余談

以前(1.5ベースのころ)は、左右端のタブから循環しなくて、わざわざ循環するようなコードを書いたような記憶があるが、今は上のコードでまったく問題ない。便利になったもんだ。

Eee PCのガッカリニュース2007年08月19日 03時59分36秒

さらにガッカリ...

ちょっと前に「Eee PC 701の発売が延期になったモヨウ」というエントリを書いたが、さらにガッカリな続報が。

なにがガッカリかって、

  • エントリモデルの価格は$269~$299
  • そのエントリモデルのストレージ容量は2G
って、当初の$199からかけ離れてるじゃん!(あと発売は早くても9月後半みたい)

まだASUSの公式なコメントではないみたいだけど、$199での販売はないっぽく、かなりガッカリ。

久々にJsDok Toolkitを見てみたり2007年08月21日 15時58分26秒

なんかリファラにcode.google.comがあるんですけど

このブログのアクセスログを見てたら、リファラがhttp://code.google.com/p/jsdoc-toolkit/wiki/LinkLoveってのがあった。

なんじゃこりゃ、と思って飛んでみたら、以前のエントリで取り上げたJsDoc ToolkitプロジェクトWiki内のリンク集だった。びっくり。

たぶん検索で引っかかったんだろうけど、Boy, I really wish could read Japanese...なんてコメントされてて、日本語だけでごめんなさい

で、久々にちょっとだけチェックしてみたワケだが

で、newsのとこを見てみると、バージョンががんがんあがってて、現在は 1.2.1 みたい。以前取り上げたやつは5/27付けの 0.5.2b だったから、えらい様変わりしてるだろうなと思ってダウンロードしてみた。

ディレクトリ構成も若干変わってるけど、JSのソースも増えてた。起動スクリプトも以前は「JsDoc.js」だったんだけど、別途「run.js」といういかにも起動スクリプトなファイルが増えてて、そっからスタートするようになっている。

ふと興味を持って、appディレクトリ(以前のlibディレクトリに相当か?)内で java\. とかでgrepしてみたら、明示的にJavaのパッケージを使用しているのが

  • JsDoc.js
  • JsIO.js
  • run.js
  • Transformer.js
くらいみたい。ざっと見た限りでは即時実行のスクリプトはrun.jsくらいみたいであとはクラス定義と関数定義なので、
  • run.jsを差し替える(というか代替コードを書く)
  • Java依存の部分はfunctionを置き換える
という格好で元ソースを改変せずに以前夢見たhta版とかにできそうな予感が。あくまで予感ですが。

ふむ、時間ができたらまたソースおっかけてみようかな。

アクションメソッドで自動レンダリングを無効にする2007年08月21日 17時32分54秒

単発TIPS。つか備忘メモですな。

Zend_Controller_*でのMVCを使っていて、あるアクションコントローラのアクションメソッドのみViewRendererヘルパーの自動レンダリングを使用しない場合は、ViewRenderer->setNoRender() を使う。

以下、適当な例。downloadActionはブラウザにCSVファイルをダウンロードさせるって感じ。

class HogeController extends Zend_Controller_Action {
	public function indexAction() {
		// ほっとくと勝手にViewRendererが関連付けられた
		// ビュースクリプトでレンダリングする
	}
	
	public function downloadAction() {
		// 自動レンダリングを無効にする
		$this->_helper->viewRenderer->setNoRender();
		
		// レスポンスヘッダをセット
		// ほんとは$this->getResponse()->setHeader()を使うんだろうけど
		// コード未検証なのでheader()を使ってみる。
		header( 'Content-Disposition: inline;filename=hoge.csv' );
		// 別にapplication/octet-streamじゃなくてもいいか。
		header( 'Content-Type: application/octet-stream' );
		
		// あとはecho なんかでCSVデータを直接出力
	}
}

いや、わざわざ記事にしなくてもいいんだけど、マニュアルのどこに書いてあったかすぐ忘れちゃうもんで...

JScriptでCABファイル2007年08月22日 03時12分27秒

CABが作れそうなタイプライブラリを見つけた

なんとなくオブジェクトブラウザでライブラリ探ってたら、「COM MakeCab 1.0 Type Library」なんてのを見つけた。いかにもCABファイルが作成できそう。

クラスは「MakeCab」オブジェクトがあるだけで、このクラス自体も「AddFile」「CloseCab」「CopyFile」「CreateCab」と4つのメソッドが実装されているだけのいたってシンプルなもの。

このタイプライブラリ自体は %SystemRoot%\system32\catsrvut.dll がファイル本体で、バージョン情報を見るとMicrosoft製のものでコピーライトも「Copyright (C) Microsoft Corp. 1995-1999」となっていることから、少なくともWin2K以降のNT系列のOSでは標準DLLと思われる。

さて、使い方だが

JScriptから使ってみたいので、ともかくnew ActiveXObjectできなきゃ話にならない。とりあえず「new ActiveXObject("COMMKCABLib.MakeCab")」だの「new ActiveXObject("MakeCab")」だのと試してみたが「オートメーション サーバーはオブジェクトを作成できません。」と蹴られる。

「COM MakeCab 1.0 Type Library」でぐぐってみたらこんなのが見つかった。どうやらPythonWinで試してるようで、

c = Dispatch('MakeCab.MakeCab')
なんてコードが載っている。

さっそく「new ActiveXObject("MakeCab.MakeCab")」してみるも、これまたオブジェクトを作成できないと蹴られる。むぅ。

レジストリを眺めてみると

先の記事中にIn a key named for the CLSID {8E17FFF3-...you get the picture}なんて記述があるのでregeditで HKCR\CLSID から 8E17FFF3- で始まるキーを捜してみたところ、ProgIDが「MakeCab.MakeCab.1」、VersionIndependentProgIDが「MakeCab.MakeCab」となっていた。後者はさっきNGになったので「~.1」で試してみたら、ようやくインスタンスを取得できた。

CABを作ってみよう

先にあげた4つのメソッドの中で、最初に使えそうなのはやはり「CreateCab」だろう。シグニチャは以下のようになっている。

Sub CreateCab(CabFileName, MakeSignable, ExtraSpace)
「CabFileName」はまんまだが、ほかの2つは型もわからんしどういう作用になるのかもよくわからないので、「CabFileName」のみで挑戦してみた。
var cab = new ActiveXObject("MakeCab.MakeCab.1");
cab.CreateCab( "test.cab" );
// → 引数の数が一致していません。または不正なプロパティを指定しています。
ふむ、引数は省略できないか。さてどんなデータを渡せばよいのか。

もう一度「COM MakeCab 1.0 Type Library」でぐぐってみたら、cabMaker.CreateCab(cabFile, false, 0, false); なんてコードが見つかった。4番目の引数はメソッドシグニチャでは定義されていないので無視することとして、

var cab = new ActiveXObject("MakeCab.MakeCab.1");
cab.CreateCab( "test.cab", false, 0 );
としてみたところ、今度はエラーがでない。うし!

ファイルの追加とクローズ

いかにもな名前なので、CreateCabしたCABにAddFileメソッドでファイルを追加してみることに。AddFileメソッドのシグニチャは以下のとおり。

Sub AddFile(FileName, FileNameInCab)
なので、
var cab = new ActiveXObject("MakeCab.MakeCab.1");
cab.CreateCab( "test.cab", false, 0 );
cab.AddFile("test.txt", "text.txt");
とあてずっぽうで試してみたらエラーがでない。これで閉じればいいのか?「cab.CloseCab();」これもエラーなし。

どうやら上のコードの流れでよかったみたいで、しっかりと「test.cab」が作成され、中に「text.txt」が追加されていた。

しかし、CAB内にディレクトリを作成/コピーする方法がよくわからん。「cab.AddFile( "mydir", "mydir" );」とかやってみたらcscriptのプロセスそのものが異常終了。おっかねー。これは要調査だな。

まとめ

  • 「COM MakeCab 1.0 Type Library」を使うことで、JScript(またはVBScript、その他のActiveスクリプト言語)で圧縮ファイルに固めることができる
  • しかしディレクトリの追加方法がまだ不明。
  • そもそもCABファイル作れてうれしいか?