301 Moved Permanently

Moved to https://vow.g.hatena.ne.jp/vow/

way too long

The Right Way™

(続き)

諸般の事情で白黒だと微妙にわかりにくいけど、左は選択した状態、右はマウスのホバリングで出したツールチップです。

これ2kからXPへの間でのエンバグなんだけど、なんで未だに直らないんだろうな本当に。ええと詳しくいうならば、ツールチップの箱の大きさを計算する時点では普通に上限幅に収めるのを優先して強制ブレイクをかけているのに、実際にツールチップを表示するときにはブレイクしないもんだから、肝心の長い尻尾は枠の外に飛び出まくり、逆に減った行数の分は間抜けな余白になるという話。しかもブレイクせずに計算した幅で中央揃えしたものをクリップして表示することになるので、実際には長すぎくなかった部分まで釣られて外に飛んでいってしまう(SSの例は実際は DONT USE である)。

いや確かにこれ、デフォルト状態のインストールでは発生しないのだけど、それはデフォルトではツールチップとして盛りだくさんなInfoTipを出していて、かつInfoTipの描画は上限幅無し(!)で巨大化する気満々なので問題が顕在化しないのだ。よってフォルダオプションの「フォルダとデスクトップの項目の説明をポップアップで表示する」か「フォルダのヒントにファイル サイズ情報を表示する」を切れば一発で再現する(後者の場合はフォルダでのみ)。

さてここで問題はだ、InfoTipの表示を有効にすれば確かにここまでひどいことにはならなくなるのだけど、そうすると今度は特定のありがちなファイル形式(というか拡張子)に対しては追加の情報収集をしようとしてガリゴリするわけで、運がよければ「.aviの上にマウスカーソルがさしかかる度にexplorerが例外を吐いて死にます!」という例のアレにも巡り会えるだろう。僥倖の至りである。

ただしファイル形式に対しては、追加の情報収集は基本的に shell extension のCOMオブジェクトなので、当該の拡張をさっくり regsvr32 /u するか、またはGUIDをBlockedに入れてしまえば止めることはできる(後者は余計なお世話好きのMSIが事ある毎に勝手に修復してしまう場合に有効)。つまりInfoTipは有効なままで表示を最小限にするわけだ。実用上はまあ我慢できるだろう。

よって本当に問題になるのはフォルダの方で、実装が決め打ちなので前述のような手が使えない。具体的にいうと、フォルダの情報表示が有効な状態で、かつ HKR\Directory に値InfoTip(ネットワークドライブ上の場合はまたはQuickTip)が存在する場合(実際の値は空でも何でも関係ない)、InfoTipの末尾にフォルダサイズ情報が決め打ちで追加される。

すると当然フォルダサイズを得るために下位ディレクトリを再帰探索してくれるわけで、5秒程もある決め打ちのタイムアウトに達するまで気前よくガリゴリしてくれるあたり本当に何の嫌がらせなのかと。ファイルの数とかフォルダの深度での上限は一切無く常に完全な情報を表示しようとするが、しかしその割に一度タイムアウトすると打ち切った時点での数字に「よりも大きい」と付けるだけとか、なんだか実に投げやりな感じである。

ちなみに情報表示が有効でも値InfoTipが存在しない(または文字列値でない)場合はInfoTipにならず、例の折り畳み間違いに逆戻りなので意味がない。念のためにいっておくと、値QuickTipが存在しない場合は値InfoTipがフォールバックとして使われるので、InfoTip無しでQuickTip有りにすれば「ネットワークドライブ上でのみ情報表示してローカルでは表示しない」という風にはできるが、より常識的なその逆は不可能である。何たる酔狂か。

こうなるといっそのことツールチップ出すの全面的に禁止した方がマシなんじゃないかと思わないでもないけれどそれも不可能。