2006年3月27日 (月)

Firefox でココログを印刷しようとすると本文が1ページ目しか表示されない

これはココログのテンプレートで使っている CSS が overflow:hidden を設定しているためです。これがわかるまでは、page-break (改ページ)まわりの設定や自作スクリプトがはく HTML のコードが悪いのかとかなり悩みました。

檜山正幸のキマイラ飼育記:[日常]長文記事を読んでもらいたい人は印刷向けスタイルシート設定した方がいいよ》を読んでプリンタまわりの設定をしようとしたところ、上記不具合に気付きました。

CSS がエディットできるなら、例えば次を足せば良いはずです。

@media print {
  #calender, #left, #right, div.comment-form {display:none;} 

  #container {margin: 0 0 0 0; width:100%; border:0;}
  #center {margin: 0 0 0 0; width:100%; overflow:visible;}
  .content {margin: 0 0 0 0; padding: 0 0 0 0;}
}


ちなみに display:none はサイドバー等を表示しないようにするために付けています。必要に応じて修正してください。

2006-03-28 のココログのバージョンアップでココログプロでないユーザーも CSS が一部使えるようになるようですね。……どうなることやら。
更新: 2006-03-27
初公開: 2006年03月27日 02:07:16
最新版: 2006年03月27日 21:04:48

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

2006年3月15日 (水)

Mew でパスワード入力時 C-g を押しても止まってくれない

普通 Mew の Summary では 'i' [mew-summary-retrieve] を押したあと、パスワードの入力を求められる。私は複数の case を使い分けているのでこの入力を'C-g' [keyboard-quit] で止めようとすることがしばしばあるが、残念ながら止まってくれない。

特に今の Mew は +queue を flush する際に draft の case を使ってくれないので、case ごとに SMTP サーバを切り換えたりする私にとっては、'C-g' で +queue が flush されるのを阻止できないのが非常に不満だった。

この原因の一つは、Mew が inhibit-quit を真にして他のバッファでエディット中に'C-g' が押されてもバックグラウンドプロセスが影響を受けないようにしていることにある。mew-read-passwd を使うときには一時的に inhibit-quit を nil にして 'C-g' を使えるようにしているのだが、その返り値が 'C-g' を押された結果の空文字列であったとしても、その後の関数内で処理を怠っているのだ。

原因のもう一つは、flush が処理が完了してなかろうとも実行されてしまうことにある。

そこで、少しダーティだが、mew-read-passwd に advice して 'C-g' が押されているかもしれないなら大域脱出し、process 終了後の hook を使い、処理が完了していなければflush しないようにした。以下のようにすれば良いようだ。

;; パスワードが入力されなかった場合、+inbox フォルダのプロセスを kill し、
;; エラーを signal する。
(defadvice mew-read-passwd
  (around mew-read-passwd-enable-quit (prompt) activate)
  (let ((pass ad-do-it))
    (when (or (null pass) (string= pass ""))
      (save-excursion
        (set-buffer (mew-inbox-folder))
        (when mew-summary-buffer-process
          (mew-summary-kill-subprocess)))
      (error "Empty Password or Keyboard quit."))))

;; 実行時スコープが甘い Lisp だからこそできる荒業
(add-hook 'mew-pop-sentinel-hook
          (lambda ()
            (if (or error (not done))
                (setq flush nil))))


副作用としてパスワードに空文字列が使えなくなるが、多くの場合問題ないものと思う。
更新: 2006-03-15
初公開: 2006年03月15日 13:37:02
最新版: 2006年03月18日 10:53:18

2006-03-15 13:36:57 (JST) in Emacs/Meadow | | コメント (0) | トラックバック (2)

2006年3月 4日 (土)

Navi2ch でインラインに画像を表示する (Referer もつける)

最近の Emacs は画像をインラインに表示できるが、Navi2ch そのものは掲示板の画像をインラインで見ることができない。しかし、《2chログ:Navi2ch for Emacs (Part 11)》の 888 の記事にインライン表示をする elisp とそれ用のシェルスクリプトが書いてあった。

それを Meadow と Cygwin の bash を使って走らせることにする。Cygwin の ImageMagickも使えるようにしておかねばならない。

続きを読む "Navi2ch でインラインに画像を表示する (Referer もつける)"

2006-03-04 06:44:26 (JST) in Cygwin, Emacs/Meadow | | コメント (0) | トラックバック (0)

2006年3月 2日 (木)

ココログプロで Google サイトマップインデックスを作る

なかなか Google がクロールしてくれないので、Google Sitemapの機能を試してみる。Google Sitemap には Atom 0.3 でも良いから当初はそうしていたのだが、2 週間ほどたっても音沙汰なしだったので Google Sitemap 専用の XML フォーマットを使うことにした。

すでに下記参考のようにいくつかのサイトで Movable Type や Type Pad のテンプレートを使って Sitemap を作る試みがなされている。しかし、それらのテンプレートはあくまで一つのブログを対象にしたものでしかない。このサイトは複数のブログを管理しており、一つ一つブログのサイトマップを登録することもできるのだが、Google Sitemap Index という形式を使えばよりスマートに Sitemap を作ることができそうだとわかった。

続きを読む "ココログプロで Google サイトマップインデックスを作る"

2006-03-02 03:12:23 (JST) in ウェブログ・ココログ関連 | | コメント (1) | トラックバック (1)

2006年3月 1日 (水)

DDwin.js をダブルクリックで呼べるようにする

