php_manual_ja.chm の文字化け解消
2006-04-07
私は php のスクリプトを書くときは、xyzzy の php-mode で書いているのですが、何かちょろっとマニュアルを引きたくなった時などは、引きたいキーワードにカーソルを合わせてF1を押せば、xyzzy の画面が分割されて xyzzy 上に該当のマニュアルが表示されてまことに便利です。php-mode 付属の php-misc.l の仕事ですね。
まことに便利なのですが画面が半分になってしまうので、場合によっては chm 版のほうが都合がいい場合もあります。その場合は、HTML Help を引くという機能もあって、ローカルに置いてある php_manual_ja.chm を引くこともできるようになっていて至れり尽せりです。が、ひとつ問題があります。PHP: Download documentation からダウンロードできるヘルプ形式(chm)は、以前から左ペインが文字化けしていて検索なんかができないんですねぇ。肝心の部分は読めるので問題ないといえばそうなんですが、不便といえば不便です。んで、チョロッとググッたら文字化けを解消するパッチなんてのもあったので試してみたのですが、現在配布している chm とバージョンが違うということでパッチを適用することが出来ませんでした。
さらにググると、php マニュアル(chm版) 文字化け解消方法 というページに辿り着きました。おお、これはやってみるべと思い必要なツールをインスコします。デコンパイルツールの KeyTools はあっさりインスコできたのですが、Microsoft HTML Workshop - コンパイルツール の入れ方がわかりません。何か落としてきたら、HTML Workshop のヘルプだったりして。:p)
んで、探し回ったら HTML Help Workshop というページに辿り着きようやく、Office リソース キットのセットアップ プログラム (Ork.exe) とやらを使ってインスコできることが判明。これをまずインスコして、それを使って HTML Workshop をインスコすることに成功。あとは先のページの手順どおりに操作することで、無事文字化けのない php_manual_ja.chm をゲットすることが出来ました。
ということで、記念(?)にオンライン検索と、HTML ヘルプのキーバインドを入れ替えて、HTML のほうをメインにしました。右ペインが文字化けしていないと立ち読み感覚であちこち読めて楽しいですね。文字化けで困っている人もやってみる価値があると思います。
ていうか、公式の直せよとか思った。
データスキーム な URL を作るツール
2006-04-05
Firefox の拡張機能、userChrome.js の話題を扱う userChrome.js - MozillaZine Forums ではスクリプトの配布を行うのに、データスキームを使うことが頻繁に行われています。どんな感じのものかといえば、先日続・tab で placesに掲載したスクリプトなんかはこんな感じで記述します。Firefox や Opera9 などのデータスキームに対応した UA であればリンク先を開くとスクリプトが表示されるはずです。
データスキームに付いての詳細はrfc2397(日本語訳)を見ていただくとして、こういうデータスキームな URL を簡単に作るツールがスレで紹介されていたので、紹介しておきます。
スクリプトなどの他に、画像などもアップロードして変換することが出来るので、Firefox のユーザスタイルシート用の画像なんかを変換するのにも使えるようです。
おまけで、以下にデータスキームな画像を置いておきます。どうなっているか興味のある方はソースをご覧ください。
rNote の仕様で、画像のパスがドキュメントルートからのパスに変換されていたため、うまく表示できなかったようです。rNote 本体を改造してデータスキームの場合は変換しないようにして対処しました。今度は大丈夫のはず。多分。:p)
続・tab で places
2006-04-03
Firefox 2.0 以降では、ブックマークと履歴が統合した places というものが装備されるのですが、現状の仕様だと、places は独立したウィンドウになっています。で、tab で places でちょっと書いた選んだアイテムを新規タブで開くためのアレコレですが、進展がありましたので続報です。先の記事と重複しますが、そこらあたりはよしなに。
現状 places をタブで開くために、私は以下の URL をブックマークして、Bookmarks Toolbar に配置しています。
- chrome://browser/content/places/places.xul
これで places をタブで開くことができるのですが、現状の問題点としては、places の右ペインのアイテムを中クリック(ホィールクリック)一発で新規タブで開けないことです。設定でオートスクロールが有効になっている場合に、中クリックした途端にマウスカーソルがオートスクロール用のものになって、タブで開いてくれないのです。オートスクロール用のマウスカーソルになっても左右いずれかにちょっと移動してから続けて中クリックすれば、新規タブで開けるのですがちょっと面倒です。
設定でオートスクロールを切っていれば一発で開けることに気がついたので、オートスクロールをあきらめて使おうかと思っていたんですが、places を開いているときだけオートスクロールを無効にできればいいということを思いつきました。さっそく Piro さんに相談してみたところ、さくっとスクリプトを書いてくれました。ありがとうございます。> Piro さん
ナイトリーを使っている人で、places をタブを開きたい人向けという非常にニッチなアレでナニですが、Piro さんに公開の許可も頂いたのでそのスクリプトを公開しておきます。
(function() {
var updateAutoScrollEnabledForPlaces = function(aTarget) {
aTarget.__defineGetter__('autoscrollEnabled', function() {
if (this.getAttribute("autoscroll") == "false" ||
this.currentURI.spec == "chrome://browser/content/places/places.xul")
return false;
var enabled = true;
try {
enabled = this.mPrefs.getBoolPref("general.autoScroll");
}
catch(ex) {
}
return enabled;
});
}
updateAutoScrollEnabledForPlaces(gBrowser.mCurrentBrowser);
var originalAddTab = gBrowser.addTab;
gBrowser.addTab = function() {
var tab = originalAddTab.apply(this, arguments);
updateAutoScrollEnabledForPlaces(this.getBrowserForTab(tab));
return tab;
};
})();
Firefox で userChrome な JavaScript を可能にする拡張機能 userChrome.js や Piro さん作の コンテキストメニュー拡張 のカスタムスクリプトとして登録すれば使えると思います。上記スクリプトは、userChrome.js 用ですので、コンテキストメニュー拡張のカスタムスクリプトで使う場合には、一番最初と最後の行を除いた部分を記述すれば OK です。
私自身は、userChrome.js に userChrome.js スレにある Sub-Script Loader のみを記述して、プロファイルの chrome ディレクトリに先のスクリプトを、places_nonautoscroll.uc.js と名付けて配置しています。Sub-Script Loader というのは、chrome ディレクトリにある、*.uc.js というスクリプトを自動的にロードしてくれるスクリプトです。
なお試してみたところ、正式版の Bon Echo a1(Mozilla/5.0 (Windows; U; Windows NT 5.0; ja; rv:1.8) Gecko/20060321 Firefox/2.0a1 - Build ID: 2006032100)では、動作しませんでした。最新ナイトリーな Bon Echo(Mozilla/5.0 (Windows; U; Windows NT 5.0; ja; rv:1.8) Gecko/20060402 Firefox/2.0a1 - Build ID: 2006040203)では動作するのを確認しましたので、a1 な Bon Echo の places と現在の Fx 2.0 なナイトリーのそれとでは仕様が異なるようです。ちなみに私が常用しているのは、trunk のナイトリーです。
いつのまにか、スクリプトの力を借りなくてもタブで開いていた、places の右ペインのアイテムを中クリックすることで新規タブで開けるようになっていました。(2006-04-13T10:27:10+09:00 追記)
この記事へのツッコミ
- 1: くでん (2006-04-04T00:46:42+09:00)
- JavaScriptActionsでもこのコードはそのまま使えるみたいです。JavaScriptConsoleにエラーもでません。私は素直にClassic Sidebarsに逃げてますけど。
- 2: のり (2006-04-04T01:27:44+09:00)
- 確かに Classic Sidebars で用は足りるんですけどね。ただ、サイドバー開いたらまた閉じるのが面倒なので。:p)
簡易な履歴閲覧用としては、前の Go メニューが好きだったんですけどねぇ。History メニューでも、起動した直後にいくつかの履歴を表示させることは簡単にできると思うんですが…。
誰か腕自慢の人が、拡張作ってくれないかしらん。:p)
トラックバック
- 1: bushwhacker/Placesがどうも・・・ (2006-04-09T19:22:44+09:00)
- Firefox2.0から導入されるPlacesですが、現状の branch ・ trunk ビルドと使いにくい・・・。(新しいものに順応できなくなってきてる?年かな・・・。) ということで朝顔日記 - 続・tab で places経由でnorah'# : Classic Sidebarsというのを発見w あ~やっぱりサイドバー..
- この記事の永続的 URI ならびに トラックバック ping URI
- http://diary.noasobi.net/2006/04/diary_060403a.html
Session Manager の Undo close tab をマウスジェスチャで
2006-03-24
Fierfox でマウスジェスチャを実現する、All-in-One Gestures という拡張機能を使っていたのですが、色々あって Mouse Gestures に乗り換えました。AiO Gestures ほど機能は多くないものの、こっちはジェスチャに割り当てるコマンドを JavaScript で記述することもできるというのが大きな特徴となっています。つまり他の拡張の機能を呼び出したりすることもできるわけですね。
AiO Gestures には、Undo Close Tab の機能があり重宝していたのですが、Mouse Gestures にはこの機能はありません。そこで、Session Manager といういわゆるセッション管理を行う拡張機能を導入して、その機能を使うことにしました。
Mouse Gestures の設定画面より、マッピングの設定を呼び出し、カスタム JavaScript コードに以下を記述してやることで、Session Manager の Undo Close Tab の機能を呼び出すことが出来ました。
gSessionManager.undoCloseTab();
ジェスチャは、Undo の U をイメージして、↓→↑ を割り当てています。
Session Manager 自体もなかなか使いやすく気に入りました。Firefox 2.0 で本体機能に Undo Close Tab とセッション管理機能が装備されるまではこれらの拡張のお世話になることにします。:p)
rNote の file.cache に description を埋め込む
2006-03-22
rNote の file.cache に tag を埋め込む で、rNote 本体を改造したんですが、さらに改造して、file.cache に個別記事の概要も埋め込むようにしました。これまでは、tag で絞り込みした際に、記事の概要を個別のファイルから引っ張ってきていたため、ヒットする記事が多いとそれだけ多数のファイルにアクセスする必要があったのですが、概要を file.cache に埋め込んでおくことで、faile.cache にだけアクセスして概要を表示することが可能になりました。
また改造箇所を示すのはダルいのですが、備忘録を兼ねて書いておきましょう。前回と重複する部分もありますが、関係箇所をすべて書いておきます。
まず、設定ファイル rnote_config.php に以下を追加。これは前回と同じです。
define(TAG_LABEL,'Class'); //タグ用
次に、本体 rnote.php です。最初のほうにある、$g_filelist; のところです。diff ぽく書いておきます。行頭に + がある分が追加分で、! は変更のした部分です。
define(FILELIST_DATE,0);
define(FILELIST_TITLE,1);
define(FILELIST_WBACCEPT,2);
+ define(FILELIST_LABEL,3);
+ define(FILELIST_DESCRIPTION,4);
$g_dirlist;
define(DIRLIST_NUMITEM,0);
次は、GetFileList 関数のあたり。
}
$title = get_XMLTag(TAG_TITLE,$datafile);
$title = preg_replace("/[\t\n\x0b\x0c\r]/",'',strip_tags($title));
+ $label = get_XMLTag(TAG_LABEL,$datafile);
+ $label = preg_replace("/[\t\n\x0b\x0c\r]/",'',strip_tags($label));
+ $description = get_XMLTAG(TAG_DESCRIPTION,$datafile);
+ $description = preg_replace("/[\t\n\x0b\x0c\r]/",'',strip_tags($description));
$titlelist[$dir.$file][FILELIST_TITLE] = $title;
$titlelist[$dir.$file][FILELIST_WBACCEPT] = get_XMLTag(TAG_WBACCEPT,$datafile);
+ $titlelist[$dir.$file][FILELIST_LABEL] = $label;
+ $titlelist[$dir.$file][FILELIST_DESCRIPTION] = $description;
$num++;
}
}
次は、CreateFileCache 関数のところ。
$date = str_replace("\t",'',$date);
$temp = "$fname\t$date\t".
$titlelist[$fname][FILELIST_TITLE]."\t".
! $titlelist[$fname][FILELIST_WBACCEPT]."\t".
! $titlelist[$fname][FILELIST_LABEL]."\t".
! $titlelist[$fname][FILELIST_DESCRIPTION]."\n";
fwrite($fp,$temp);
}
fclose($fp);
次は、ReadFileCache 関数の終わりのほう。
$g_filelist[$fname][FILELIST_DATE] = $date;
$g_filelist[$fname][FILELIST_TITLE] = $title;
$g_filelist[$fname][FILELIST_WBACCEPT] = $wbaccept;
+ $g_filelist[$fname][FILELIST_LABEL] = $label;
+ $g_filelist[$fname][FILELIST_DESCRIPTION] = $description;
}
}
}
! function FileCache_AddEntry($fname,$date,$title,$wbaccept,$label,$description){
$filelist = _file(FNAME_FILECACHE);
! array_unshift($filelist,"$fname\t$date\t$title\t$wbaccept\t$label\t$description\n"); // add new entry
$fp = _fopen_wb(FNAME_FILECACHE);
foreach($filelist as $a) fwrite($fp,$a);
fclose($fp);
この改造によって、file.cache は1行ごとに以下のような構造を持つようになります。\t はタブをあらわしています。
xml ファイル\t時刻情報(unixタイム)\t記事のタイトル\tツッコミ及びトラックバックの受け付けフラグ\tいわゆる tag\t記事の概要
で、こういう file.cache の構造に変更したので、tag 閲覧兼 rss 出力用の php スクリプト、labelview.php は file.cache だけを読んで仕事ができるようになりました。
記事数が多いとページめくり機能(何)があるといいんでしょうが、1ページで全部表示されるのも、一覧性が高いのと、ページ内検索する場合に便利なんですよねぇ。ということで、今のところページめくり機能は装備していません。というか、全部 DB にツッコんだ方が便利な気もす。:p)
一応、主だった tag にリンクしておきましょう。