いやー、いろいろあった。
Firefox 4.0から新規導入されるパノラマ(旧TabCandy)への対応として、:buffer?やその補完のパッチを書いたら、いろいろ文句を言われ、最後に :help? が表示されない問題も解決しろみたいなことを言われた。
正直、身に覚えのないことまで要求されて???状態。ヘルプシステムの部分に手を加えたつもりは全くなかったわけだし、ヤツらだってパッチの中身をみればそのくらい分かるだろう...と。
とりあえず、自分の書いたパッチは revert して元に戻して、:help? の方が気持ち悪いので調査。
後のは読み飛ばして結構、ということで結論から。
きっとコイツが原因。
Vimperatorのヘルプはまさに XML + XSL で出来ているのでほぼ間違いない。ただ、結構Core部分に近そうな感じのするバグなので、いつ修正されるか分からない。最悪、ヘルプシステムの改修が必要かもね。
Vimperatorのヘルプは特殊なプロトコル(liberatorスキーム)を使用しているので、その辺りを調査していた。が、さっぱり分からない。諦めかけていたところ、
TabView._window.TabCanvas.prototype.paint 内 ctx.drawWindow の 行コメントアウトで help は 壊れなくなった #vimperator
と id:caisui さんの報告が。
こいつは怪しい!!ってことで、その辺りのコードを読む。
何か、バックグランドでタブを開くときは Canvas の drawWindowのタイミングをずらしているな。試しに
:js gBrowser.loadOneTab("liberator://help/intro", {inBackground: false})
で、開いてみると、見事に表示される。どうもタイミングの問題かもしれないな。
そういえば、XML + XSL だから、もしかして普通のドキュメントでも再現する?
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="test.xsl"?> <root> <item>hoge</item> <item>foo</item> <item>bar</item> </root>
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:html="http://www.w3.org/1999/xhtml"> <xsl:output method="html" encoding="UTF-8"/> <xsl:template match="/"> <apply-templates/> </xsl:template> <xsl:template match="root"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>test</title> </head> <body> <h1>test</h1> <ul> <xsl:apply-templates/> </ul> </body> </html> </xsl:template> <xsl:template match="item"> <html:li> <xsl:value-of select="."/> </html:li> </xsl:template> </xsl:stylesheet>
とローカルに作って試すと見事に再現。
Firefoxのバグっぽいですね~。Bugzillaに報告しておくか。
っとその前に既にないか検索・・・あるじゃん。