たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
Firefox 57がリリースされた前後から、アドオンが使えなくなってクソだとか改悪だとかの感想を目にする機会があって、気分が滅入る事が度々ありました。
自分自身は、これは必要な事だったと思っていますし、絶望は1年ほど前に嫌というほどし尽くして、今はもう「で、どうやって乗り越えるか」というフェーズに気持ちがすっかり移ってしまっているため、それらの後ろ向きなコメントには正直な所「えっまだそんなこと言ってるの……」という感想を抱いています。そんな後ろ向きな事を言っていないでもっと生産的な事をしましょうよ、と思わずにはおれません。
しかし同時に、自分自身も他の分野ではエンドユーザーとして後ろ向きな選択をしている場面は多々あり、同意する部分が無いとも言えません。というか今絶望している人達と同じような事をつい1年から2年ほど前には自分も言っていた訳で、それを思い起こす度に、し尽くして乗り越えたはずの絶望が何度も蘇ってきて、「何故自分がこんな理不尽な思いをせねばならん(かった)のだ?」と憤りの感情が頭をもたげてくるのは否めません。
そういう自分の中での混乱を鎮めるために、エンプティ・チェアを2~3個置いて自分の思う所と結論に至るまでの経緯を各立場から辿り直し、考えを整理してみる事にしました。
先に要点だけ書いておくと、文字入力中にXULのmenupopupで補助的な情報や機能を表示したい時は、openPopupAtScreen()
やopenPopup()
の引数で明示的にコンテキストメニューであると指定してポップアップを開くようにすると、キャレットが消えなくなります(あくまでworkaround。根本的な解決策とは言えない)。それか、menupopupの代わりにtooltipやpanelを使うようにするというのも、キャレットを消えなくする方法として有効のようです。という話。以下は、そこに辿り着くまでの間に何を調べたかという事の記録です。
republic1963さん送別会の時の話の流れで今更アカウント作った。めんどいから色々デフォのままです。
今の所、投稿経路はTwitterIrcGateway(使い方説明)+LimeChat2とFirefoxのWeb検索バー。検索バーの方は、スマートキーワードで投稿できるようにするブックマークレットをセカンドサーチの機能で検索エンジンの1つとして利用してる。(しかし検索結果をタブで開くようにしていると毎回タブが開かれてしまう。これはjavascript:なURIを特別扱いするようにしていなかったセカンドサーチ側の問題。次版で直す。)
SearchLoad Optionsがすでにそういう機能を持っているから。以上。
まあそういう「車輪の再発明はもういいよ(しかも再発明するメリットがないし)」という理由以上に、自分の中では「その機能がヘドが出る程嫌いだから」っていう理由の方が大きいんですけどね。
元々セカンドサーチを作るより前にSearchLoad Optionsの存在を知って、「検索実行後に元の検索エンジンに戻す」という機能のことを知って、心の底から呆れた記憶がある。「ハァ? 何その発想。ありえねえ。理念も実装も全然スマートじゃない。『別の検索エンジンで検索しました。でもその後はその検索エンジンに切り替わったままです。普段使いの検索エンジンに戻ってなくて困ります。』オーケー、ユーザの声としてそういうのがあがってくるのは分かる。でもそこでどうして『じゃあ、検索し終わったら普段使いの検索エンジンに戻しましょう。』って発想になるわけ? そうじゃないだろ。そもそも『一時的に使いたいだけの他の検索エンジンに切り替えて(1)、検索して(2)、検索が終わったら普段使いの検索エンジンに戻す(3)』っていう風にやたらステップが多くてめんどくさい事が問題なわけだろ。その最後の(3)だけ省略できるようにしましたワーイワーイ!って、アホか。もっと頭使えよ。せっかくやるんだったら、その3ステップ全部省略しないと、時間かけて物を作る意味がないだろ。『文字を入力したら検索エンジンの一覧が自動的に出てきて、選択したら即検索される(1)』こうだろJK。その知的怠惰が気にくわない。」という感じである意味怒りに燃えて作ったのが、セカンドサーチなわけです。「これ以上ステップを省略するには脳にプラグ直結する以外無い」ってとこまで突き詰めて考えないと、ダメだと思うんだ、ホントに。
だから、僕がメンテナンスを行っているバージョンにおいては、セカンドサーチにその機能を付ける事はきっとあり得ない。すでに省略され消滅したはずのステップをわざわざ意識しないといけないようにする、なんて選択はよっぽどの事がない限りはしたくない。まあライセンスはMPL/GPL/LGPLなので、フォークしてそういう機能を持ったバージョンを誰かが作る事を止めはしませんけどね。
Second Search 0.5.2008090101公開。表題の通り、ロケーションバーから検索できるようにしました。 (スクリーンショット) ツールバーのカスタマイズでWeb検索バーを外してロケーションバーだけ残している状態だと、ロケーションバーでWeb検索できるようになります。狭い画面を有効活用したい人にオススメ。
将来のFirefoxで検索バーが消滅するかもとどっかで聞いたので「おいおいそれじゃ全然使えなくなっちまうじゃねえか」と思って実装してみたんですが、よく考えたら検索バーが消滅するならこういう機能も標準で付いてしかるべきですよね。ああ無駄な努力。
あと、外観や動作には全く関係ないですが、Firefox 1.5を切り捨てて内部処理を大幅にリファクタリングしました。特にスマートキーワードを検索エンジンとしてリストアップするための機能をだいぶ書き直してます。ブックマークを追加したり削除したりした時の怪しい挙動がだいぶ無くなったと思う。多分。バージョンを0.1上げたのはそれによるところが大きいです。
アナウンスに含まれてるかどうか知らないけどものっそ細かい所での変更点で僕が詰まった所。
まず一つめ。Firefox 2まででは、何かオブジェクトをドラッグしてる間はsetTimeoutやsetIntervalで設定したタイマーが発火しないという問題があった(ドラッグ&ドロップ中のタイマーを擬似的に再現する)。これが、いつの時点からかFirefox 3ではWindowsでも普通にタイマーが動作するようになってた。セカンドサーチやツリー型タブで「ドラッグ中に検索バー(タブ)の上でしばらく待つと〜」系の動作がうまく機能しなくなっていたのは、これが原因。Firefox 3以降ではWindows環境でも普通にタイマーを使うようにコードを書き換えたらうまく動くようになった。
二つめ。 個々のフレームに対応するnsIDocShellのオブジェクトを取得するなどで触れたnsIDocShellTreeItemインターフェースについて、Firefox 3ではchildOffsetプロパティがなくなってしまった。XUL/MigemoでFirefox 3においてフレームを跨いだ検索ができなくなっていたのはこれが原因(今フォーカスしてるフレームの次のフレーム、を取得するためにこのプロパティを使っていた)。かっこ悪いけど、親フレームの子フレームリストを取ってきてループ回してchildOffsetに相当する値を算出するようにしたらうまく動くようになった。
なんで今更になってこんな所(後者)をいじったんだか……
Second Search更新した。Firefox 3(Beta3)とThunderbird 2に対応。
Thunderbird対応にあたって、全体的にコードに手を入れた。Firefoxだけでしか使わない部分とThunderbirdでしか使わない部分と両方で使う部分の3つにファイルを分割している。似たような構造の物に対してはこれで比較的楽に対応できるようになったんじゃないかと思う。
Firefox 3については、Placesへの対応がメイン。キーワードを設定されたブックマークを検索エンジンと同等に扱うという機能がSecond Searchにはあるんだけど、僕以外にどれだけの人が使ってるんだろう。
あと、「他の検索エンジン」サブメニューのあたりのコードもだいぶ書き直した。この辺はほんとは特に触る予定はなかったんだけど、Organize Search Enginesとの競合の解消も兼ねて、なるべく汎用的になるように変更している。っていうかテストしててなーんかうまく動かないなーと思って不思議だったんだけど、よく調べてみたらOSEの側にSecond Search用のハックが入っててそれが干渉していた。僕のアドオンのためにわざわざハック用のコードを書いてくれるなんて……よくあんなスパゲッティもスパゲッティなコードを解読してくれたもんだなぁ……と嬉しく思ったりもしたけど、このままだとせっかく修正したのがきちんと動いてくれないので、動くようにするパッチを作者の人に送りつけてみたり。
Second Searchをさらに更新した。
今回の大きな変更は、スマートキーワードを検索エンジンとして認識する機能の追加。スマートキーワードと検索バーとで機能が別れてる意味が分からない、という憤りと、Firefox 1.5ではOpenSearchが使えないからOpenSearchFoxで何でも検索バーに追加という事ができない、という不満から、ついカッとなってやってしまいました。反省はしていません。
今の所、Placesビルドではこの機能は使えません。getElementsByAttribute('value', '*')
で「値は何でもいいからvalue属性が設定されているもの」を収集できますが、そんな感じでキーワードを持ってる項目だけを抽出するやり方がさっぱり分からんので。
通常ビルドでは馬鹿正直に全部のブックマークリソースを見てます。これもどうにかしたいところなんだけど。苦肉の策として、せめて収集結果はキャッシュするようにしましたが……
Second SearchをMozilla Add-onsに登録しようとしたら審査待ちが144件とか出てて、ああこりゃ時間かかりそうだな……と思ってたら、速攻で承認された。何この闇金もビックリのスピード審査。
どうでもいいけど、IDが4096(212)で微妙にキリ番踏んだ感覚。