1 ;;; mu-register.el --- registration feature of mu-cite
3 ;; Copyright (C) 1995,1996,1997,1998,1999 Free Software Foundation, Inc.
5 ;; Author: MINOURA Makoto <minoura@netlaputa.or.jp>
6 ;; MORIOKA Tomohiko <tomo@m17n.org>
7 ;;; Created: 1995-12-27 by MINOURA Makoto
8 ;; Maintainer: Katsumi Yamaoka <yamaoka@jpl.org>
9 ;; Keywords: registration, citation, mail, news
11 ;; This file is part of MU (Message Utilities).
13 ;; This program is free software; you can redistribute it and/or
14 ;; modify it under the terms of the GNU General Public License as
15 ;; published by the Free Software Foundation; either version 2, or (at
16 ;; your option) any later version.
18 ;; This program is distributed in the hope that it will be useful, but
19 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 ;; General Public License for more details.
23 ;; You should have received a copy of the GNU General Public License
24 ;; along with GNU Emacs; see the file COPYING. If not, write to the
25 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
26 ;; Boston, MA 02111-1307, USA.
32 (eval-when-compile (require 'static))
38 (defcustom mu-registration-file (expand-file-name "~/.mu-cite.el")
39 "The name of the user environment file for mu-cite."
43 (defcustom mu-registration-file-modes 384
44 "Mode bits of `mu-registration-file', as an integer."
48 (defcustom mu-registration-file-coding-system-for-read nil
49 "Coding system used when reading a registration file."
52 (defcustom mu-cite-allow-null-string-registration nil
53 "If non-nil, null-string citation-name is registered."
57 (defvar mu-registration-symbol 'mu-citation-name-alist
58 "*Name of the variable to register citation prefix strings.")
60 (defvar mu-registration-file-coding-system nil
61 "Coding system used when writing a current registration file.")
63 (defvar mu-register-history nil)
65 (static-when (featurep 'xemacs)
66 (define-obsolete-variable-alias
67 'mu-cite/registration-file 'mu-registration-file)
69 (define-obsolete-variable-alias
70 'mu-cite/allow-null-string-registration
71 'mu-cite-allow-null-string-registration)
73 (define-obsolete-variable-alias
74 'mu-cite/registration-symbol 'mu-registration-symbol)
78 ;;; @ load / save registration file
81 (defun mu-cite-load-registration-file ()
82 (if (file-readable-p mu-registration-file)
84 (if mu-registration-file-coding-system-for-read
85 (insert-file-contents-as-coding-system
86 mu-registration-file-coding-system-for-read
88 (insert-file-contents mu-registration-file))
89 (setq mu-registration-file-coding-system
91 ((boundp 'buffer-file-coding-system)
92 (symbol-value 'buffer-file-coding-system))
93 ((boundp 'file-coding-system)
94 (symbol-value 'file-coding-system))
97 (let ((exp (read (current-buffer))))
98 (or (eq (car (cdr exp)) mu-registration-symbol)
99 (setcar (cdr exp) mu-registration-symbol))
101 (or (boundp mu-registration-symbol)
102 (set mu-registration-symbol nil)))
104 (defun mu-cite-save-registration-file ()
106 (insert ";;; " (file-name-nondirectory mu-registration-file) "\n")
107 (insert ";;; This file is generated automatically by mu-cite "
108 mu-cite-version "\n\n")
110 (symbol-name mu-registration-symbol)
115 (format "(\"%s\" . \"%s\")" (car elem) (cdr elem))))
116 (symbol-value mu-registration-symbol) "\n "))
119 (file-name-nondirectory mu-registration-file)
121 (write-region-as-coding-system mu-registration-file-coding-system
122 (point-min)(point-max)
123 mu-registration-file nil 'nomsg)
125 (set-file-modes mu-registration-file mu-registration-file-modes)
129 ;;; @ database accessors
132 ;; get citation-name from the database
133 (defun mu-register-get-citation-name (from)
134 (cdr (assoc from (symbol-value mu-registration-symbol))))
136 ;; register citation-name to the database
137 (defun mu-register-add-citation-name (name from)
138 (set-alist mu-registration-symbol from name)
139 (mu-cite-save-registration-file))
146 (defun mu-cite-get-prefix-method ()
147 (or (mu-register-get-citation-name (mu-cite-get-value 'address))
151 (defun mu-cite-get-prefix-register-method ()
152 (let ((addr (mu-cite-get-value 'address)))
153 (or (mu-register-get-citation-name addr)
154 (let* ((minibuffer-allow-text-properties nil)
156 (mu-cite-remove-text-properties
157 (read-string "Citation name? "
158 (or (mu-cite-get-value 'x-attribution)
159 (mu-cite-get-value 'full-name))
160 'mu-register-history))))
162 (if (and (or mu-cite-allow-null-string-registration
163 (not (string-equal return "")))
164 (y-or-n-p (format "Register \"%s\"? " return)))
165 (mu-register-add-citation-name return addr))
169 (defun mu-cite-get-prefix-register-verbose-method ()
170 (let* ((addr (mu-cite-get-value 'address))
171 (return1 (mu-register-get-citation-name addr))
172 (minibuffer-allow-text-properties nil)
173 (return (mu-cite-remove-text-properties
174 (read-string "Citation name? "
176 (mu-cite-get-value 'x-attribution)
177 (mu-cite-get-value 'full-name))
178 'mu-register-history))))
179 (if (and (or mu-cite-allow-null-string-registration
180 (not (string-equal return "")))
181 (not (string-equal return return1))
182 (y-or-n-p (format "Register \"%s\"? " return)))
183 (mu-register-add-citation-name return addr))
190 (provide 'mu-register)
192 (mu-cite-load-registration-file)
194 ;;; mu-register.el ends here