« 2006年2月12日 - 2006年2月18日 | トップページ | 2006年2月26日 - 2006年3月4日 »

2006年2月25日 (土)

DDwin.js: Firefox から DDwin を起動する

JavaScript Actions(JSActions) を使って Firefox の中でセレクトした文字列を DDwin で検索する。

基本的には一本道で、次のような手順。

1.
JavaScript Actions のサイトから最新版と ScriptSet をダウンロードし、インストール。動くようにする。
2.
上と同じところから JSAButton をダウンロードし、インストール。 Button フォルダを作っておく。
3.
DDwin 用の javascript ファイルを作る。例えばDDwin.jsを selection/ 以下に置き、さらに、これを Button/ 以下に名前を変えてコピーする。例えば 70_NL_DDwin.js などとする。
4.
DDwin のアイコンを適当なツールで取り出し、先の Button/ 以下に 70_NL_DDwin.png などとして書き出す。私は 16x16 で書き出した。
5.
ツールバー上でカスタマイズを選択し、JSActionsButton というのを適当な場所に置く。このボタンを一度クリックすると、先のアイコンが表示される。


DDwin.js は次のようなファイルにした(一部省略)。js のエンコーディングは sjis でいいみたい。

var query;

if(_jsaCScript.context.isTextSelected){
    query = window.getSelection().toString();
} else {
    var mes = "検索文字列を入力してください。";
    mes = _jsaCScript.convertCharCodeTo(mes, "shift_jis");
    query = prompt(mes, "");
}

if(query != null) {
    query = remove_latin_1_accent(query);
    query = query.replace(/^\s+/, "");
    query = query.replace(/\s+$/, "");
    query = query.replace(/^[\x21-\x2F\x7B-\x7E]+/, "");
    query = query.replace(/[\x21-\x2F\x7B-\x7E]+$/, "");
    query = _jsaCScript.convertCharCodeFrom(query, "shift_jis");
    _jsaCScript.exec("c:\\Program Files\\DDwin\\ddwin.exe", 
                     ",2,Firefox用,G1," + query);
}

function remove_latin_1_accent(s) {
    s = s.replace(/[\xC0-\xC5]/g, "A");
    // ...省略...
    s = s.replace(/[\u017F]/g, "s");
    return s;
}


"Firefox用"は DDwin で使うグループ名。


ちなみに、これコマンドラインに渡すとき convertCharCodeFrom なんだよね。これを convertCharCodeTo を使うと思ってはまってしまった。 JSActions 2.2.0 のバグかもしれないと思ったが《掲示板》をよく見ると exec を使う例で、ちゃんと From でやっていた。

JSActions の今の管理人によると

>
ぶっちゃけ、自分も使ったときに間違ったんですが、JSActions 0.8系にあわせました。


……だそうで convertCharCodeFrom であっているよう。FromUnicode にしてくれたらわかりやすかったのに。

参考

ファイル

DDwin.js
JSActions の selection または JSAButton で使うためのスクリプト。
DDwin-by-Dblclick.js
JSActions の startup に置くことで、 DDwin.js をダブルクリックで呼べるようにする。
jsactions.patch
jsactions_2.2.0.xpi でテキストエリアなどのセレクションも取れるようにするためのパッチ。要 .xpi の展開、ビルド。


更新

2006-03-10
jsactions.patch を使うときフォームの中で button などについてもセレクションを取ろうとしてエラーになっていたので、text と textarea のみ対応することにした。
2006-02-28
フォーム内のセレクションに対応するためのこのパッチ を jsactions_2.2.0.xpi にあてた場合に対応。
2006-02-26
独仏語の検索のために latin-1 のアクセント記号を抜くようにした。単語の前後の非英数の ASCII 文字をとりのぞいた。
2006-02-25
セレクションがないときに入力ボックスを開くようにした。
更新: 06/02/25-06/03/10
初公開: 2006年02月25日 01:08:37
最新版: 2006年03月10日 22:26:39

2006-02-25 14:22:08 (JST) in Firefox, Windows アプリ | | コメント (2) | トラックバック (1)

2006年2月22日 (水)

Movable Type で「記事と同じカテゴリ内の最近の記事」を表示する。

プラグインを使わなくてもSSI とインデックステンプレートを組み合わせて使えば、「記事と同じカテゴリ内の最近の記事」を表示することができる。

当初、 Movable Type では Movable Type のタグの中で Movable Type のタグをネストして使うことはできないため、このようなことは不可能だと思っていた。

しかし、Apache 1.2 以降の SSI には if 文があり、その中で正規表現(というか部分文字列のサーチ = strstr)が使えることを知り、ココログプロで使える「新しいインデックステンプレート」と組み合わせれば、可能なはずだと思い致った。

問題は、このサイトではカテゴリ名に '/' を使っており、ラベルでカテゴリを指定すると正規表現の '/.../' とぶつかってしまうため、MTCategoryID を使いたいところだが、MTCategoryID は Category Archive 内などでそのまま使えない。今のところ Indivisual Archive に表示するだけなのであまり関係ないが、Archive 内などでサイドバーとして読み込もうとすると不具合が出るようにはしたくない。

しばしとまどったが《MovableType Tips: MovableType Tips Archives》にある方法でそれが解決できることがわかった。

続きを読む "Movable Type で「記事と同じカテゴリ内の最近の記事」を表示する。"

2006-02-22 17:46:31 (JST) in ウェブログ・ココログ関連 | | コメント (2) | トラックバック (2)

ddwin.el: Meadow から DDwin を使う

Meadow で電子辞書を使うには普通、Lookup を使うところなのですが、使えない辞書も多いようですし、更新も止まっているようなので、 DDwin32 に乗り換えました。

