たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
Why did you remove the awesome functionalities from Fox Splitter 0.6 and replaced it with Fox Splitter 2? Fox splitter is now just a way to glue multiple instances of Firefox together.
I would like to ask you to remake the functionality of Fox Splitter 0.6.2009110501, perhaps as it as a function that can be enabled or disabled? Or perhaps just make the 0.6.2009110501 version workable on newer Firefox versions?
どうしてFox Splitter 0.6の素晴らしい機能(※訳注:1つのウィンドウの中を複数のペインに分割する機能)を削除してFox Splitter 2で置き換えたのですか? 今や、Fox Splitterは単に複数のFirefoxのインスタンスをくっつけて一緒に操作するだけの物になってしまいました……
Fox Splitter 0.6.2009110501の機能を復活させて、オプションで有効無効を切り替えられるようにならないでしょうか? それか、単にバージョン0.6.2009110501を新しいFirefoxの上で動作するようにできないでしょうか?
I recommend you to try Tile Tabs or Tile View, if you want to split a window to multiple panes and don't want toolbar/tabbar for each pane.
Sorry, Fox Splitter never introduce "multiple panes in a window" feature in future releases. There are some reasons.
After I initially released the old Fox Splitter, I realized that each "pane" should have navigation toolbar for usability. So I actuary did it. However, much codes was required, it had too less maintainability, and it was strongly depended on codes of the specific version of Firefox. So I couldn't update the old Fox Splitter for 1.5 years.
During that time, similar new addons "Tile Tabs" and "Tile View" debuted. I hope that they can replace my old Fox Splitter. However, after I tried them, I couldn't become familiar with their concept. I thought that their "tiled view in a tabbrowser" is hard-to-understand.
Moreover, both "Tile Tabs" and "Tile View" didn't provide navigation toolbar for each pane. I realized that it was a unique feature of my old Fox Splitter and no other addon inherited the concept. I thought that I have to implement such an extension by myself if I want to use it -- no one does it for me except myself.
Yes, I decided to update Fox Splitter. And, I decided to drop functionality to split a browser window to multiple panes, because it requires huge codes and it is very hard to maintain for current rapid-released Firefoxes. I don't want to abandon the new Fox Splitter for a long time anymore. High maintainability (and compatibility) code is strongly required for me. The old Fox Splitter didn't have them and I cannot cover them by my crazy hacking time - now I have less time to do it.
もしあなたが分割されたそれぞれの領域のためのツールバーやタブバーを必要としないのであれば、Tile TabsかTile Viewを試す事をお薦めします。
申し訳ないのですが、Fox Splitterが「1つのウィンドウの中を複数の領域に分割する機能」を将来のバージョンで実装する可能性はありません。それにはいくつかの理由があります。
私は、Fox Splitterの最初のバージョンを公開した後で、実用性のためには分割後の各領域がそれぞれ専用のツールバーを持っている方が望ましいという事を実感しました。それで実際にそのような機能を実装しました。しかしそのためには非常に多くのコードを書かなければならず、コードの量が多いという事はメンテナンス性も低かったですし、さらに言うと、それらのコードは特定のバージョンのFirefoxに強く依存した物でした。そのため、私は旧Fox Splitterを更新し続ける事ができず、1.5年もの間完全に放置してしまっていました。
そうこうしている間に、Fox Splitterに似た新しいアドオンの「Tile Tabs」と「Tile View」が公開されました。私は、これらのアドオンが私のFox Splitterの代わりになってくれればいいと期待していました。しかしながら、実際にそれらを試してみると、私にはどうしてもそれらの設計コンセプトに慣れ親しむ事ができませんでした。それらがやっている「1つのタブブラウザの中でタイル表示を行う」というのは、直感的な理解が難しいアプローチなのではないかと、私には思えました。
それに加え、「Tile Tabs」と「Tile View」の両者とも、それぞれの分割された領域のためのナビゲーションツールバーを提供していませんでした。これに至って私は、それが旧Fox Splitterに特有の機能で、そのコンセプトを継承した他のアドオンはまだ登場していないのだという事を理解しました。そのような物を使いたいのであれば、自分自身で実装するしかないーー自分以外の誰もそういう事をやってはくれないのだ、と、私は思いました。
それで、私はFox Splitterを更新する事を決意しました。また、それと同時に、実現するために非常に多くのコードが必要になる上に、現在の高速リリース体制になったFirefox向けにそれをメンテナンスし続ける事は非常に難しいということで、1つのウィンドウの中を分割する機能を廃止する事も決めました。私はもうこれ以上、Fox Splitterを更新できないまま長い期間放置してしまうような事になってしまうのを望んでいません。高いメンテナンス性(そして互換性)を持つコードこそが、私の求めていた物でした。旧Fox Splitterにはそういう視点が欠けており、そういった問題を絶えず修正し続けるために狂ったように多くの時間を注ぐ事は、今の自分には不可能だとも思っています。
「Split Browser」という名前で公開してたアドオンについて、「名前かぶってるから変えてんか(大意)」というメールが来た。2004年からある「SplitBrowser」という名前のWebKitベースのブラウザの作者の人だった。
こっちの奴は2007年が最初のリリースなので、どう考えてもこっちが悪いですよね……ということで名前を変える事にした。edvakfさんが呟いた「SplitFox」という名前がナイスだと思ったんだけど、検索してみたところそういうハンドルで活動してる人がいたので、これも駄目かーと思ってちょっとひねって「Fox Splitter」にした。
リポジトリ上のファイルは全部修正したけど、リリースはしてないので、今インストールすると表示は「Split Browser」のままです。名前が変わるのは次のバージョンからという事で、今はまだWebページだけの変更。
画面の描画を一時停止する方法を先日書いたけど、案の定というかやっぱりというか、重大な弊害があることが分かった。また、その弊害にぶち当たらない安全なやり方も見つけることができた。
安全に画面の描画を一時停止・再開する方法は、以下の通り。
var baseWindow = window.top
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShell)
.QueryInterface(Ci.nsIBaseWindow);
baseWindow.setPosition(window.innerWidth, window.innerHeight); // これで画面の描画が止まる
gBrowser.addTab(); // これによって起こる変化は画面上に現れない
gBrowser.addTab(); // この変化も画面上に現れない
gBrowser.addTab(); // 同上
baseWindow.setPosition(0, 0); // ここでやっと描画が再開される
以下、前のエントリに書いたやり方にどういう弊害があるのか、および、このエントリで紹介するやり方の方がどのくらい安全なのかについて詳しく説明する。
ツリー型タブとJetpackが同時にインストールされているとコンテンツ表示領域に何も表示されなくなってしまう、という問題の原因がやっと分かった。そこからさらに調査をして、表題のような「画面の再描画を任意に停止・再開させる」方法が見つかった。
先にやり方だけ書いとくと、こうするとできる。
var rootContentViewer = window.top
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShell)
.contentViewer;
rootContentViewer.hide(); // これで画面の描画が止まる
gBrowser.addTab(); // これによって起こる変化は画面上に現れない
gBrowser.addTab(); // この変化も画面上に現れない
gBrowser.addTab(); // 同上
rootContentViewer.show(); // ここでやっと描画が再開される
24日追記。この方法には重大な弊害があることが分かりました。使用を検討している人はより安全な方法を使うようにして下さい。
以下は、これに辿り着いた経緯のお話。
分割ブラウザ更新した。Firefox 2捨てで、Firefox 3以降専用にした。おかげでJavaScriptコードモジュールとかの便利技術をためらいなく使えるようになった。最近になってアドオンを作り始めた人達がほんと羨ましい。あんな糞みたいな苦労をしなくても遙かに簡単に同じ事ができてより素晴らしい物を作れるんだから。羨ましいを通り越して妬ましくすらある。
更新履歴的には「ShiretokoとMinefieldで動くようにしました」で済ませてるけど、Firefox 2→Firefox 3で色々変わってた部分にかなり見落としがあったのを相当数直してる。ペイン内でのズームとかドラッグ&ドロップとか。
機能的な変更は以下の点くらい。
あと、地味にFirefox 3.5以降のプライベートブラウジングに対応してみた。プライバシーついでに、プライバシー情報の消去関係の機能とも統合を図ってる。この辺のノウハウはまたどっかで文書化したい(それか、勉強会のネタにするとか)。
ツリー型タブとマルチプルタブハンドラで、Firefox 3.1からの「ウィンドウ外にタブをドロップしたら新しいタブを開く」機能に対応した。子タブを持っているタブをウィンドウ外にドロップしたら子孫タブまで含めて新規ウィンドウに分離され、複数のタブを選択してウィンドウ外にドロップしたら選択されたタブすべてが新規ウィンドウに分離される。という感じ。ちょっと前の分割ブラウザの更新もこれに関係してる。
Minefield 3.1b3preでは、ブラウザのタブをドラッグした時はapplication/x-moz-tabbrowser-tabという型のデータがドラッグデータのリストの先頭に加わるようになった。今までは、ドラッグセッションの「ドラッグを開始した要素」をその都度参照していたようだったので、やっとまともな実装になったなーという感じだ。
分割ブラウザやツリー型タブでは、この型のデータも受け入れ可能なように修正した。そうしておかないと、「application/x-moz-tabbrowser-tab型のデータはドロップできないんだな」と判断されて、タブをタブバーや分割された領域にドロップできなくなってしまう。
Minefield 3.1b3preでの「ウィンドウ外へのドロップ」はどのように実装されているのかを調べてみた所、dragendイベント(ドラッグが終了した時に、「ドラッグが開始された要素」で発行されるイベント)のタイミングで、ドロップ操作に失敗した(ドラッグ操作終了時点でポインタの状態が「ここにはドロップできません」のポインタになっている)場合には「ウィンドウ外へドロップされた」と判断して、新しいウィンドウを開きそのタブとドラッグ元のタブを入れ替える、という風にして実現していた。
この時ドラッグ元のウィンドウでは、tabbrowser要素の_replaceTabWithWindow()
メソッドにおいて、新規ウィンドウの第1引数にtab要素を渡して開くだけで処理を終えている。そこから先の「ドラッグ元のタブと新しいウィンドウの内容の入れ替え」は、新しく開かれたウィンドウの初期化処理(BrowserStartup()
関数)の方でやってる。
なので、ツリー型タブとマルチプルタブハンドラでは、その両方の処理に割り込むようにした。_replaceTabWithWindow()
を呼び出している_onDropEnd()
メソッドで、_replaceTabWithWindow()
メソッドを呼ぶ直前に割り込んで、切り離されようとしているタブの収集結果がそのウィンドウのタブ全部だった場合には操作をキャンセルしている。また、BrowserStartup()
の方では、ウィンドウの第1引数がtab要素だった場合はまずツリー型タブとマルチプルタブハンドラに処理を渡して、何も行われなければ(渡されたタブが子タブを持っておらず、選択もされていないならば)Firefox本来の処理(単一タブの切り離し)に入る、という感じにしている。
ドラッグ元のタブ自身の上にドロップした時までウィンドウの切り離しになってしまうなど、Minefield 3.1b3preの当該機能自体がまだまだ作り込みが甘い感じなんだけど、そういう所にまで手を出すと収拾がつかなくなる&Firefox 3.1正式版までの間に手を入れられたらまた作業のやり直しになるので、そこら辺は基本的に放置してる。ただし複数のタブを同時に閉じようとした時の問題だけは、閉じるのに失敗したタブが永遠に閉じられなくなるなどの致命的な問題を引き起こすので、ツリー型タブの側で対処している(提出したパッチと同じ事をやってる)。
Firefox 3.1でのドラッグ&ドロップのデモをアップした後でYouTubeのページを見てみたら、関連動画に、いくつかSplit Browserを英語とかドイツ語とかで解説してる物があってビビった。「シモダヒロシ」って作者の名前を読み上げてる奴もあったりしてなおビビった。
そんな小市民。
Firefox 3.1からの変更への対応に関する技術情報の中に書いたけど、分割ブラウザとマルチプルタブハンドラの連携を強化したり、分割ブラウザ側の「分割された領域」と「タブ」の連携を大幅に強化したりした。
ということをグダグダグダグダ書いてみても大して伝わらんだろうなあと思うので、実際に動いてる所のデモ動画を作ってみた。
<object width="425" height="350"> <param name="movie" value="http://www.youtube.com/v/-rfZNBy0jic"></param> <embed src="http://www.youtube.com/v/-rfZNBy0jic" type="application/x-shockwave-flash" width="425" height="350"></embed> </object>
Firefox 3.1上でなら擬似的な移動でなくホントの移動になるから、ストレスが無いし、書きかけのテキスト等が失われる心配も無いので、今以上にはるかに気軽に使えると思う。作った自分自身、これらの点がネックで今はほとんど使ってないので……
デモ動画自体の作り方もメモしておく。キャプチャはCamStudio、セッティングは「描いてみた」動画の作り方を参考に、ただしフレームレートは高めで。編集はNicoVisualEffectsでやった。CamStudio+ffdshowでH264でエンコードしたaviが読み込めなくて詰まったけど、Wikiに挙がってたDirectShowプラグインというのをを入れたらちゃんと読み込めた。そんな具合で、初めてなんでちょっと手こずったけど、DebugMode Winkを使って作るのに比べるとタイムライン操作がやりやすいので、今後はデモ動画を作る時はこのやり方でいこうと思う。
Firefox 3.1からは、ウィンドウをまたいでタブを移動できるようになる。アドオンの作者はこれに合わせて修正を行わないといけない場合がある。
また、この機能を実現するために新しく用意された「表示されている2つのフレームの内容を破壊せずに入れ換える」APIは、他の目的でも利用することができる。
ひとつ前の話、やっぱりどうにもならないような雰囲気が漂ってきている。前のエントリで「horizon=横に分断?」と書いたけど、そもそもそういうことじゃないんじゃないかという気がしてきた。
「Arrange windows horizontally」という文章を読んだときに、たぶん、日本人と英語圏の人とではこう解釈が別れるんだと思う。
そうなんだとしたら、「Left-to-Right」と言おうと何と言おうと、日本人と彼らとの間で解釈が逆になってしまうことは永遠に避けられない。