1 ;;; signature.el --- a signature utility for GNU Emacs
3 ;; Copyright (C) 1994,1995,1996,1997 Free Software Foundation, Inc.
5 ;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
6 ;; OKABE Yasuo <okabe@kudpc.kyoto-u.ac.jp>
7 ;; Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
8 ;; Maintainer: Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
10 ;; Version: $Id: signature.el,v 7.16 1997/09/24 23:17:38 shuhei-k Exp $
11 ;; Keywords: mail, news, signature
13 ;; This file is part of SEMI (SEMI is Emacs MIME Interfaces).
15 ;; This program is free software; you can redistribute it and/or
16 ;; modify it under the terms of the GNU General Public License as
17 ;; published by the Free Software Foundation; either version 2, or (at
18 ;; your option) any later version.
20 ;; This program is distributed in the hope that it will be useful, but
21 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
22 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23 ;; General Public License for more details.
25 ;; You should have received a copy of the GNU General Public License
26 ;; along with this program; see the file COPYING. If not, write to
27 ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
28 ;; Boston, MA 02111-1307, USA.
38 (defvar signature-insert-at-eof nil
39 "*If non-nil, insert signature at the end of file.")
41 (defvar signature-delete-blank-lines-at-eof nil
42 "*If non-nil, signature-insert-at-eof deletes blank lines at the end
45 (defvar signature-load-hook nil
46 "*List of functions called after signature.el is loaded.")
48 (defvar signature-separator "-- \n"
49 "*String to separate contents and signature.
50 It is inserted when signature is inserted at end of file.")
52 (defvar signature-file-name "~/.signature"
53 "*Name of file containing the user's signature.")
55 (defvar signature-file-alist nil
57 (((FIELD . PATTERN) . FILENAME)
59 PATTERN is a string or list of string. If PATTERN matches the contents of
60 FIELD, the contents of FILENAME is inserted.")
62 (defvar signature-file-prefix nil
63 "*String containing optional prefix for the signature file names")
65 (defvar signature-insert-hook nil
66 "*List of functions called before inserting a signature.")
68 (defvar signature-use-bbdb nil
69 "*If non-nil, Register sigtype to BBDB.")
71 (autoload 'signature/get-sigtype-from-bbdb "mime-bbdb")
73 (defun signature/get-sigtype-interactively (&optional default)
74 (read-file-name "Insert your signature: "
75 (or default (concat signature-file-name "-"))
76 (or default signature-file-name)
79 (defun signature/get-signature-file-name ()
83 (goto-char (point-min))
84 (if (re-search-forward
85 (concat "^" (regexp-quote mail-header-separator) "$")
90 (let ((alist signature-file-alist) cell field value)
92 (setq cell (car alist)
93 field (std11-field-body (car (car cell)))
94 value (cdr (car cell)))
95 (cond ((functionp value)
96 (let ((name (apply value field (cdr cell))))
99 (concat signature-file-prefix name)))))
103 (if (string-match (car value) field)
106 signature-file-prefix (cdr cell)))
107 (setq value (cdr value)))))
109 (if (string-match value field)
112 signature-file-prefix (cdr cell))))))))
113 (setq alist (cdr alist))))
114 signature-file-name))))
116 (defun insert-signature (&optional arg)
117 "Insert the file named by signature-file-name.
118 It is inserted at the end of file if signature-insert-at-eof is non-nil,
119 and otherwise at the current point. A prefix argument enables user to
120 specify a file named <signature-file-name>-DISTRIBUTION interactively."
122 (let ((signature-file-name
124 (or (and signature-use-bbdb
125 (signature/get-sigtype-from-bbdb arg))
127 (signature/get-sigtype-interactively))
128 (signature/get-signature-file-name)))))
129 (or (file-readable-p signature-file-name)
130 (error "Cannot open signature file: %s" signature-file-name))
131 (if signature-insert-at-eof
133 (goto-char (point-max))
134 (or (bolp) (insert "\n"))
135 (if signature-delete-blank-lines-at-eof (delete-blank-lines))))
136 (run-hooks 'signature-insert-hook)
137 (if (= (point)(point-max))
138 (insert signature-separator))
139 (insert-file-contents signature-file-name)
140 (force-mode-line-update)
141 signature-file-name))
149 (run-hooks 'signature-load-hook)
151 ;;; signature.el ends here