X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Friece-mcat.el;h=5c77de64ecd7fce452b3fc0bde8472e93902faa4;hb=4e33c2dabd200fd9d6d5196efcad4d4b26b333f6;hp=a11bb2a9993d415bf7e113762396e2ace9e9db8c;hpb=f4f08e7573b3a34a97adf75ae571a23a4d9af956;p=elisp%2Friece.git diff --git a/lisp/riece-mcat.el b/lisp/riece-mcat.el index a11bb2a..5c77de6 100644 --- a/lisp/riece-mcat.el +++ b/lisp/riece-mcat.el @@ -46,7 +46,7 @@ (defun riece-mcat-extract (files) (save-excursion - (let (message-list alist) + (let (message-list pointer) (while files (with-temp-buffer (insert-file-contents (car files)) @@ -61,12 +61,13 @@ (riece-mcat-extract-from-form (read (current-buffer))))))) (setq files (cdr files))) - (setq message-list (sort message-list #'string-lessp)) - (while message-list - (unless (assoc (car message-list) alist) - (setq alist (cons (list (car message-list)) alist))) - (setq message-list (cdr message-list))) - alist))) + (setq message-list (sort message-list #'string-lessp) + pointer message-list) + (while pointer + (if (member (car pointer) (cdr pointer)) + (setcar pointer nil)) + (setq pointer (cdr pointer))) + (delq nil message-list)))) (defun riece-mcat-update (files mcat-file mcat-alist-symbol) "Update MCAT-FILE." @@ -85,7 +86,11 @@ (eval (read (current-buffer)))) (delete-region (point) (progn (forward-sexp) (point)))) (set mcat-alist-symbol nil)) - (setq alist (riece-mcat-extract files)) + (setq alist (mapcar (lambda (message) + (or (assoc message + (symbol-value mcat-alist-symbol)) + (list message))) + (riece-mcat-extract files))) (insert "(defconst " (symbol-name mcat-alist-symbol) "\n '(") (while alist (insert "(" (pp-to-string (car (car alist))) " . "