676a54d26646134b4c46bbd73ec4929ce795c5d9
[elisp/mu-cite.git] / mu-register.el
1 ;;;
2 ;;; mu-register.el --- `register' function for mu-cite.
3 ;;;
4 ;;; Copyright (C) 1995 MINOURA Makoto
5 ;;;
6 ;;; Author: MINOURA Makoto <minoura@leo.bekkoame.or.jp>
7 ;;;         modified by MORIOKA Tomohiko <morioka@jaist.ac.jp>
8 ;;; Created: 1995/12/27 by MINOURA Makoto <minoura@leo.bekkoame.or.jp>
9 ;;; Version:
10 ;;;     $Id: mu-register.el,v 1.11 1996-01-16 21:54:27 morioka Exp $
11 ;;;
12 ;;; This file is part of tl (Tiny Library).
13 ;;;
14 ;;; This program is free software; you can redistribute it and/or
15 ;;; modify it under the terms of the GNU General Public License as
16 ;;; published by the Free Software Foundation; either version 2, or
17 ;;; (at your option) any later version.
18 ;;;
19 ;;; This program is distributed in the hope that it will be useful,
20 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
21 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
22 ;;; General Public License for more details.
23 ;;;
24 ;;; You should have received a copy of the GNU General Public License
25 ;;; along with This program.  If not, write to the Free Software
26 ;;; Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
27
28 ;;; Commentary:
29 ;;;
30 ;;; - How to install.
31 ;;;   1. bytecompile this file and copy it to the apropriate directory.
32 ;;;   2. put the following lines to your .emacs.
33 ;;;     (add-hook 'mu-cite-load-hook
34 ;;;                (function
35 ;;;                 (lambda ()
36 ;;;                   (require 'mu-register))))
37 ;;;   3. you can use the keyword `registered' in your
38 ;;;    mu-cite/top-form and mu-cite/prefix-form, for example:
39 ;;;     (setq mu-cite/prefix-format (list 'registered "> "))
40 ;;;
41 ;;; - ChangeLog.
42 ;;;   Wed Dec 27 14:28:17 1995  MINOURA Makoto <minoura@leo.bekkoame.or.jp>
43 ;;;
44 ;;;     * Written.
45 ;;;
46 \f
47 ;;; Code:
48
49 (require 'mu-cite)
50
51
52 ;;; @ variables
53 ;;;
54
55 (defvar mu-register/registration-file
56   (expand-file-name "~/.mu-register")
57   "*The name of the user environment file for mu-register.")
58
59 (defvar mu-register/registration-symbol 'mu-register/citation-name-alist)
60
61 (defvar mu-register/citation-name-alist nil)
62 (load mu-register/registration-file t t t)
63 (or (eq 'mu-register/citation-name-alist mu-register/registration-symbol)
64     (setq mu-register/citation-name-alist
65           (symbol-value mu-register/registration-symbol))
66     )
67 (defvar mu-register/minibuffer-history nil)
68
69
70 ;;; @ database accessers
71 ;;;
72
73 ;; get citation-name from the database
74 (defmacro mu-register/get-citation-name (from)
75   (` (cdr (assoc (, from) mu-register/citation-name-alist))))
76
77 ;; register citation-name to the database
78 (defun mu-register/add-citation-name (name from)
79   (let* ((elt (assoc from mu-register/citation-name-alist)))
80     (if elt
81         (setq mu-register/citation-name-alist
82               (delq elt mu-register/citation-name-alist)))
83     (setq elt (cons from name))
84     (setq mu-register/citation-name-alist
85           (cons elt
86                 mu-register/citation-name-alist))
87     (mu-register/save-to-file)
88     ))
89
90 ;; save to file
91 (defun mu-register/save-to-file ()
92   (let* ((filename mu-register/registration-file)
93          (buffer (get-buffer-create " *mu-register*")))
94     (save-excursion
95       (set-buffer buffer)
96       (setq buffer-file-name filename)
97       (erase-buffer)
98       (insert ";; generated automatically by mu-register.\n")
99       (insert (format "(setq %s
100  '(" mu-register/registration-symbol))
101       (insert (mapconcat
102                (function prin1-to-string)
103                mu-register/citation-name-alist "\n   "))
104       (insert "\n   ))\n")
105       (save-buffer))
106     (kill-buffer buffer)))
107
108
109 ;;; @ main functions
110 ;;;
111
112 (defun mu-register/citation-name ()
113   (let* ((from
114           (rfc822/address-string
115            (car (rfc822/parse-address
116                  (rfc822/lexical-analyze
117                   (mu-cite/get-value 'from))))))
118          (fullname (mu-cite/get-value 'full-name))
119          (return1
120           (mu-register/get-citation-name from))
121          (return))
122     (if (null return1)
123         (setq return1 fullname))
124     (setq return
125           (tl:read-string "Citation name? "
126                           return1
127                           'mu-register/minibuffer-history))
128     (if (not (string-equal return return1))
129         (let ((ans)
130               (cursor-in-echo-area t))
131           (while (null ans)
132             (message (format "Register \"%s\" (y/n)? " return))
133             (setq ans (read-event))
134             (if (not (or (eq ans ?y)
135                          (eq ans ?n)))
136                 (setq ans nil)))
137           (message "")
138           (if (eq ans ?y)
139               (mu-register/add-citation-name return from))))
140     return))
141
142 (defun mu-register/citation-name-quietly ()
143   (let* ((from
144           (rfc822/address-string
145            (car (rfc822/parse-address
146                  (rfc822/lexical-analyze
147                   (mu-cite/get-value 'from))))))
148          (fullname (mu-cite/get-value 'full-name))
149          (return1
150           (mu-register/get-citation-name from))
151          return)
152     (if (null return1)
153         (progn
154           (setq return
155                 (tl:read-string "Citation name? "
156                                 fullname
157                                 'mu-register/minibuffer-history))
158           (if (not (string-equal return return1))
159               (let ((ans)
160                     (cursor-in-echo-area t))
161                 (while (null ans)
162                   (message (format "Register \"%s\" (y/n)? " return))
163                   (setq ans (read-event))
164                   (if (not (or (eq ans ?y)
165                                (eq ans ?n)))
166                       (setq ans nil)))
167                 (message "")
168                 (if (eq ans ?y)
169                     (mu-register/add-citation-name return from)
170                   )
171                 ))
172           )
173       (setq return return1)
174       )
175     return))
176
177 \f
178
179 ;;; @ Installation
180 ;;;
181
182 (set-alist 'mu-cite/default-methods-alist
183            'prefix-register
184            (function mu-register/citation-name-quietly))
185 (set-alist 'mu-cite/default-methods-alist
186            'prefix-register-verbose
187            (function mu-register/citation-name))
188
189
190 ;;; @ end
191 ;;;
192
193 (provide 'mu-register)
194
195 ;;; mu-register.el ends here