2009年2月10日火曜日

[xyzzy]HexlのPatch

勉強不足以上に実践不足が否めないと思う今日この頃。 テストが終わった(笑)のでちまちまとアウトプットをしていこうと思います。

まあ、たいしたものではないですが。

Hexl@xyzzyのpatch

NANRIさん配布のHexlに対するpatchです。今更な気がするのでひっそりと。 →http://xyzzy.s53.xrea.com/wiki/index.php?patch%2Fpatch%2Fhexl.l 先生、"patch/patch/hexl.l"ってなんですか…

;; Hexlにあると便利そうなおまけ
(defun hexl-coloring-hook ()
  "hexl-modeの表示に色を付ける."
  (make-local-variable 'regexp-keyword-list)
  (setq regexp-keyword-list (compile-regexp-keyword-list
                             '(("^\\w\\{8\\}:" nil 2)
                               ("  .+$" nil :comment)))))
(add-hook 'hexl-mode-hook 'hexl-coloring-hook)
;; バイナリファイルは自動的にhexl-mode
(pushnew '("\\.exe$" . hexl-mode) *auto-mode-alist* :test 'equal)

xyzzylispだけでhexl-modeを再現は一度挑戦して挫折したなあ。

Hexlのように"ADDRESS: BYTE TEXT"の形式でバッファ表示させようとしたけど、関数のコンパイルをしても1Mのファイル読み込みに10秒かかったところでアウト。バイト単位の読み込みはまずかったのかもしれない。でも実践CLにもMP3のID3パーサが紹介されているくらいだからlispでバイナリファイルを扱うのは無茶ではないんだと思う。

もしかしてMP3ファイルのヘッダ部分だけ読み込んでいるのかもしれないが


2009-02-11T18:15:41+09:00追記

NANRIさんからのコメントで、Yamamoto Shinjiさんが移植されたhexl.lがあるこ とを教えてもらいました。ありがとうございます。

ファイルのヘッダ部分を見ると、移植元のhexl.elのコードは1994年らしいです。

;; Copyright (C) 1989, 1994 Free Software Foundation, Inc.

一方、NANRIさん移植のhexl.lは2001年もの。

;; Copyright (C) 1989, 1994, 1998, 2001 Free Software Foundation, Inc.

さすがにこれだけ移植元の年数が違うと、hexl.elのコード自体もそれなりに変 更が加えられているみたいでした。

また、Yamamotoさんのhexl.lを試したのですがhexl-beginning-of-line (Control-a)の挙動がおかしいらしく、テキスト部のカーソル(reverse-region)が 追いつかないバグが残っているようです。

(setq hexl-exec-directory "C:/usr/local/emacs-22.3/bin/")
(require "hexl")

そんなわけで、コメントをいただいて恐縮ですがしばらくは使い慣れたHexlを弄ろうかと思います。

2 件のコメント:

  1. Xyzzy Wikiの質問箱/117 のところにかつて山本さんが移植されたコードが添付されていますので、そちらを使った方が良いかと。
    # なぜ、当時気付かず移植したのかは謎です。

    返信削除
  2. ありがとうございます。山本さんのHexlが残っていることに気づきませんでした。
    どうやらNANRIさん移植のHexlの方が元となったhexl.elのバージョンが新しいよ
    うなので、とりあえずこちらを使おうかと思います。
    lispのコードとしてもNANRIさんの方が見やすいですし。

    返信削除