たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。
以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
うわ、やべっ。家の常用環境がnightlyのmozilla-1.8ブランチで、Trunkじゃないから互換性あるだろうって安心しきってたら、Firefox 1.5リリース版でTBEがメタメタになってしまってた。
原因究明は骨が折れそうだ……
TBEでサブツリーを展開したとき、Windowsのエクスプローラのフォルダツリーのように、以下の挙動を行うようにした。
なんか単独の拡張機能を期待されてる風な気もするんだけど、iRider風の動作を実現しようというのは、ウンコ拡張と名高い(←なんかウンコを拡張してるみたいでアレな形容ですね)TBEの新機能として実装しようという話ですよ。ごめんなさいね。
というわけで公開しました、TBE 2.1.2006011301。iRider風にする場合は、設定ダイアログのツリーで「タブブラウザ拡張」を選択して「プリセット設定を呼び出す」で「iRider互換設定」を選べばOK。初めてインストールした場合も同じ要領で。
ドラッグによるタブの選択を実装した。
あと、リンクまわりとか細かい不具合も修正。すべてのリンクを常にタブで開く設定は今まで自分でも使ったことがなかった(ぉぃ)ので、フレームを使ったページで困るということに気付いてなかったよ。
設定GUIをもう少し練り込んだら公開しよう。
malaさんの「2005年もパクられてこなかったもの私的まとめベスト3」に挙げられている「iRider」。ただのサムネイル表示型タブブラウザ?と思ってたんだけど、デモをよーく見てみると、これはタブブラウザというよりは、履歴のサムネイル&ツリー表示機能を持ったブラウザという感じのような挙動を示すようで。
良く出来たものはパクるべきです
という教え(?)に従って、パクってみることにした。
ツリー表示についてはTBEですでに実装済みだったので、とりあえず、タブにサムネイルを表示する所から取り掛かってみた。色々悩んだ末、サムネイルの位置などタブの外観はiRiderを丸パクりすることに(ぉぃ)。
そういえば、サムネイル式のタブを実現するものとしてはTab Sidebarがあるけど、今見たら、それぞれのタブ(のようなもの)に小さなナビゲーションバーが付いてて、また違った方向に進化してってるようですね。閑話休題。
「戻る」「進む」で「現在のタブを開いたタブ」「現在のタブから開いたタブ」に移動する挙動については、戻る・進む用の履歴が無いときにはタブの親子関係を走査する、という形で実現してみた。
ツリー表示といい、このあたりの機能の根幹となる「タブの親子関係の保持」は2年くらい前にはTBEに実装済みだったんで、今回の変更も、表面的な所をちょこっといじるだけで済んでしまった。当時の自分の先見性には感動するね。嘘です。単に浅い考えでオーバースペックの機能を実装してしまったのを今になってようやく有効利用できるようになってきただけです。
なでるインターフェースについては、タブのドラッグ&ドロップとの兼ね合いがあるので、どうしたものかと思案中。
デバッグよりも新機能追加の方がはかどってしまうために要らん機能ばかりが増えていく「Piro拡張化」がまた加速してますよ。
課題は山積み。
――×ボタンドラッグでまとめて閉じる、を実装した。クローズボックスの上でドラッグ開始で「閉じるタブ」の選択操作が始まり、他のタブのクローズボックス上を通過するとそのタブが「閉じるタブ」として選択される。もう一度通過すると選択が解除される。
フォーカス切り替えについては設定でON/OFFという風にするしかないかな?
英語圏の人?が、高橋メソッド in XULを紹介してくれてる。しかも高橋メソッド in XULによる高橋メソッド in XULの説明 in English(ややこしい)なんてものまで作ってくれてる。スゴイ情熱だ!
ところで、確か以前、高橋メソッド in XULのページを英訳してくれた方がいたと思うんだけど。メールで連絡を貰ったのかそれ以外の方法だったのか、反応するのを忘れたまま放置してしまって、すっかり分からなくなってしまいました……申し訳ないです。
分離したサイドバーのウィンドウ内でidがreporterItemsBroadcasterなbroadcaster要素が破棄されると、タブを切り替えてもタイトルバーの内容が変わらないという問題が起こる、ということが判明した。ここが原因のようだ。
調べてみたら、これはFirefox 1.5で正しく表示できないサイトを報告するための「Reporter」が使用している要素らしい。処理が記述されている reporterOverlay.jsの中を見たら、一発だった。
Reporterはウィンドウを開いた時にプログレスリスナをgBrowserに対して設定する。このプログレスリスナはページ読み込みのタイミングで「ブラウザに読み込まれたURI」を調べ、Reporterでレポート可能な種類のページかどうかを判別し、先のbroadcasterにdisabled属性として指定する。これによってReporterのメニュー項目が必要に応じて有効化・無効化されるという寸法だ。
問題は、ウィンドウを閉じるときにこのリスナが登録解除されないところにあった。サイドバーのウィンドウが閉じて、broadcasterが消滅しても、このリスナは生存し続ける。ページが読み込まれると、存在しないbroadcasterを参照しようとしてエラーになる。その結果、他のプログレスリスナの処理までもがこいつのせいで中断されてしまって、ウィンドウのタイトルバーの内容が更新されないという問題につながる。
自分で確認したのは以下の現象。
Ez Sidebarでは分離したサイドバーを正常に動かすために、他の拡張機能や組み込まれたパネル自身に対して「このウィンドウはFirefoxのブラウザウィンドウですよ」と見せかけるよう、いくつかのプロパティや関数を再定義している。プロパティはObject.__defineGetter__()
を使って再定義していて、参照するとFirefoxのブラウザウィンドウの同名プロパティを返すようになっている。つまりこのgetterを通じて、サイドバーのウィンドウとブラウザウィンドウとは繋がっている。
よって、サイドバーのウィンドウ内でこのプロパティに何か変更を加えれば、それはブラウザウィンドウ内で変更がなされたのと同じことになる。バインディングのdestructorやunloadイベントでの終了処理でそういった処理を行っていれば、サイドバーのウィンドウを閉じたタイミングで、ブラウザウィンドウの終了処理が一部分だけ実行されてしまうことになり、結果、ブラウザウィンドウの挙動がおかしくなる。こういう事ではないかと考えられる。具体的にどこら辺の処理がそうなのかは、まだ分からないんだけど。
根が深いなあ。
TBE更新。
タブバーを縦置きした場合、タブの幅のピクセル指定をタブ自体ではなくタブバーの方に設定するようにした。これは、ツリーモードで階層が深くなって各タブに左マージンがつくとタブバーの幅が広がってしまう問題への対処のため。
……だったんだけど、ついでだから、隣にスプリッタを置いて動的にリサイズ可能なようにしてみた。む、これはこれでなんか面白いかもしれないな。