[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

mail signatures

  | Date: Thu, 25 June 1992, 11:45 +0200
  | From: Vincent Keunen
  | Is there a way to define signatures to be automatically added to the end
  | of a mail message?
  | vk

With GNU Emacs a plain ~/.signature will do. I don't know if Zmacs or
Zmail have anything similar.

However, with GNU Emacs you can do better than that (I bet you'll find a
bunch of people offering a GNU Emacs package similar to this one):

;Author: Eyvind Ness (eyvind) 
;Date:   Wednesday, June 3 1992 08:06 GMT
;File:   /usr/local/gnu/emacs/elisp/site-extensions/en-signature-hook.el

;;; A util to help you select a proper ~/.signature for all outgoing
;;; mail based on a database of citations and jokes.
;;; Example usage:
;;; In ~/.emacs do:
;;; (setq
;;;  mail-setup-hook
;;;  (function
;;;   (lambda ()
;;;    ;; It's painful to add :before methods when the -hook variable is
;;;    ;; missing:
;;;    (or (boundp 'vm-mail-send-and-exit-rebound-p)
;;;        (progn
;;;          (require 'vm)
;;;          (require 'en-signature-hook)
;;;          (defvar vm-mail-send-and-exit-rebound-p
;;;            (symbol-function 'vm-mail-send-and-exit))
;;;          (fset 'vm-mail-send-and-exit
;;;                (function
;;;                 (lambda (arg)
;;;                  (interactive "P")
;;;                  (en-signature-hook-choose-insert)
;;;                  (funcall vm-mail-send-and-exit-rebound-p arg)))))))))
;;; To just test it - try:
;;; M-x eval-expression (en-signature-hook-choose-insert)
;;; after loading the contents of this file.

(provide 'en-signature-hook)

(defvar en-signature-hook-db 
  (expand-file-name "~/.signature.collection")
  "*Where your formatted database of citations and jokes are supposed to

(defvar en-signature-hook-plain-sigfile
  (expand-file-name "~/.signature")
  "*Where your .signature file is supposed to be.")

(defun en-signature-hook-parse-db ()
    (set-buffer (get-buffer-create "*.sig output*"))
    (goto-char (point-min))
    (insert-file-contents en-signature-hook-db nil)
    (let ((cit-list nil) (page-delimiter "^"))
      (while (not (eobp))
	;; skips past 1st item - which is supposed to be a file-header.
	(forward-page 1)
	(setq cit-list
		  (forward-page 1)

(defun en-signature-hook-choose-insert ()
  "Suggests a ~/.signature from ~/.singature.collection"
  (let* ((cit-db (en-signature-hook-parse-db)) (ch nil)
	 (db-ix (% (random t) (length cit-db)))
	 before-dot-sig after-dot-sig
	  "y(es) n(ext) p(revious) C-l (recenter@bot) q(uit) a(bort))")
	  (function (lambda ()
	    (setq db-ix (% (1+ db-ix) (length cit-db)))
	    (insert (elt cit-db db-ix))))))
      (goto-char (point-max))
      (setq before-dot-sig (point))
      (insert-file-contents en-signature-hook-plain-sigfile)
      (goto-char (point-max))
      (setq after-dot-sig (point))
      (funcall inserter-confirm)
      (catch 'out
	(while (not (memq ch '(?y ?\ )))
	  (message "%s" short-help-string)
	  (setq ch (read-char))
	  (cond ((= ch ?a)
		 (delete-region (point) before-dot-sig)
		 (throw 'out nil))
		((= ch ?q)
		 (delete-region (point) after-dot-sig)
		 (throw 'out nil))
		((= ch ?\C-l)
		 (recenter -1))
		((= ch ?n)
		 (delete-region (point) after-dot-sig)
		 (funcall inserter-confirm))
		((= ch ?p)
		 (delete-region (point) after-dot-sig)
		 (setq db-ix (- db-ix 2))
		 (if (< db-ix 0) (setq db-ix (1- (length cit-db))))
		 (funcall inserter-confirm))))))))

Put the above file somewhere along your `load-path' and give it a spin.

BTW: I'm using Kyle Jones' VM (View Mail) package for GNU Emacs. Try it
- it's great.


 Eyvind Ness                    Internet Email: Eyvind.Ness@HRP.No
 Research Scientist             Phone: +47 9 183100
 Control Room Systems Division  Fax: +47 9 187109
 OECD Halden Reactor Project    Surface Mail: P.O. Box 173, N-1751 Halden

 -A language that doesn't affect the way you think about programming is
not worth knowing. Alan Perlis