たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。
以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
分割ブラウザに、Webページ内のスクリプトから任意の方向に表示領域を分割するAPIを加えた。
今回、最終的に「スクリプトを実行しているページのドキュメントのルート要素に属性値を設定することで挙動を制御する」というあんまりスマートでない仕様に落ち着いたんだけど、これは結構苦肉の策というか、本来やりたかったものとは違う形のソリューションになってしまっている。
そもそもなんでこういう機能(?)を加えたかというと、Stylishという拡張機能の作者さんから「そういうAPIを作ったらどうかね」という意見を頂いたからだ。
拡張機能のビルド用のユーティリティを開発しようとされている方がいる。僕には使いこなせそうもないけど、裾野が広がるという意味でちょっと期待だ。
「たん」が付いてる理由は僕にも分かりません……
タブカタログのサムネイル上でリンクをクリックしたらリンク先に飛べるようにしたついでに、リンク上の中クリックでタブも開けるようにしてみたんだけど、これ、ちょっとでもクリック位置がずれたらタブを閉じてしまいかねないなあ。いまリンクの上にポインタがあるのかどうか一目で分かるようにしたいけど、CSSのcursorみたいなことはJavaScriptじゃ実現できないようなあ……と思った末に、現在ポイントしている位置のクリック可能な要素を強調表示するということを思いついた。でも、これで本当に実用的な速度で動くかどうか?というのははなはだ疑問だった。
GomitaさんのTab Scopeでは、DOM2 Tree Walkerによってすべてのクリック可能な要素を頭から順番に走査していき、要素のボックスの範囲がclickイベントの発生した座標を含んでいるかどうかをチェックする、という手順によってcanvas上のクリック位置に対応するリンクやボタンを見つけている。タブカタログもこの実装をそのまま使わせてもらっている。
この方法の問題は、ページの中にリンクやボタンが大量に配置されていたり、ページの末尾近くまでスクロールしていたりすると、クリック位置の要素を見つけるまでにものすごく時間がかかってしまうという点だ。クリック時のみの処理ならまあ我慢できるかもだけど、mousemoveイベントを拾って「今クリック可能な要素をポイントしている」時だけその事を示そうと思ったら、相当悲惨な事になるのは目に見えている。っていうか実際やってみてあまりの重さに死にかけた。
そこで、何年も前に試して諦めたnsIAccessibleを使う方法に再び挑戦してみることにした。
結論から言うと、これのおかげで現在の位置の要素の取得を飛躍的に高速化できて、やっと実用レベルになったと思う。
第2回拡張機能勉強会でTab Scopeのプロトタイプを見てから、公開されたらぜひタブカタログでこの機能を使わせてもらおうと思っていて、気がついたら公開されてたので早速見てみたんだけども、他の拡張機能とかで機能を利用できるような設計になってなかったので、仕方ないから関係してるコードをコピペしてタブカタログに仕込んでみた。
ただ、画像を含むリンクで画像の前後に改行があったりすると上手くいかなかったので、そこだけ手を加えた。
分割ブラウザを更新した。機能的には目新しい変化はなくて、じゃあ何が変わったのかというと、機能の見せ方。「ブラウズ領域を分割する」というメンタルモデルだけでなく、「タブブラウズのタブをひっぺがして横に貼り付ける」という風なメンタルモデルで利用できるようなメニュー項目を加えてみた。それが「横に並べる」と「縦に並べる」という物。また、「分割されたブラウズ領域をタブブラウザのタブにまとめる」機能も同時に加えた。これを使うことで、あたかもOperaでタブ表示とタイル表示を切り替えるかのような感覚で使えるようになる……といいなあ、という目論見だ。
また、マルチプルタブハンドラのAPIのデモンストレーションも兼ねて、こいつとも連携して動くようにした。全部のタブではなくて一部のタブだけタブブラウザから切り離して横に並べる、とかそんな事ができるようになる。
追記。めんどくさくてスルーしてたけど、タブの数から水平・垂直方向の分割数を割り出してほんとにタイル状に配置する機能も実装した。これでようやく、実用的なレベルになったんじゃないだろうか。
拡張機能のファイル群からXPIパッケージを自動的に生成するバッチファイルを、須藤さんの書いたスクリプトとにらめっこしながらシェルスクリプトに移植してみた。
元々バッチファイルもシェルスクリプトもよくわかってなくて、chmodを使う必要があったことからcygwinを入れざるを得なかった関係上、各コマンドの名前がWindows用の物なのかsh用の物なのかよくわかってなかったんだけど、あれこれぐぐりながら情報かき集めて、どうにかこうにか動く物になってくれた。
一応使いかたを説明しておくと、以下のような感じ。
Windowsのエクスプローラでは、ファイルなどのドラッグ中にフォルダの上でしばらく待つと、そのフォルダを勝手に開いてくれる。Firefoxのブックマークのフォルダもそういう風になっている。これと同じように、Second Searchの挙動を変えてみよう、と思って色々実験してみた。
Split BrowserのAPIのドキュメントを用意してみた。まあ、こんなもん使う人がどれだけいるんだか、はなはだ疑問なんだけど……
AiO GesturesとSplit Browserの連携を試みてみよう、と思って挫折した。基本的にSplit Browserは、Firefoxの初期状態の構造であることを前提にして開発されている拡張機能とは、とても相性が悪い。ハック用のコードを書いてみようと思っても、変更箇所が膨大になりすぎて、とてもやる気が起こらない。FireBugとの連携が結局中途半端な状態で止まってしまってるのもそのせいだ。
Split Browserが連携しやすいのは、Firefox全体に渡ってではなく、tabbrowserというウィジェットに対してだけ拡張を行うように設計されている物だ。マルチプルタブハンドラや情報化タブやなんかは最初からそういう風に設計したので、わりかし簡単に連携がとれるようになった。
TBEの分割・再構築の一環で、マルチプルタブハンドラに続いて情報化タブを公開した。
今回、未読タブの強調表示の方法は斜体で決め打ちにした(userChrome.cssでカスタマイズできるけど)。設定UIに凝っても誰も喜んでくれないみたいだから…… 現在のタブを強調表示する機能は、Fx 2のタブだったら最初から現在のタブが判別しやすくなってるから、オミットしてしまった。
これが第2弾なのは、実装に手間がかからないからというだけの理由なんだけど、まあともかく、これでuserChrome.cssを使ってタブを縦置きすれば、とりあえずFirefox 2には移行できるかなー。という感じ。
いちおう旧TBEよりは若干改良してある。