-;;;
-;;; mu-register.el --- `register' function for mu-cite.
-;;;
-;;; Copyright (C) 1995 MINOURA Makoto
-;;;
-;;; Author: MINOURA Makoto <minoura@leo.bekkoame.or.jp>
-;;;
-;;; This file is not part of tm (Tools for MIME).
-;;;
-;;; This program is free software; you can redistribute it and/or
-;;; modify it under the terms of the GNU General Public License as
-;;; published by the Free Software Foundation; either version 2, or
-;;; (at your option) any later version.
-;;;
-;;; This program is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;;; General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with This program. If not, write to the Free Software
-;;; Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;;; mu-register.el --- registration feature of mu-cite
+
+;; Copyright (C) 1995,1996,1997,1998,1999 Free Software Foundation, Inc.
+
+;; Author: MINOURA Makoto <minoura@netlaputa.or.jp>
+;; MORIOKA Tomohiko <tomo@m17n.org>
+;; Maintainer: Katsumi Yamaoka <yamaoka@jpl.org>
+;; Keywords: registration, citation, mail, news
+
+;; This file is part of MU (Message Utilities).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or (at
+;; your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
+
+;; - How to install.
+;; 1. bytecompile this file and copy it to the apropriate directory.
+;; 2. put the following lines to your .emacs.
+;; (add-hook 'mu-cite-load-hook
+;; (function
+;; (lambda ()
+;; (require 'mu-register))))
+;; 3. you can use the keyword `registered' in your
+;; mu-cite/top-form and mu-cite/prefix-form, for example:
+;; (setq mu-cite/prefix-format (list 'registered "> "))
+;;
+;; - ChangeLog.
+;; Wed Dec 27 14:28:17 1995 MINOURA Makoto <minoura@leo.bekkoame.or.jp>
+;;
+;; * Written.
+
+;;; Code:
+
+(require 'mu-cite)
+
+(defcustom mu-registration-file (expand-file-name "~/.mu-cite.el")
+ "The name of the user environment file for mu-cite."
+ :type 'file
+ :group 'mu-cite)
+
+(defcustom mu-registration-file-modes 384
+ "Mode bits of `mu-registration-file', as an integer."
+ :type 'integer
+ :group 'mu-cite)
+
+(defcustom mu-registration-file-coding-system-for-read nil
+ "Coding system used when reading a registration file."
+ :group 'mu-cite)
+
+(defcustom mu-cite-allow-null-string-registration nil
+ "If non-nil, null-string citation-name is registered."
+ :type 'boolean
+ :group 'mu-cite)
+
+(defvar mu-registration-symbol 'mu-citation-name-alist
+ "*Name of the variable to register citation prefix strings.")
+
+(defvar mu-registration-file-coding-system nil
+ "Coding system used when writing a current registration file.")
+
+(defvar mu-citation-name-alist nil)
+
+(defvar mu-register-history nil)
+
+(eval-when-compile (require 'static))
+
+(static-when (featurep 'xemacs)
+ (define-obsolete-variable-alias
+ 'mu-cite/registration-file 'mu-registration-file)
+
+ (define-obsolete-variable-alias
+ 'mu-cite/allow-null-string-registration
+ 'mu-cite-allow-null-string-registration)
+
+ (define-obsolete-variable-alias
+ 'mu-cite/registration-symbol 'mu-registration-symbol)
+ )
+
+
+;;; @ load / save registration file
;;;
-;;; - How to install.
-;;; 1. bytecompile this file and copy it to the apropriate directory.
-;;; 2. put the following lines to your .emacs.
-;;; (add-hook 'mu-cite-load-hook
-;;; (function
-;;; (lambda ()
-;;; (require 'mu-register))))
-;;; 3. you can use the keyword `registered' in your
-;;; mu-cite/top-form and mu-cite/prefix-form, for example:
-;;; (setq mu-cite/prefix-format (list 'registered "> "))
-;;;
-;;; - ChangeLog.
-;;; Wed Dec 27 14:28:17 1995 MINOURA Makoto <minoura@leo.bekkoame.or.jp>
-;;;
-;;; * Written.
+
+(defun mu-cite-load-registration-file ()
+ (if (file-readable-p mu-registration-file)
+ (with-temp-buffer
+ (insert-file-contents-as-coding-system
+ mu-registration-file-coding-system-for-read
+ mu-registration-file)
+ (setq mu-registration-file-coding-system
+ buffer-file-coding-system)
+ (let ((exp (read (current-buffer))))
+ (or (eq (car (cdr exp)) mu-registration-symbol)
+ (setcar (cdr exp) mu-registration-symbol))
+ (eval exp)))))
+
+(defun mu-cite-save-registration-file ()
+ (with-temp-buffer
+ (insert ";;; " (file-name-nondirectory mu-registration-file) "\n")
+ (insert ";;; This file is generated automatically by mu-cite "
+ mu-cite-version "\n\n")
+ (insert "(setq "
+ (symbol-name mu-registration-symbol)
+ "\n '(")
+ (insert (mapconcat
+ (function prin1-to-string)
+ mu-citation-name-alist "\n "))
+ (insert "\n ))\n\n")
+ (insert ";;; "
+ (file-name-nondirectory mu-registration-file)
+ " ends here.\n")
+ (write-region-as-coding-system mu-registration-file-coding-system
+ (point-min)(point-max)
+ mu-registration-file nil 'nomsg)
+ (condition-case nil
+ (set-file-modes mu-registration-file mu-registration-file-modes)
+ (error nil))))
+
+
+;;; @ accessors
;;;
-\f
-;;; Code:
-(defvar mu-register/registration-file
- (expand-file-name "~/.mu-register")
- "*The name of the user environment file for mu-register.")
+;; get citation-name from the database
+(defun mu-register-get-citation-name (from)
+ (cdr (assoc from mu-citation-name-alist)))
-(defvar mu-register/citation-name-alist nil)
-(load mu-register/registration-file t t t)
+;; register citation-name to the database
+(defun mu-register-add-citation-name (name from)
+ (setq mu-citation-name-alist
+ (put-alist from name mu-citation-name-alist))
+ (mu-cite-save-registration-file))
-(defvar mu-register/minibuffer-history nil)
+;;; @ methods
+;;;
-;;
-;; from \e$B$+$i0zMQL>$rF@$k\e(B
-(defsubst mu-register/get-citation-name (from)
- (cdr (assoc from mu-register/citation-name-alist)))
+;;;###autoload
+(defun mu-cite-get-prefix-method ()
+ (or (mu-register-get-citation-name (mu-cite-get-value 'address))
+ ">"))
-;;
-;; \e$B0zMQL>$rEPO?$9$k\e(B
-(defun mu-register/add-citation-name (name from)
- (let* ((elt (assoc from mu-register/citation-name-alist)))
- (if elt
- (setq mu-register/citation-name-alist
- (delq elt mu-register/citation-name-alist)))
- (setq elt (cons from name))
- (setq mu-register/citation-name-alist
- (cons elt
- mu-register/citation-name-alist))
- (mu-register/save-to-file)
- ))
+;;;###autoload
+(defun mu-cite-get-prefix-register-method ()
+ (let ((addr (mu-cite-get-value 'address)))
+ (or (mu-register-get-citation-name addr)
+ (let ((return
+ (read-string "Citation name? "
+ (or (mu-cite-get-value 'x-attribution)
+ (mu-cite-get-value 'full-name))
+ 'mu-register-history)))
+ (when (and (or mu-cite-allow-null-string-registration
+ (not (string-equal return "")))
+ (y-or-n-p (format "Register \"%s\"? " return)))
+ (mu-register-add-citation-name return addr))
+ return))))
-;;
-;; \e$B<B:]$K8F$S=P$5$l$k4X?t\e(B
-(defun mu-register/citation-name ()
- (let* ((from
- (rfc822/address-string
- (car (rfc822/parse-address
- (rfc822/lexical-analyze
- (mu-cite/get-value 'from))))))
- (fullname (mu-cite/get-value 'full-name))
- (return1
- (mu-register/get-citation-name from))
- (return))
- (if (null return1)
- (setq return1 fullname))
- (setq return
- (read-string "Citation name? "
- return1
- 'mu-register/minibuffer-history))
- (if (not (string-equal return return1))
- (let ((ans)
- (cursor-in-echo-area t))
- (while (null ans)
- (message (format "Register \"%s\" (y/n)? " return))
- (setq ans (read-event))
- (if (not (or (eq ans ?y)
- (eq ans ?n)))
- (setq ans nil)))
- (message "")
- (if (eq ans ?y)
- (mu-register/add-citation-name return from))))
+;;;###autoload
+(defun mu-cite-get-prefix-register-verbose-method ()
+ (let* ((addr (mu-cite-get-value 'address))
+ (return1 (mu-register-get-citation-name addr))
+ (return (read-string "Citation name? "
+ (or return1
+ (mu-cite-get-value 'x-attribution)
+ (mu-cite-get-value 'full-name))
+ 'mu-register-history)))
+ (when (and (or mu-cite-allow-null-string-registration
+ (not (string-equal return "")))
+ (not (string-equal return return1))
+ (y-or-n-p (format "Register \"%s\"? " return)))
+ (mu-register-add-citation-name return addr))
return))
-;;
-;; \e$B%U%!%$%k$KJ]B8\e(B
-(defun mu-register/save-to-file ()
- (let* ((filename mu-register/registration-file)
- (buffer (get-buffer-create " *mu-register*")))
- (save-excursion
- (set-buffer buffer)
- (setq buffer-file-name filename)
- (erase-buffer)
- (insert ";; generated automatically by mu-register.\n")
- (insert "(setq mu-register/citation-name-alist\n\
- (quote\n\
- ")
- (insert (prin1-to-string mu-register/citation-name-alist))
- (insert "))\n")
- (save-buffer))
- (kill-buffer buffer)))
-\f
-;;
-;; Installation
-
-(require 'mu-cite)
-(if (null (assoc 'registered mu-cite/default-methods-alist))
- (setq mu-cite/default-methods-alist
- (cons (cons 'registered (function mu-register/citation-name))
- mu-cite/default-methods-alist)))
+;;; @ end
+;;;
-;;
-;; provide
(provide 'mu-register)
+(mu-cite-load-registration-file)
+
;;; mu-register.el ends here