DDwin は起動時のオプションにより、簡単に既存のウィンドウで検索するよう指定できます。そこで突貫工事で Meadow から call-process 関数を使って DDwin に検索語を渡す Elisp を書きました。

他の誰かが作ってるかもしれませんし、Emacs 使いなら誰でも作れるレベルの物ですが、いちおう公開しておきます。

まず、DDwin 側で串刺し検索をするためのグループを作ってください。ここでは、「Meadow用」という名前だとします。

この ddwin.el をダウンロードして c:/Meadow/site-lisp 以下にでも置き、.emacs の適当なところに次の行を足してください。

(require 'ddwin)
(setq ddwin-dictionary-group "Meadow用")
(setq ddwin-dictionary-number "G1")
(global-set-key "\e\"" 'ddwin-search-word-at-point)
(global-set-key [M-mouse-3] 'ddwin-search-word-at-mouse)


これでインストールは終り。

あとは、M-x ddwin-search-word で、その後に単語を入力、または M-x ddwin-search-region でリージョンを指定して検索します。M-" を押すと、そのカーソル位置にある単語を検索します。

Alt を押しながらマウスの右ボタンを押すと、直前にマウスをドラッグしていればそのリージョン、そうでなければカーソル位置の単語が検索されます。メニューバーの Tools に DDwin を登録してあり、マウスのときとほぼ同じ動作をします。


ただし単語の切り出しは、「ひらがな」「カタカナ」「それ以外の日本語のワード」「日本語以外のワード」の続きしか判別しません。

ほとんどテストしてないので、不具合があると思います。何かあれば、ここにコメントしていただけるとうれしいです。

更新履歴

2006-02-27
replace-regexp を関数から使わないようにした。
2006-02-26
独仏語の検索のために latin-1 のアクセント記号を抜くようにした。
2006-02-25
マウスに対応。
2006-02-21
'ー'に対応していなかったのと、判別のミスを修正。
2006-02-20
作成&公開


なお、Permalink に関しては http://jrf.cocolog-nifty.com/archive/ddwin-el.html をご利用ください。
更新: 06/02/20-06/02/27
初公開: 2006年02月21日 00:10:08
最新版: 2006年02月27日 10:00:18

2006-02-22 14:41:23 (JST) in Emacs/Meadow, JRF 作成ソフトウェア | | コメント (0) | トラックバック (1)

2006年2月21日 (火)

lwp-request のオプション -m を忘れて http://www.GET.com が表示されていた

さっき気付いた。ここに載っていた 'lwp-request GET' をそのまま使うと、何か変な HTML データが先に表示される。よく見ると、'lwp-request -m GET' じゃないとダメだった。

参考に次のような感じになる。

$ /usr/bin/lwp-request GET | head
<html>
<head>
<title>Great Eastern Technology - Sun, Silicon Graphics, SGI, Sales, Repair, Maintenance and Alias/Wavefront 3D Animation and Graphics</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<META name="keywords" value="Sun, Sun Microsystems, Sun Microsystems, SGI, Silicon Graphics, SGI
Maintenance, Silicon Graphics Maintenance, Sell,
Buy, Repair, Support, Maintenance Contract,
Refurbished SGI, Rapid Prototyping, Rapid Prototype, ZCorp Printer, Alias, Alias/Wavefront, Maya, 3D
Software, Network Services, System Integration,
SGI Maintenance Training, Animation Software, 


lwp-request 内で URI::Heuristic::uf_uri を使って GET を http://www.GET.com に展開しているため、このようなことが起きている。

さすがに GET を展開するのは、いくらなんでも要らんだろう。
更新: 06/02/21
初公開: 2006年02月21日 04:29:27

2006-02-21 04:31:05 (JST) in HTML/XML/CSS, Perl | | コメント (0) | トラックバック (0)

lwp-request で https を使うと Segmentation Fault する。

現在、Cygwin の setup でインストールされる openssl-0.9.8a を使うと、 Crypt::SSLeay が make test で失敗します。openssl-0.9.8-2 などにすれば大丈夫なはずです。

'lwp-request -m GET https://...'が失敗するのも同じ理由と思われます。 Crypt::SSLeay が対応するまで openssl-0.9.8a を使わないようにするのが今のところの対処法のようです。

更新: 06/02/16,06/02/21
初公開: 2006年02月17日 13:18:10

2006-02-21 04:15:15 (JST) in Cygwin, Perl | | コメント (0) | トラックバック (2)

ココログでスクリプトなどからファイルを削除する

ココログでは XML-RPC を使って同じ名前のファイルをアップロードすると付番されてしまう。Atom や XML-RPC API でスクリプトなどを使って管理する者にとって非常にやっかいな問題である。なぜなら、これらの API にはメディアファイルをアップロードする機能はあっても削除する機能はないからである。 (記事は削除できる。)

ただ、Perl の LWP モジュールなど https が使えるのならば、ココログのユーザー向けスクリプトに直接コマンドを送ってしまうことができる。このとき POST じゃなくても良く GET で良い。例えば column/test/test.css-1 というファイルを消そうと思ったら、コマンドライン上からなら次のようにすれば良いようだ。

lwp-request -m GET "https://app.cocolog-nifty.com/t/app/control/files?__mode=delete&type=file&path=column/test&id=column/test/test.css-1&username=XXX&password=XXX"


ユーザーは普段は __mode=delete_confirm を使っているが、__mode=delete を使うと確認なしに削除してくれるので都合が良い。もちろん XXX のところは自分のアカウント名とパスワードでなければならない。

更新: 05/03/30,06/02/16,06/02/21
初公開: 2006年02月16日 04:22:36

2006-02-21 04:14:13 (JST) in HTML/XML/CSS, ウェブログ・ココログ関連 | | コメント (0) | トラックバック (2)