[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: broken ~/.w3m/.arrived



>>>>> In [emacs-w3m : No.02699]
>>>>>	Tatsuya Kinoshita <tats@iris.ne.jp> wrote:

木下さん> w3m-arrived-file (~/.w3m/.arrived)の中身が壊れてしまう現象を
木下さん> 見つけたのでお知らせします。

木下さん> emacs-w3m 1.2.4または1.2.138, w3m 0.2.5, Debian GNU/Linux
木下さん> sid i386という環境で、下記の手順により再現できました。

木下さん> * ~/.w3m/.arrivedを削除。
木下さん> * emacsを起動。
木下さん> * `M-x w3m'でemacs-w3mを起動。
木下さん> * `U'などでhttp://www.linux.org.tw/CLDP/Chinese-HOWTO.htmlを
木下さん> 表示。* `Q'でemacs-w3mを終了。
木下さん> * emacs-w3mの起動時や終了時に、Wrong type argumentのエラーが
木下さん> 起こるようになる。

Mule-UCS が無い環境で再現できました。

;; そうか、以前に XEmacs でこれが頻繁に起きたのは、
;; Mule-UCS ではなくて ucs-conv を使っていたからなのだな。

木下さん> find-fileで~/.w3m/.arrivedを見ると、タイトルの文字列に含まれ
木下さん> ているエスケープの影響で、そのうしろにある値が化けてしまって
木下さん> います。

;;; .arrived  -*- mode: emacs-lisp; coding: iso-2022-7bit -*-
;; This file is generated automatically by Emacs-W3M v1.2.137.

(("http://www.linux.org.tw/CLDP/Chinese-HOWTO.html"
  "Linux Chinese HOWTO ^[$(0&d'G0k"
  (13709 11776)
  (15454 21522 145156)
  nil
  nil))

ですね。

木下さん> デコードされずに残っているコントロール文字はファイルへ書き込
木下さん> む前に削除する、というふうな対策が必要なのだと思います。

w3m-save-list で使っている prin1 を、例えばこんなもので置き換え
る、というのでいかがでしょう? → 開発者のみなさま。

(defun w3m-prin1 (object &optional stream)
  "Like `prin1', except that control chars will be represented with ^ as
`cat -v' does."
  (let (rest)
    (dolist (char (append (format "%s" object) nil) rest)
      (if (or (memq char '(?\t ?\n))
	      (>= char ?\ ))
	  (push (char-to-string char) rest)
	(push (concat "^" (char-to-string (+ 64 char))) rest)))
    (prin1 (apply 'concat (nreverse rest)) stream)))
-- 
Katsumi Yamaoka <yamaoka@jpl.org>