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

Re: w3m-bookmark-file-modtime

>>>>> In [emacs-w3m : No.10417] 青田さん wrote:
> 詳しいテストありがとうございます。 docstring と実体が違っていたのですね…。
> Emacs については etc/NEWS.22 に

> .-------------------------------------------------------------------------------
>| * Lisp Changes in Emacs 22.1
>| <snip>
>| *** `visited-file-modtime' and `calendar-time-from-absolute' now return
>| a list of two integers, instead of a cons.
> `-------------------------------------------------------------------------------

> とあるので、以下のようなコードで解決できそうに思います。

旧版の Emacs で 2種類あった modtime の表現形式を新版で統一したこ
とが The Right Thing なのであれば、進取の emacs-w3m でも踏襲し、
`w3m-bookmark-file-modtime' の出力は常に list にしておいて、版に
よって変則のある `visited-file-modtime' の側で対処する方が良い気
もするんですよね。加えて、bookmark ファイルが無いときの
`w3m-bookmark-file-modtime' の戻り値は、単に nil でいいんじゃな
いでしょうか?  こんな感じかな:

;; w3m-util.el
(defun w3m-visited-file-modtime ()
  "Replacement of `visited-file-modtime'.
It returns a list of two integers if the current buffer visits a file,
otherwise returns the number 0.  In modern Emacsen, this function will
get to be the alias to `visited-file-modtime'."
  (let ((modtime (visited-file-modtime)))
    (cond ((consp (cdr-safe modtime))
	   (defalias 'w3m-visited-file-modtime 'visited-file-modtime)
	  ((integerp (cdr-safe modtime))
	   ;; XEmacs version returns `(0 . 0)' if no file is visited.
	   (if (and (= (car modtime) 0) (= (cdr modtime) 0))
	     (list (car modtime) (cdr modtime))))

;; w3m-bookmark.el
(defun w3m-bookmark-file-modtime ()
  "Return the modification time of the bookmark file `w3m-bookmark-file'.
The value is a list of two time values `(HIGH LOW)' if the bookmark
file exists, otherwise nil."
  (nth 5 (file-attributes w3m-bookmark-file)))