Firefox の拡張に DictionaryTip があります。ダブルクリックすると goo 辞書などを引いてミニウィンドウを出してくれるものです。同じようなことを《DDwin.js》を用いてやるには、JSActions のスタートアップスクリプトを可能にして、そのスクリプト内で、イベントリスナーにダブルクリックに対して DDwin.js を呼ぶよう登録するだけです。

0.
すでに firefox_jsa/selection/DDwin.js があるとします。
1.
JSActions の設定で Enable Startup Script のチェックボックスを on にします。
2.
firefox_jsa/startup というフォルダを作ります。
3.
そこに次のような DDwin-by-Dblclick.js を置きます。


以上でできるようになるはずです。

// DDwin をダブルクリックで起動。
// firefox_jsa/selection/DDwin.js を呼ぶ。

if (document && "addEventListener" in document) {
    document
        .addEventListener("dblclick", function (e) {
            if (/* e.ctrlKey && */ e.button == 0) {
                var scrList = JsActions.getScriptList("selection");
                for (var i in scrList) {
                    var scr = scrList[i];
                    if (scr.path.match(/DDwin.*\.js$/i)) {
                        JsActions.execScript(scr.path, scr.uri, e);
                        e.stopPropagation();
                        break;
                    }
                }
            }
        }, true);
}


selection/DDwin.js がなく、Button/70_NL_DDwin.js のみがある場合は、もちろん、selection/DDwin.js を置くか、上の JsActions.getScriptList("selection") を JsActions.getScriptList("Button") に換えれば OK です。
更新: 06/03/01
初公開: 2006年03月01日 19:47:02
最新版: 2006年03月04日 07:49:55

2006-03-01 19:46:57 (JST) in Firefox | | コメント (0) | トラックバック (0)

2006年2月27日 (月)

DDwin を Firefox や Meadow から使うとき latin-1 のアクセント記号を抜くようにした。

Firefox について同じようなことをやってる人がいた。《chez sugi:firefox と DDWin》を参照すると、EPWING の規格上、独仏語だとアクセント文字がないほうが良いらしい。ちなみに latin-1 の文字列を sjis にencode しようとすると、アクセント記号と文字にわかれるのではなく、文字化けしてしまう。

そういったわけなので、アクセント付の文字をいちいちアクセントなしに変換する関数を書いた。私は独仏語辞典を持ってないから、Deja vu とかそのあたりの国語辞典に載ってる単語でしか確認できないけど。

ついでなので、《ddwin.el》のほうにも同じような関数を書いた。できたスクリプトについては《DDwin.js》へ。
更新: 06/02/27
初公開: 2006年02月27日 00:37:55
最新版: 2006年02月27日 10:01:42

2006-02-27 00:37:52 (JST) in Emacs/Meadow, Firefox, Windows アプリ | | コメント (0) | トラックバック (0)

2006年2月26日 (日)

Windows のコマンドライン cmd.exe 用のエスケープってどうやるの?

ActivePerl からパイプを使って GnuPG を起動しようとしたが、 perlipc に載ってる方法ではダメみたい。pipe の fileno で取ったファイルディスクリプタもうまく渡せないみたいだし。

それで次のようなことをしようとしたんだけど、pipe のコマンドの引数をリストでは渡せないっていわれる。

open(GPG, '-|', $GPG, '--list-keys') or die;


しょうがないので、コマンドラインを連結しましょうということになったのだが、Windows の cmd.exe の構文がわからない。

ググってみると《CMD.EXE TIPs》という Wiki に構文が書いてあった。そこの文章を参考にいろいろ試してみたけど、次みたいのでいいのかな?

sub quote_for_command {
  my $r = "";
  while (@_) {
    my $arg = shift;
    $arg =~ s/\%/^\%/gs;
    $arg =~ s/"/"""/gs;
    $r .= " " if $r ne "";
    $r .= "\"$arg\"";
  }
  return $r;
}


でもこういうのは需要あるはずだから探せば見つかりそうなものなのに、 Perl でやってるのを、ちょっと見つけられなかった。
更新: 06/02/26
初公開: 2006年02月26日 05:47:05
最新版: 2006年03月11日 03:58:07

2006-02-26 05:47:03 (JST) in Perl, Windows アプリ | | コメント (0) | トラックバック (0)

native2ascii.pl をいちおう作ってみた

Firefox の .xpi をいじろうとすると、locale の部分で .properties の拡張子を持ったファイルを JAVA で使える形式にしないとダメなんだそうだ。そのためのコマンドとして native2ascii というものが JDK に入っているらしい。

ただ、それだけのために JDK を入れるのもバカらしいので、Perl のスクリプトを書いてみた。native2ascii.pl がそのファイル。

ものすごいテキトー。フィルタらしく一行づつ処理せず、ファイル全部をいったん読んで、一気に処理してる。--encoding=japanese と指定すると自動判別するんだけど、guess_encoding も最初の n バイトとかじゃなくて、全部わたして guess させてる。

まぁ、自分が使えりゃそれでいいし、ダメだったら JDK をすなおにインストールすればいいし。

更新

2006-02-28
Surrogate Pair に対応。
Javaにおける文字/文字列の扱い方》を参考に \uuXXXX に対応。
2006-02-26
公開。
更新: 06/02/26,06/02/28
初公開: 2006年02月26日 05:31:34
最新版: 2006年02月28日 03:47:16

2006-02-26 05:31:33 (JST) in JRF 作成ソフトウェア, Perl, Windows アプリ | | コメント (0) | トラックバック (1)

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)