Browse Source

Remove useless emacs stuff

Emmanuel Bouthenot 10 years ago
parent
commit
3d2512db6e
3 changed files with 0 additions and 1988 deletions
  1. 0 289
      .emacs
  2. 0 302
      .emacs-lisp/multi-mode.el
  3. 0 1397
      .emacs-lisp/mutt-post.el

+ 0 - 289
.emacs

@@ -1,289 +0,0 @@
-;;
-;; GNU Emacs configuration file (~/.emacs) 
-;; 2000-2009,  kolter <kolter@openics.org>
-;;
-;;  This file is distributed in the hope that it will be useful,
-;;  but WITHOUT ANY WARRANTY
-;;
-
-;;-------------------------------------------------------------------
-;; Compiling .emacs : regenerate the .emacs.elc if .emacs is newer
-(defun dotemacscheck! ()
-  "If .emacs exists and is newer than .emacs.elc, recompile it"
-  (cond
-   ((file-newer-than-file-p "~/.emacs" "~/.emacs.elc")
-    (let ((mode-line-format "*** Recompiling .emacs ***"))
-      (sit-for 1)
-      (byte-compile-file "~/.emacs")
-      (message ".emacs.elc recompiled --- reloading...")
-      )
-    (load "~/.emacs.elc" t t t)
-    )))
-(dotemacscheck!)
-
-;;--------------------------------------------------------------------
-;; Emacs internals stuff
-
-;; trace errors (only for debug/testing)
-;;(setq debug-on-error t)
-
-;; adding lisp modules directory
-(add-to-list 'load-path "~/.emacs-lisp/")
-
-;; y = yes && n = no
-(defalias 'yes-or-no-p 'y-or-n-p)
-
-;; disable speaker's beep
-(setq visible-bell t)
-
-;; set a directory to save backup files
-(setq 
- backup-by-copying t
- backup-directory-alist '(("." . "~/.emacs-backups/"))
- delete-old-versions t
- kept-new-versions 6
- kept-old-versions 2
- version-control t)
-
-;; autoload apache-mode
-;; apache-mode is available in debian package emacs-goodies-el
-(autoload 'apache-mode "apache-mode" "autoloaded" t)
-
-;; transparently work with compressed files
-(auto-compression-mode 1)
-
-;; define some modes for some filenames
-(add-to-list 'auto-mode-alist '(".htaccess$"   . apache-mode))
-(add-to-list 'auto-mode-alist '("httpd.conf$"  . apache-mode))
-(add-to-list 'auto-mode-alist '("apache2.conf$"    . apache-mode))
-(add-to-list 'auto-mode-alist '("ports.conf$" . apache-mode))
-
-(add-to-list 'auto-mode-alist (cons "/etc/ssh/ssh_config" 'shell-script-mode))
-(add-to-list 'auto-mode-alist (cons "/etc/ssh/sshd_config" 'shell-script-mode))
-
-(add-to-list 'auto-mode-alist '("\\.zsh$" . shell-script-mode))
-(add-to-list 'auto-mode-alist '("\\.zshrc$" . shell-script-mode))
-
-;; specific settings for vt420 terminal
-;;(enable-flow-control-on "vt420")
-
-;;--------------------------------------------------------------------
-;; Display stuff
-;;
-
-;; disabling menu bar
-(menu-bar-mode nil)
-
-;; disabling tool bar
-;; (tool-bar-mode nil)
-
-;; Remove startup messages
-(setq inhibit-startup-message t)
-(setq inhibit-startup-echo-area-message t)
-
-;; line and column number in modeline
-(setq column-number-mode t)
-(setq line-number-mode t)
-
-;; fonts (emacs X11)
-(set-default-font "7x14")
-(set-frame-font "7x14")
-
-;; do not extend buffer content with 'down' key
-(setq next-line-add-newlines nil)
-
-;; parenthesis uses
-(show-paren-mode t)
-(setq blink-matching-paren t)
-(setq blink-matching-paren-on-screen t)
-(setq show-paren-style 'expression)
-(setq blink-matching-paren-dont-ignore-comments t)
-
-;; setting maximum colors
-(font-lock-mode t)
-(global-font-lock-mode t)
-(setq font-lock-maximum-decoration t)
-
-;; make selections more visible (color)
-(setq transient-mark-mode t)
-
-;; make the compilation window size fixed
-(setq compilation-scroll-output t)
-
-;; having a soft scrolling !
-(defun point-of-beginning-of-bottom-line ()
-  (save-excursion
-    (move-to-window-line -1)
-    (point)))
-
-(defun point-of-beginning-of-line ()
-  (save-excursion
-    (beginning-of-line)
-    (point)))
-
-(defun next-one-line () (interactive)
-  (if (= (point-of-beginning-of-bottom-line) (point-of-beginning-of-line))
-      (progn (scroll-up 1)
-             (next-line 1))
-    (next-line 1)))
-
-(defun point-of-beginning-of-top-line ()
-  (save-excursion
-    (move-to-window-line 0)
-    (point)))
-
-(defun previous-one-line () (interactive)
-  (if (= (point-of-beginning-of-top-line) (point-of-beginning-of-line))
-      (progn (scroll-down 1)
-             (previous-line 1))
-    (previous-line 1)))
-
-(global-set-key (kbd "<down>") 'next-one-line)
-(global-set-key (kbd "<up>") 'previous-one-line)
-
-
-;; change tab width
-;(setq default-tab-width 4)
-
-;;--------------------------------------------------------------------
-;; Key bindings stuff
-
-;; easy navigation between buffers using cyclebuffer.el
-;; cyclebuffer.el is available in debian package emacs-goodies-el
-(global-set-key [f1] 'cyclebuffer-backward)
-(global-set-key [f2] 'cyclebuffer-forward)
-(global-set-key [f11] 'cyclebuffer-backward)
-(global-set-key [f12] 'cyclebuffer-forward)
-
-
-;; easy navigation between windows
-(global-set-key "\C-n" 'other-window)
-(global-set-key "\C-p" '(lambda () (interactive) (other-window -1)))
-
-;; spliting windows
-(global-set-key [f5] 'split-window-vertically)
-(global-set-key [f6] 'split-window-horizontally)
-(global-set-key [f7] 'delete-window)
-(global-set-key [f8] 'delete-other-windows)
-
-
-(global-set-key "\M-g" 'goto-line)
-(global-set-key "\C-q" 'kill-this-buffer)
-(global-set-key "\M-c" 'compile)
-(global-set-key [f9] 'compile)
-
-;; mouse settings (emacs X11)
-;;(global-set-key (quote [(mouse-5)]) (quote scroll-up))
-;;(global-set-key (quote [(mouse-4)]) (quote scroll-down))
-
-;;-------------------------------------------------------------------
-;; Mutt(ng) stuff
-(load-library "mutt-post")
-;; use muttrc-mode with mutt related files
-;; muttrc-mode is available in debian package emacs-goodies-el
-(add-to-list 'auto-mode-alist '("\\.mutt\\(.*\\)$" . muttrc-mode))
-(add-to-list 'auto-mode-alist '("\\.mutt/conf/\\(.*\\)$" . muttrc-mode))
-(add-to-list 'auto-mode-alist '("\\.muttng/conf/\\(.*\\)$" . muttrc-mode))
-(add-to-list 'auto-mode-alist '("\\.madmutt\\(.*\\)$" . muttrc-mode))
-;; automtically wrap lines when composing mail
-(add-to-list 'auto-mode-alist '(".mutt/tmp/mutt-" . post-mode))
-(add-to-list 'auto-mode-alist '(".muttng/tmp/muttng-" . post-mode))
-(add-to-list 'auto-mode-alist '(".madmutt/tmp/madmutt-" . post-mode))
-;;-------------------------------------------------------------------
-;; CMake stuff
-(add-to-list 'auto-mode-alist '("\\.cmake$" . cmake-mode))
-(add-to-list 'auto-mode-alist '("\\CMakeLists.txt$" . cmake-mode))
-
-;;-------------------------------------------------------------------
-;; Ispell / Aspell settings
-;; set default ispell dictionnary to french one
-(setq ispell-program-name "/usr/bin/aspell")
-(setq ispell-dictionary "francais")
-
-;; enable flyspell on text-mode
-;;(add-hook 'text-mode-hook
-;;          '(lambda()
-;;             (flyspell-mode)
-;;             ))
-
-;; enable flyspell on post-mode
-;;(add-hook 'post-mode-hook
-;;          '(lambda()
-;;             (flyspell-mode)
-;;             ))
-
-;;-------------------------------------------------------------------
-;; WeeChat coding style
-(setq c-mode-hook
-      '(lambda ()
-	 (c-set-style "K&R")
-	 (setq c-basic-offset 4)
-	 (setq c-tab-always-indent t)))
-
-
-;;-------------------------------------------------------------------
-;; WEB coding
-(load-library "multi-mode")
-(defun web-mode () (interactive)
-  (multi-mode 1
-	      'html-mode
-	      '("<%" ruby-mode)
-	      '("<?php" php-mode)
-	      '("<?" php-mode)
-	      '("<script" java-mode)
-	      '("<style" css-mode)
-	      '("</script" html-mode)
-	      '("?>" html-mode)
-	      '("%>" html-mode)))
-
-(add-hook 'php-mode-hook
-          (lambda()
-	    (defalias 'c-electric-backspace 'delete-backward-char)
-	    (defun c-indent-command () (interactive "*") (self-insert-command 1))
-	    (define-key php-mode-map "\C-a" 'beginning-of-line-text)
-	    (define-key php-mode-map [home] 'beginning-of-line-text)
-	    )
-	  )
-(add-hook 'html-mode-hook
-          (lambda()
-	    (defun indent-for-tab-command () (interactive "*") (self-insert-command 1))
-	    (define-key html-mode-map "\C-a" 'beginning-of-line-text)
-	    (define-key html-mode-map [home] 'beginning-of-line-text)
-	    (define-key html-mode-map (kbd "RET") 'newline-and-indent)
-	    )
-	  )
-(add-to-list 'auto-mode-alist '("\\.php$" . web-mode))
-(add-to-list 'auto-mode-alist '("\\.rhtml$" . web-mode))
-
-
-(defun indent-region-with-tab ()
-  (interactive)
-  (save-excursion
-    (if (< (point) (mark)) (exchange-point-and-mark))
-    (let ((save-mark (mark)))
-      (if (= (point) (line-beginning-position)) (previous-line 1))
-      (goto-char (line-beginning-position))
-      (while (>= (point) save-mark)
-	(goto-char (line-beginning-position))
-	(insert "\t")
-	(previous-line 1)))
-    (setq deactivate-mark nil)
-    ))
-
-
-(defun unindent-region-with-tab ()
-  (interactive)
-  (save-excursion
-    (if (< (point) (mark)) (exchange-point-and-mark))
-    (let ((save-mark (mark)))
-      (if (= (point) (line-beginning-position)) (previous-line 1))
-      (goto-char (line-beginning-position))
-      (while (>= (point) save-mark)
-	(goto-char (line-beginning-position))
-	(if (= (string-to-char "\t") (char-after (point))) (delete-char 1))
-	(previous-line 1)))
-    (setq deactivate-mark nil)
-    ))
-
-(global-set-key "\C-xi" 'indent-region-with-tab)
-(global-set-key "\C-xj" 'unindent-region-with-tab)

+ 0 - 302
.emacs-lisp/multi-mode.el

@@ -1,302 +0,0 @@
-;;; multi-mode.el --- Allowing multiple major modes in a buffer.
-;;;****************************************************************************
-;;; $Id: multi-mode.el,v 1.2 2002/11/15 09:33:50 marmotte Exp $
-;;;****************************************************************************
-;;
-;;
-;; Description:
-;;
-;;	Sometimes it is  desirable to  have different  major modes  in  one
-;;	buffer.  One   such   case occurs   when   editing  comments  in  a
-;;	programming language buffer.  Here it  might be desirable to use  a
-;;	totally  different mode than the  one used  for editing the program
-;;	code itself.
-;;
-;;	I have adoped this practice for editing Prolog.  The code itself is
-;;	edited   in prolog-mode,   whereas  the   comments  are edited   in
-;;	LaTeX-mode.
-;;
-;;	It  is  desirable to use different   modes instead of enhancing one
-;;	mode  because much  efford has  already  been put in various  modes
-;;	which needs not to be duplicated.
-;;
-;;	The multi-mode minor  mode provides  a means  to accomplish  such a
-;;	feature.
-;;
-;;	The modes  are described  by  initializing strings.   I assume that
-;;	certain tokens (i.e. transition strings)  indicate the places where
-;;	a new mode should be entered. To  determine the mode  at a point it
-;;	is only neccessary to find the last transition string before point.
-;;
-;;	The desired   modes are described  in  a list of   pairs or triples
-;;	consisting  of   a  transition   string  and a   mode   (a symbol).
-;;	Optionally a function symbol can be specified which is evaluated to
-;;	activate  the desired mode.  Additionally   the mode in absence  of
-;;	preceding transition strings has to be specified.
-;;
-;;
-;;
-;;
-;; Installation:
-;;	1. Ensure that multi-mode.el is on the load-path.
-;;	2. For efficiency it might be desirable to byte-compile 
-;;	   multi-mode.el.
-;;	3. Put the following in your .emacs file or a similar place
-;;	   where it is loaded when needed.
-;;
-;;	   (autoload 'multi-mode
-;;		     "multi-mode"
-;;		     "Allowing multiple major modes in a buffer."
-;;		     t)
-;;
-;;	4. Define  your own  incarnation of multi  mode  to serve as major
-;;	   mode.  This can be done in your .emacs file.  E.g.
-;;
-;;	   (defun multi-c-fundamental-mode () (interactive)
-;;	     (multi-mode 1
-;;			 'c-mode
-;;			 '(\"/*\" fundamental-mode my-fundamental-setup)
-;;			 '(\"*/\" c-mode)))
-;;
-;;	   This major mode can now be used to turn on the multi-mode in the
-;;	   minibuffer, or in the auto-mode-alist, or in the local variables
-;;	   of a file. E.g.
-;;
-;;	   (setq auto-mode-alist
-;;		 (cons '("\\.[ch]$" . multi-c-fundamental-mode)
-;;		 auto-mode-alist)
-;;
-;;
-;; Bugs and Problems:
-;;	- It is rather easy to hang my whole workstation when
-;;	  multi-mode-transitions has not a proper value.
-;;	  For sake of efficiency I omit finer type checking to avoid this
-;;	  problem.
-;;	  CURE: Never try to change the variable yourself. Use the
-;;		function multi-mode instead.
-;;
-;; To do:
-;;	- The generalization of transition strings to regular expressions
-;;	  seems to be straight forward. For efficience reasons I will do it
-;;	  only upon request.
-;;
-;;	- No provisions have been made to make the key bindings accessible
-;;	  in all modes. This might be desirable.
-;;
-;;
-;; Changes:
-;; $Log: multi-mode.el,v $
-;; Revision 1.2  2002/11/15 09:33:50  marmotte
-;;
-;; * Make most of the config compile
-;;
-;; Revision 1.1  2002/11/14 08:36:38  marmotte
-;; * Changed load of file, to load-path, so that the config files are not
-;; 	always loaded.
-;; * Added multi-mode to the emacs config
-;; * Added support for php and jsp, throught multi-mode.
-;; - Still need to add a version of c++-mode for php, cause somethings are
-;; 	not really well handled...
-;;
-; Revision 1.2  1994/06/11  22:08:22  gerd
-; *** empty log message ***
-;
-; Revision 1.1  1994/05/24  12:41:30  gerd
-; A little hack has been enhanced to a minor mode.
-;;
-;;
-;; Author:	
-;;	Gerd Neugebauer
-;;	Vdenburger Str. 16
-;;	64295 Darmstadt (Germany)
-;;
-;;	Net: gerd@intellektik.informatik.th-darmstadt.de
-;;	     gerd@imn.th-leipzig.de
-;;
-;;*****************************************************************************
-;; LCD Archive Entry:
-;; multi-mode|Gerd Neugebauer|gerd@intellektik.informatik.th-darmstadt.de|
-;; Minor mode allowing multiple major modes in a single buffer.|
-;; 11-Jun-1994|1.2|~/misc/multi-mode.el.Z|
-;;*****************************************************************************
-;;
-;; Copyright (C) 1994 Gerd Neugebauer
-;;
-;; multi-mode.el is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY.  No author or distributor
-;; accepts responsibility to anyone for the consequences of using it
-;; or for whether it serves any particular purpose or works at all,
-;; unless he says so in writing.  Refer to the GNU General Public
-;; License for full details.
-;;
-;; Everyone is granted permission to copy, modify and redistribute
-;; multi-mode.el, but only under the conditions described in the
-;; GNU General Public License.	 A copy of this license is
-;; supposed to have been given to you along with GNU Emacs so you
-;; can know your rights and responsibilities.  It should be in a
-;; file named COPYING.	Among other things, the copyright notice
-;; and this notice must be preserved on all copies.
-;;
-
-;;;----------------------------------------------------------------------------
-;;; Variable definitions and initializations
-
-
-
-(make-variable-buffer-local 'multi-mode-transitions)
-(defvar multi-mode-transitions nil
-  "Transition definition for the multi-mode minor mode.
-")
-
-(defvar multi-mode-beware '( (not isearch-mode) )
-  "List of forms to check if multi-mode is desirable. If all forms evaluate to
-t then a mode switch is allowed.")
-
-(make-variable-buffer-local 'multi-mode)
-(defvar multi-mode nil
-  "This variable indicates if the multi-mode minor mode is active.")
-
-
-;;;----------------------------------------------------------------------------
-;;; Definition of the minor mode
-
-(defun multi-mode (&optional arg &optional initial-mode &rest transitions) 
-  "Allowing multiple major modes in a buffer.
-
-Toggle multi mode. With numeric argument turn on multi mode if the argument
-is positive.
-
-Sometimes it is desirable to have different major modes in one buffer.  One
-such case occurs  when editing comments  in a programming  language buffer.
-Here it  might be desirable  to use a totally  different mode  than the one
-used for editing the program code itself.
-
-It is desirable   to use different  modes  instead  of enhancing one   mode
-because much effort has  already been put  in various modes which needs not
-to be duplicated.
-
-The multi-mode minor mode provides a means to accomplish such a feature.
-
-The  modes are described  by initializing  strings.  I assume that  certain
-tokens (i.e.  transition  strings)  indicate  the places  where a  new mode
-should be entered.  To determine  the mode at a point  it is only necessary
-to find the last transition string before point.
-
-The desired modes are described in a list of pairs or triples consisting of
-a transition string and  a mode (a  symbol).  Optionally a function  symbol
-can   be specified   which  is evaluated  to   activate  the desired  mode.
-Additionally the mode in absence of preceding transition  strings has to be
-specified.
-
-When called not interactively there are additional arguments to specify the
-transitions.
-
-INITIAL-MODE  is a symbol denoting   a major mode   to  be used before  any
-transition strings are present before point.
-
-The remaining optional arguments are pairs
-	(TOKEN MODE)
-or triples
-	(TOKEN MODE FUNCTION)
-
-The first element TOKEN is  a string which indicates  the token to activate
-the mode MODE specified in the second argument. Optionally a third argument
-can  be given. The  symbol FUNCTION is  used as a function  to be called to
-turn on the mode given as second argument. It defaults to MODE.
-
-Consider the following example:
-
-(multi-mode 1
-	    c-mode
-	    (\"/*\" fundamental-mode my-fundamental-setup)
-	    (\"*/\" c-mode))
-
-The first argument forces multi-mode to be  turned on.  The second argument
-declares the default mode to be c-mode. Thus at the beginning of the buffer
-c-mode is turned on. If a '/*'  is found before point then fundamental-mode
-may be turned on. This is done using the function my-fundamental-setup.
-
-If a '*/' is found before point then c-mode may be activated. Which mode is
-used depends on the last activating  pattern before point.  In this example
-everything between /* and */ can be edited  in fundamental mode. Everything
-else is in c-mode.
-
-See also the documentation of multi-mode-beware.";"
-(interactive "P")
-(setq multi-mode				; 
-      (if (null arg) (not multi-mode)		; Toggle multi-mode if no arg
-	(> (prefix-numeric-value arg) 0)))	; otherwise turn it on or off
-(let ((ok   t)				; result of type check
-      (tt   transitions)			; transition table
-	trans)					; transition
-  (while tt					; Check the transition table
-    (setq trans (car tt)			; Get a single transition
-            tt    (cdr tt))			; Advance the table pointer
-    (if (or (not (listp   trans))		; Check the transition
-	      (not (stringp (first trans)))	;
-	      (not (symbolp (second trans))))	;
-	(setq ok nil				; set error mark
-	      tt nil))			; stop checking
-    )
-    (if (and ok					; if transition table is ok
-	     initial-mode			; check the initial-mode
-	     (symbolp initial-mode))		;
-	(setq multi-mode-transitions		; set the local variable
-	      (cons initial-mode transitions)))	;
-    )
-
-  (force-mode-line-update)			; show the new state
-)
-
-(or (assq 'multi-mode minor-mode-alist)
-    (setq minor-mode-alist (cons '(multi-mode " MULTI") minor-mode-alist)))
-
-
-(defun multi-mode-update-mode ()
-  "Perform a mode switch if multi-mode is active."
-  ;; This function only starts to work if multi mode is on
-  ;; and a transition table is defined. Additionally the forms in
-  ;; multi-mode-beware are evaluated to see if a mode switch is desirable.
-  (if (and multi-mode
-	   multi-mode-transitions
-	   (eval (cons 'and multi-mode-beware))
-	   )
-      (let* ((transition    (cdr multi-mode-transitions)) ; get transitions
-	     (mode          (car multi-mode-transitions)) ; get initial mode
-	     (mode-function mode)       ; set initial mode switching function
-	     (pos           -1)		; set the initial position of a transit
-	     hit			; new position of a transition string
-	     tt)			; transition table
-	(while transition
-	  (setq tt         (car transition)	; extract a single transition
-		transition (cdr transition))	; advance the transitions
-	  (setq hit (save-excursion		; we don't want to change point
-		      (if (search-backward	; unfailing backward search
-			   (first tt)		;  for the transition pattern
-			   nil
-			   t)
-			  (point)		; upon sucess use the position
-			-2)))			; otherwise try to ignore it
-	  (if (> hit pos)			; pattern is newer than prev.
-	      (setq pos		  hit		;  then save position
-		    mode	  (second tt)	;  the desired mode and an
-		    mode-function (or (third tt) mode)); optional function
-	  )
-	)
-	(if (not (equal major-mode mode))	; if mode needs switching
-	    (let ((transitions multi-mode-transitions)) ; save transition table
-	      (if (fboundp mode-function)	; if mode function is defined
-		  (funcall mode-function))	;  then call it
-	      (setq multi-mode-transitions transitions  ; restore transition
-		    multi-mode t)))		; and minor mode
-      )
-  )
-)
-
-;;;----------------------------------------------------------------------------
-;;; The function is hooked into the post-command-hook to be called after
-;;; each function.
-;;;
-(add-hook 'post-command-hook 'multi-mode-update-mode)
-
-(provide 'multi-mode)

+ 0 - 1397
.emacs-lisp/mutt-post.el

@@ -1,1397 +0,0 @@
-;	$Id: post.el,v 2.4 2004/07/23 23:13:17 rreid Exp rreid $
-;; post.el --- Use (X?)Emacs(client) as an external editor for mail and news.
- 
-;;; Authors: Eric Kidd <eric.kidd@pobox.com>,
-;;;          Dave Pearson <davep@davep.org>,
-;;;          Rob Reid <reid@astro.utoronto.ca>,
-;;;          Roland Rosenfeld <roland@spinnaker.de>
-
-;; This is free software distributed under the GPL, yadda, yadda, yadda.
-;; It has no warranty. See the GNU General Public License for more
-;; information. Send us your feature requests and patches, and we'll try
-;; to integrate everything.
-
-;;; Maintainer: Rob Reid <reid@astro.utoronto.ca>
-
-;;; Keywords: mail
-
-;;; Commentary:
-;; This is a major mode for use with Mutt, the spiffy *nix mailreader du jour
-;; (See http://www.mutt.org/), slrn, the spiffy *nix newsreader du jour, or
-;; whatever you can get it to work with.  To use this mode, add the following
-;; line to the .emacs file in your home directory:
-;;
-;;   (load "/your/local/path/to/this/file/post")
-;;
-;; Note that you can omit the ".el" from the file name when calling load.
-;;
-;; If you want to make it available to all your users, type \C-h v
-;; load-path RET, pick an appropriate directory for post.el, and modify
-;; your sitewide default.el to (require 'post).
-;;
-;; You may find the latest version of this mode at
-;; http://astro.utoronto.ca/~reid/mutt/
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;; BUGS:
-;;
-;; Rob: I predict that some buffers (*Original*<2>, *Composing*<2>?)
-;; will be left behind if you edit more than one message at a time.
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;
-;;; Thanks
-;;;
-;;; Dave Pearson: Code, feature ideas, Mutt experience. Many thanks!
-;;; Louis Theran: Encouragement to make Mutt mode work like Emacs MUAs.
-;;; Ronald: Enlightening gripes about what Emacs should do, but doesn't.
-;;; Robert Napier: Bug reports about font-lock mode, fancy wrapping.
-;;; Kevin Rodgers: Answered RR's question on gnu.emacs.help on
-;;; overwriting server-process-filter's annoying message at startup.
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;
-;;; Revision History
-;;;
-;;; $Log: post.el,v $
-;;; Revision 2.401  2004/07/23 16:27:29  rreid
-;;; Fixed post-delete-quoted-signatures to not remove sneaky things like quoted
-;;; double dash arrows.  Thanks go to Felix Klee for a clear bug report.
-;;;
-;;; Revision 2.4  2002/04/22 22:04:29  reid
-;;; Tweaked post-emoticon-pattern yet again.  Made cl mandatory for all
-;;; versions of emacs.  (Thanks to Eric Dorland and Mike Schiraldi for bug
-;;; reports.)  Fixed post-unquote-region.  (Thanks to Mike Schiraldi for the
-;;; bug report.)
-;;;
-;;; Revision 2.3  2002/04/21 20:13:55  reid
-;;; Improved post-emoticon-pattern.
-;;;
-;;; Revision 2.2  2002/04/20 04:12:54  reid
-;;; Improved post-emoticon-pattern.
-;;;
-;;; Revision 2.1  2002/04/20 03:17:48  reid
-;;; - A major (but not total) synchronization with Dave Pearson's post-mode.
-;;;   header-set-followup-to and header-set-organization should work now.
-;;; - Syntax highlighting now works for quoted email addresses and URLs.
-;;; - *bold* words are now highlighted.
-;;; - Emoticons can now be highlighted, and the default regexp,
-;;;   post-emoticon-pattern, might be too enthusiastic for your taste.  In case
-;;;   you're curious, I verified that gnus' smiley-ems.el works with post, but I
-;;;   decided that it wasn't ideal.
-;;; - post-url-text-pattern changed to post-url-pattern and made more enthusiastic.
-;;;
-;;; revision 1.95 2002/04/10 00:06:26 reid
-;;; Fixed the regexp in post-kill-signature to not delete everything between
-;;; mutt's standard forwarding lines.  post-kill-signature is called indirectly
-;;; by many functions.
-;;;
-;;; Revision 1.9  2002/04/04 22:24:31  reid
-;;; Applied a patch (not quite verbatim) from The Anarcat
-;;; <anarcat@anarcat.dyndns.org> to make the entity separating siglets in
-;;; `post-variable-signature-source' a regexp, `post-signature-sep-regexp'.  The
-;;; default works either either the old post file format or strfiled (fortune)
-;;; files.
-;;;;
-;;; Changed default `post-random-signature-command' to `fortune
-;;; ~/.mutt/sigs.fortune'.
-;;;
-;;; `post-random-signature-command' should now NOT supply a fixed sig portion!
-;;;
-;;; (post-el-random-signature) supplied by The Anarcat to do random sig
-;;; selection purely within Emacs Lisp.
-;;;
-;;; Revision 1.8  2002/02/06 22:24:31  eric
-;;; clean up
-;;;
-;;; Revision 1.7.2  2002/02/06 22:17:01  eric
-;;; tweak regexps, make font-lock-comment-face be post-signature-text-face
-;;;
-;;; Revision 1.7.1  2002/02/06 21:58:58  eric
-;;; tweak regexp, change some types to regexp
-;;;
-;;; Revision 1.7.0  2002/02/06 21:36:56  eric
-;;; hilight signatures, urls and emails
-;;;
-;;; Revision 1.6.3.10  1999/10/11 00:29:41  roland
-;;; Corrected color quoting again: Now allows ">" in the middle of
-;;; a line which is quoted twice.
-;;;
-;;; Revision 1.6.3.9  1999/10/08 10:43:18  roland
-;;; Add third level of quoting faces.
-;;; Allow super-cite name prefixes before quote signs.
-;;;
-;;; Revision 1.6.3.8  1999/10/08 08:39:00  roland
-;;; post-font-lock-keywords now detects lines with only "> "in it
-;;; correctly (merged following line into it before).
-;;;
-;;; Revision 1.6.3.7  1999/10/04 10:07:48  roland
-;;; Add post-quote-region and post-unquote-region commands to quote and
-;;; unquote a region (one level).
-;;;
-;;; Revision 1.6.3.6  1999/09/03 23:13:55  reid
-;;; Valeriy E. Ushakov <uwe@ptc.spbu.ru> pointed out that (GNU) Emacs <20 has
-;;; fewer (optional) arguments to (read-string) than what I was using to
-;;; inherit the input method.  I didn't find a way off the top of my head
-;;; to redefine (read-string) without causing an infinite loop, so I have
-;;; substituted a macro (string-read prompt) which does the right thing,
-;;; so please use it instead of read-string.
-;;;
-;;; Revision 1.6.3.5  1999/08/29 19:58:49  reid
-;;; Changed default post-mail-message to handle hostnames with digits.
-;;; Thanks to Brian D. Winters <brianw@alumni.caltech.edu>.
-;;;
-;;; Revision 1.6.3.4  1999/03/20 03:02:05  reid
-;;; Made post compatible with emacs as far back as 19.28.1, probably
-;;; farther.
-;;;
-;;; Revision 1.6.3.3  1999/03/16 03:14:07  reid
-;;; Cleaned up post-select-signature-select-sig-from-file code.
-;;;
-;;; Revision 1.6.3.2  1999/03/16 03:05:12  reid
-;;; Fixed alist updating.
-;;;
-;;; Revision 1.6.3.1  1999/03/13 02:23:48  reid
-;;; Added defface to the list of things that get defined if customize
-;;; hasn't already done it.  Thanks to Melissa Binde for the bug report.
-;;;
-;;; Modified post-body-says-attach to use a regexp,
-;;; post-attachment-regexp, so that something like "\(attach\|anbringen\)"
-;;; can be used by bilingual people like Roland.
-;;;
-;;; Revision 1.6.2.1  1999/03/12 10:16:11  roland
-;;; Added missing () to post-insert-to-auto-mode-alist-on-load.
-;;;
-;;; Revision 1.6.2 1999/03/11 15:51 Dave Pearson
-;;; header-position-on-value fixed to return (point), and
-;;; defcustom macro provided for Emacs 19 users.
-;;;
-;;; Revision 1.6.1.2  1999/03/06 11:24:43  roland
-;;; Added post-insert-to-auto-mode-alist-on-load.
-;;;
-;;; Revision 1.6.1.1  1999/03/06 11:02:27  roland
-;;; Customized renaming of buffer.
-;;; Removed different handling for mail, news, news-reply.
-;;; Fixed problems with easy-menu under XEmacs.
-;;;
-;;; Revision 1.6.0 1999/03/04 18:04 Rob Reid
-;;; Returned post-signature-pattern to using "--" instead of "-- "
-;;; because some senders have broken MTAs (as Eric reminded me) and
-;;; some users don't use procmail to compensate.  This time all of the
-;;; functions dealing with signatures have been smartened up to avoid
-;;; false matches.  Unfortunately that means they don't use
-;;; post-signature-pattern in its raw form.
-;;;
-;;; Added post-backup-original so that Dave's post-copy-original can
-;;; be used.
-;;;
-;;; Kevin Rodgers explained how to put this in .emacs to fix the
-;;; server-process-filter's annoying message problem:
-;;;
-;;; Revision 1.1  1999/03/04 18:02:30  reid
-;;; Initial revision
-;;;
-;;; %%%%%%%%%%%% Put in .emacs %%%%%%%%%%%
-;;;
-;;; ;;; Email
-;;; (server-start)
-;;; (load "/home/reid/.mutt/post")
-;;; (defadvice server-process-filter (after post-mode-message first activate)
-;;;    "If the buffer is in post mode, overwrite the server-edit
-;;;    message with a post-save-current-buffer-and-exit message."
-;;;    (if (eq major-mode 'post-mode)
-;;;        (message
-;;;         (substitute-command-keys "Type \\[describe-mode] for help composing; \\[post-save-current-buffer-and-exit] when done."))))
-;;; ; This is also needed to see the magic message.  Set to a higher
-;;; ; number if you have a faster computer or read slower than me.
-;;; '(font-lock-verbose 1000)
-;;; ; (setq server-temp-file-regexp "mutt-")
-;;; (add-hook 'server-switch-hook
-;;;         (function (lambda()
-;;;                     (cond ((string-match "Post" mode-name)
-;;;                            (post-goto-body))))))
-;;;
-;;; %%%%%%%%% We now return to our regular commentary %%%%%%%%%
-;;;
-;;; Eric Kidd asked that the name of Headers mode be changed so that
-;;; it doesn't conflict with mutt-mode's Headers, so I changed it to
-;;; just Header (no s).
-;;;
-;;; Revision 1.5? 1999/02/27 17:30 Rob Reid
-;;; I had a go at combining Dave Pearson's post mode with Eric Kidd's
-;;; Mutt mode.  Since Dave Pearson's post mode explicitly handles news as
-;;; well as email, and this should be useful for more than just mutt,
-;;; I'm calling it post mode.  I also added functions for picking
-;;; random signatures, selecting a signature from a file, and
-;;; intelligently (IMHO) prompting the user for an attachment when
-;;; necessary.  Changed mutt-save-buffer-and-exit to work better with
-;;; emacsclient, and some of the key bindings.  post-signature-pattern
-;;; now defaults to use "-- " instead of "--", and I have far less
-;;; trouble this way (I use procmail to clean up braindead "--"s.).  I
-;;; don't know why Eric warned against trailing whitespace.
-;;;
-;;; Revision 1.4  1998/04/11 00:05:46  emk
-;;; Fixed font-lock bug. Also made mutt-mode a little more careful about
-;;; saving various bits of Emacs state when moving around the buffer.
-;;;
-;;; Revision 1.3  1998/03/25 00:37:36  emk
-;;; Added support for menus and font-lock mode, plus a few bug fixes.
-;;;
-;;; Revision 1.2  1998/03/24 13:19:46  emk
-;;; Major overhaul--more commands, a minor mode for header editing, and other
-;;; desirable features. Attaching files seems to be broken, though.
-;;;
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;
-;;; Required Packages
-
-(require 'cl)
-(require 'derived)
-(require 'easymenu)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;
-;;; Customization Support
-;;;
-;;; Set up our customizable features. You can edit these (and lots of other
-;;; fun stuff) by typing M-x customize RET. The Post preferences can be
-;;; found under the [Applications] [Mail] category.
-
-;; Make post mode a bit more compatible with older (i.e. <20) versions of emacs.
-;;; Code:
-(eval-and-compile
-  ;; Dumb down read-string if necessary.
-  ;; The number of optional arguments for read-string seems to increase
-  ;; sharply with (emacs-version).  Since old versions of emacs are a large
-  ;; source of bug reports it might be worth writing (or looking for)
-  ;; (bug-report reid@astro.utoronto.ca) which emails me the result of
-  ;; (emacs-version) along with a user supplied description of the problem.
-  ;; GNU Emacs 19.28.1 only has INITIAL-STRING as an optional argument.
-  ;; 19.34.1 has (read-string PROMPT &optional INITIAL-INPUT HISTORY).  20.2.1
-  ;; has (read-string PROMPT &optional INITIAL-INPUT HISTORY DEFAULT-VALUE
-  ;; INHERIT-INPUT-METHOD).
-  ;; Since I haven't found a way of redefining read-string without causing an
-  ;; infinite loop, please use (string-read prompt).
-  (if (< (string-to-number (substring (emacs-version)
-				      (string-match "[0-9]+\.[0-9]"
-					 (emacs-version) 5))) 20)
-      (defmacro string-read (prompt) (` (read-string (, prompt))))
-      (defmacro string-read (prompt)
-	(` (read-string (, prompt) nil nil nil t))))
-
-  ;; XEmacs gnuserv uses slightly different functions than the GNU Emacs
-  ;; server, and some people are still wasting time and CPU cycles by starting
-  ;; up a new emacs each time.
-  (cond ((fboundp 'server-edit)
-	 (fset 'post-finish 'server-edit))
-	((fboundp 'gnuserv-kill-buffer-function)
-	 (fset 'post-finish 'gnuserv-kill-buffer-function))
-	(t
-	 (fset 'post-finish 'save-buffers-kill-emacs)))
-   
-  ;; If customize isn't available just use defvar instead.
-  (unless (fboundp 'defgroup)
-    (defmacro defgroup  (&rest rest) nil)
-    (defmacro defcustom (symbol init docstring &rest rest)
-      ; The "extra" braces and whitespace are for emacs < 19.29.
-      (` (defvar (, symbol) (, init) (, docstring))))
-    (defmacro defface (&rest args) nil))
-  (unless (fboundp 'buffer-substring-no-properties)
-    (fset 'buffer-substring-no-properties 'buffer-substring)))
-
-(defgroup post nil
-  "Composing e-mail messages with Post.
-Emacs can run as an external editor for Mutt, the spiffy Unix mail reader
-du jour, or slrn, the spiffy Unix news reader du jour.  You can get
-Mutt from http://www.mutt.org/."
-  :group 'mail)
-
-(defcustom post-uses-fill-mode t
-  "*Specifies whether Post should automatically wrap lines.
-Set this to t to enable line wrapping, and nil to disable line
-wrapping.  Note that if a paragraph gets messed up (the line wrapper
-is very primitive), you can type \\[fill-paragraph] to rewrap the paragraph."
-  :type 'boolean
-  :group 'post)
-
-(defcustom post-mail-message "mutt-[a-z0-9]+-[0-9]+-[0-9]+\\'"
-  "*Regular expression which matches your mailer's temporary files."
-  :type 'string
-  :group 'post)
-
-(defcustom post-news-posting "\\.\\(followup\\|letter\\|article\\)$"
-  "*Regular expression which matches your news reader's composition files."
-  :type 'string
-  :group 'post)
-
-(defcustom post-backup-original nil
-  "*Controls whether a pristine backup of the original is kept for reference."
-  :type 'boolean
-  :group 'post)
-
-(defcustom post-signature-pattern "\\(--\\|Cheers,\\|\\)"
-  "*Pattern signifying the beginning of signatures.
-It should not contain trailing whitespace unless you know what you're doing."
-  :type 'regexp
-  :group 'post)
-
-(defcustom post-signature-sep-regexp "^\\(%\\|^L\\|--\\)?\n"
-  "*Regular expression delimiting signatures in the signature file.
-This allows the use of classic fortune files as signature files.
-This should normally contain a newline."
-  :type 'regexp
-  :group 'post)
-
-(defcustom post-signature-source-is-file t
-  "*Toggles the signature source type between file and directory."
-  :type 'boolean
-  :group 'post)
-
-(defcustom post-variable-signature-source "~/.mutt/sigs.fortune"
-  "*Location of the variable part of your signature.
-Post uses this to locate signatures.  It can be either a directory
-with one item per file or a file with items separated by blank lines."
-  :type 'string
-  :group 'post)
-
-(defcustom post-fixed-signature-source "~/.fixedsig"
-  "*File with the fixed part of your signature."
-  :type 'string
-  :group 'post)
-
-(defcustom post-signature-directory "~/.sigs/"
-  "*The directory that contains your collection of signature files."
-  :type 'string
-  :group 'post)
-
-(defcustom post-signature-wildcard "sig*"
-  "*Wildcard for finding signature files in your signature directory."
-  :type 'string
-  :group 'post)
-
-(defcustom post-random-signature-command "fortune ~/.mutt/sigs.fortune"
-  "*Command to run to get a random signature.
-Examples are available at http://astro.utoronto.ca/~reid/mutt/"
-  :type 'string
-  :group 'post)
-
-(defcustom post-kill-quoted-sig t
-  "Specifies whether `post-mode' should automatically kill quoted signatures."
-  :type 'boolean
-  :group 'post)
-
-(defcustom post-jump-header t
-  "Specifies wheather `post-mode' should jump to the body."
-  :type 'boolean
-  :group 'post)
-
-(defcustom post-force-pwd-to-home t
-  "Specifies whether `post-mode' should cd to your home directory."
-  :type 'boolean
-  :group 'post)
-
-(defcustom post-email-address (concat (user-login-name) "@" mail-host-address)
-  "*Your email address."
-  :type 'string
-  :group 'post)
-
-(defcustom post-should-prompt-for-attachment 'Smart
-  "*Controls whether an attachment will be prompted for before saving
-the message and exiting.  'Smart' will prompt only if the body
-contains post-attachment-regexp."
-  :type '(choice (const Never)
-		 (const Smart)
-		 (const Always))
-  :group 'post)
-
-(defcustom post-attachment-regexp "attach"
-  "*This is what post looks for in the body if
-post-should-prompt-for-attachment is 'Smart'."
-  :type 'regexp
-  :group 'post)
-
-(defcustom post-news-poster-regexp "^On .*<.*>.*wrote:$"
-  "Regular expression used to locate the attribution line of a news posting."
-  :type 'regexp
-  :group 'post)
-
-(defcustom post-rename-buffer t
-  "Specify whether `post-mode' should rename the buffer to *Composing*."
-  :type 'boolean
-  :group 'post)
-
-(defcustom post-insert-to-auto-mode-alist-on-load t
-  "Automatically insert `post-mode' with `post-mail-message' to `auto-mode-alist'."
-  :type 'boolean
-  :group 'post)
-
-(defcustom post-mode-hook nil
-  "List of hooks to be executed on entry to `post-mode'."
-  :group 'post)
-
-(defcustom post-quote-start "> "
-  "Pattern which is added (or removed) at the beginning of the line by
-comment-region"
-  :group 'post)
-
-(defcustom post-email-address-pattern
-  "[A-Za-z0-9_][-A-Za-z0-9._]*@[-A-Za-z0-9._]*[A-Za-z0-9]"
-  "Pattern to detect email addresses."
-  :type 'regexp
-  :group 'post)
-
-(defcustom post-url-pattern
-  '("\\<\\(\\(https?\\|news\\|mailto\\|ftp\\|gopher\\):\\|\\(www\\|ftp\\)\\.\\)[-~A-Za-z0-9._/%$+?#]+[A-Za-z0-9/#]" "<URL:[^ ]+>")
-  "Pattern to detect URL addresses."
-  :type '(repeat regexp)
-  :group 'post)
-
-(defcustom post-bold-pattern '("\\*\\w+\\*")
-  "*List of regular expressions that define bold text."
-  :type '(repeat regexp)
-  :group 'post)
-
-(defcustom post-underline-pattern '("_\\w+_")
-  "*List of regular expressions that define underlined text."
-  :type '(repeat regexp)
-  :group 'post)
-
-(defcustom post-emoticon-pattern '("[0O(<{}]?[;:8B|][.,]?[-+^*o0O][{<>/\|]?[][)>(<|/\P][)>]?"
-			"\\s [(<]?[][)>(<|/\][}<>|]?[-+^*oO0][,.]?[:8][0O>]?"
-			"\\s [;:][][P)\/(]" "\\s [][)(P\/][:;]"
-				   "<[Gg]>" "<[BbSs][Gg]>")
-  "*List of regular expressions that define a emoticon."
-  :type '(repeat regexp)
-  :group 'post)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;
-;;; Customizable Faces
-;;; If you find a more attractive color scheme for dark backgrounds, please
-;;; email it to reid@astro.utoronto.
-
-(defgroup post-faces nil
-  "Typefaces used for composing messages with Post."
-  :group 'post
-  :group 'faces)
-
-(defface post-header-keyword-face
-  '((((class color)
-      (background light))
-     (:foreground "Navy" :bold t))
-    (((class color)
-      (background dark))
-     (:foreground "LightBlue" :bold t))
-    (t
-     (:bold t)))
-  "Face used for displaying keywords (e.g. \"From:\") in header."
-  :group 'post-faces)
-
-(defface post-header-value-face
-  '((((class color)
-      (background light))
-     (:foreground "MidnightBlue"))
-    (((class color)
-      (background dark))
-     (:foreground "LightSteelBlue")))
-  "Face used for displaying the values of header."
-  :group 'post-faces)
-
-(defface post-quoted-text-face
-  '((((class color)
-      (background light))
-     (:foreground "Sienna" :italic t))
-    (((class color)
-      (background dark))
-     (:foreground "Wheat" :italic t))
-    (t
-     (:bold t :italic t)))
-  "Face used for displaying text which has been quoted (e.g. \">foo\")."
-  :group 'post-faces)
-
-(defface post-double-quoted-text-face
-  '((((class color)
-      (background light))
-     (:foreground "Firebrick" :italic t))
-    (((class color)
-      (background dark))
-     (:foreground "Tan" :italic t))
-    (t
-     (:italic t)))
-  "Face used for text which has been quoted twice (e.g. \">>foo\")."
-  :group 'post-faces)
-
-(defface post-multiply-quoted-text-face
-  '((((class color)
-      (background light))
-     (:foreground "goldenrod" :italic t))
-    (((class color)
-      (background dark))
-     (:foreground "tan3" :italic t))
-    (t
-     (:italic t)))
-  "Face used for text which has been quoted more than twice (e.g. \">>>foo\")."
-  :group 'post-faces)
-
-(defface post-signature-text-face
-  '((((class color)
-      (background light))
-     (:foreground "red3"))
-    (((class color)
-      (background dark))
-     (:foreground "red1"))
-    (t
-     (:bold t)))
-  "Face used for text that is part of a signature"
-  :group 'post-faces)
-
-(defface post-email-address-text-face
-  '((((class color)
-      (background light))
-     (:foreground "green3"))
-    (((class color)
-      (background dark))
-     (:foreground "green1"))
-    (t
-     (:italic t)))
-  "Face used for email addresses"
-  :group 'post-faces)
-
-(defface post-url-face
-  '((((class color)
-      (background light))
-     (:foreground "green3" :bold t))
-    (((class color)
-      (background dark))
-     (:foreground "green1" :bold t))
-    (t
-     (:italic t)))
-  "Face used for URL addresses"
-  :group 'post-faces)
-
-(defface post-emoticon-face
-  '((((class color)
-      (background light))
-     (:foreground "black" :background "yellow" :bold t))
-    (((class color)
-      (background dark))
-     (:foreground "black" :background "yellow" :bold t))
-    (t
-     (:bold t)))
-  "Face used for text matched by post-emoticon-pattern."
-  :group 'post-faces)
-
-(defface post-bold-face
-  '((((class color)
-      (background light))
-     (:bold t))
-    (((class color)
-      (background dark))
-     (:bold t))
-    (t
-     (:bold t)))
-  "Face used for text matching post-bold-pattern."
-  :group 'post-faces)
-
-(defface post-underline-face
-  '((((class color)
-      (background light))
-     (:underline t))
-    (((class color)
-      (background dark))
-     (:underline t))
-    (t
-     (:underline t)))
-  "Face used for text matching post-underline-pattern."
-  :group 'post-faces)
-
-; Note: some faces are added later!
-(defvar post-font-lock-keywords
-  `(("^\\([A-Z][-A-Za-z0-9.]+:\\)\\(.*\\)$"
-     (1 'post-header-keyword-face)
-     (2 'post-header-value-face))
-    ("^[ \t\f]*\\(>[ \t\f]*\\)\\([-a-zA-Z]*>[ \t\f]*\\)\\([-a-zA-Z]*>.*\\)$"
-     (1 'post-quoted-text-face)
-     (2 'post-double-quoted-text-face)
-     (3 'post-multiply-quoted-text-face))
-    ("^[ \t\f]*\\(>[ \t\f]*\\)\\([-a-zA-Z]*>.*\\)$"
-     (1 'post-quoted-text-face)
-     (2 'post-double-quoted-text-face))
-    ("^[ \t\f]*\\(>[ \t\f]*[^ \t\f\n>].*\\)$"
-     (1 'post-quoted-text-face))
-    ("^[ \t\f]*\\(>[ \t\f]*\\)$"
-     (1 'post-quoted-text-face))
-	(,post-email-address-pattern
-	 (0 'post-email-address-text-face)))
-  "Highlighting rules for message mode.")
-
-;;; Declare global mode variables.
-
-(defconst post-font-lock-syntactic-keywords
-  `((,(concat "^" post-signature-pattern "[ \t\f]*$") 0 '(11))))
-
-(defun post-font-lock-syntactic-face-function (state)
-  "Function for font locking syntactic faces.
-Argument STATE ."
-post-signature-text-face)
-
-(defvar post-buf nil
-  "Name of the composing buffer.")
-
-(defvar post-select-signature-mode-map nil
-  "Local keymap for the select-signature buffer.")
-
-(defvar post-select-signature-last-buffer nil
-  "Pointer to the calling buffer.")
-
-(defvar post-select-signature-last-point nil
-  "Where we were in the calling buffer.")
-
-(defvar post-has-attachment nil
- "Whether the message has an attachment.")
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;
-;;; Interactive Commands
-
-(defun post-save-current-buffer-and-exit ()
-  "Save the current buffer and exit Emacs."
-  (interactive)
-
-  ;; Should the user be prompted for an attachment?
-  (cond (post-has-attachment)
-	((equal post-should-prompt-for-attachment 'Never))
-	((or (equal post-should-prompt-for-attachment 'Always)
-	     (post-body-says-attach))
-	 (post-prompt-for-attachment)))
-
-  (basic-save-buffer)
-
-  (if post-backup-original
-      (kill-buffer "*Original*"))
-
-  (post-finish)
-
-  ;; Added by Rob Reid 10/13/1998 to prevent accumulating *Composing* buffers
-  ;; when using (emacs|gnu)client.  Helped by Eric Marsden's Eliza example in
-  ;; http://www.ssc.com/lg/issue29/marsden.html
-  (kill-buffer post-buf))
-
-(defun post-goto-body ()
-  "Go to the beginning of the message body."
-  (interactive)
-  (goto-char (point-min))
-  ;; If the message has header, slide downward.
-  (and header-mode (save-match-data (re-search-forward "^$" nil t))
-       (next-line 1)))
-
-(defun post-goto-signature ()
-  "Go to the beginning of the message signature."
-  (interactive)
-  (goto-char (point-max))
-  (and (save-match-data
-	 (re-search-backward (concat "^" post-signature-pattern
-				     "[ \t\f]*$")
-			     nil t))))
-
-(defun post-delete-quoted-signatures ()
-  "Delete quoted signatures from buffer."
-  (interactive)
-  (goto-char (point-min))
-  (flush-lines (concat "^\\([ \t\f]*>[ \t\f>]*\\)"
-		       post-signature-pattern
-		       "[ \t\f]*\\(\n\\1.*\\)+")))
-
-(defun post-kill-signature ()
-  "Kill the signature from the buffer.
-Returns the point value for where the signature was or, if there isn't a
-signature, the point value of the end of the buffer"
-  (interactive)
-  (save-excursion
-    (goto-char (point-min))
-; The .=*+|#@!~$%&()_- is to compensate for people who put ASCII art on the
-; same line as the sigdashes, and the $ at the end prevents this from deleting
-; everything between mutt's standard forwarding lines.
-    (cond ((search-forward-regexp (concat "^" post-signature-pattern
-					  "[ \t\f.=*+|#@!~$%&()_-]*$") nil t)
-	   (beginning-of-line)
-	   (kill-region (point) (point-max)))
-	  (t
-	   (goto-char (point-max))))
-    (point)))
-
-(defun post-delete-old-citations ()
-  "Delete citations more than one level deep from buffer."
-  (interactive)
-  (goto-char (point-min))
-  (flush-lines "^[ \t\f]*>[ \t\f]*>[ \t\f>]*"))
-
-;;; Functions for messing with the body
-
-(defun post-make-region-bold (start end)
-  "Apply mutt's nroff style bold to a region of text.
-Argument START start of region.
-Argument END end of region."
-  (interactive "r")
-  (while (< start end)
-    (goto-char start)
-    (insert (buffer-substring-no-properties start (1+ start)))
-    (insert (char-to-string 8))
-    (setq start (+ start 3))
-    (setq end   (+ end   2))))
-
-(defun post-make-region-underlined (start end)
-  "Apply mutt's nroff style underline to a region of text.
-Argument START start of region.
-Argument END end of region."
-  (interactive "r")
-  (while (< start end)
-    (goto-char start)
-    (insert "_")
-    (insert (char-to-string 8))
-    (setq start (+ start 3))
-    (setq end   (+ end   2))))
-
-(defun post-quote-region (beg end)
-  "Quote a region using the `post-quote-start' variable.
-Argument BEG Beginning of region to be quoted.
-Argument END End of region to be quoted."
-  (interactive "r")
-  (comment-region beg end))
-
-(defun post-unquote-region (beg end)
-  "Un-quote a region one level using the `post-quote-start' variable.
-Argument BEG Beginning of region to be quoted.
-Argument END End of region to be quoted."
-  (interactive "r")
-  (uncomment-region beg end))
-
-; From Dave Pearson, July 15, 2000
-(defun* split-quoted-paragraph (&optional (quote-string "> "))
-  "Split a quoted paragraph at point, keeping the quote."
-  (interactive)
-  (if (save-excursion
-        (beginning-of-line)
-        (looking-at (regexp-quote quote-string)))
-      (progn
-        (let ((spaces (- (point)
-                         (save-excursion
-                           (beginning-of-line)
-                           (point))
-                         (length quote-string))))
-          (save-excursion
-            (insert (format "\n\n%s%s" quote-string (make-string spaces ? ))))))
-    (error "Can't see a quoted paragraph here")))
-
-(defun post-random-signature ()
-  "Randomize the signature.
-Set it to whatever `post-random-signature-command' spits out followed by the
-content of `post-fixed-signature-source', if available, or a nasty reminder if
-it is not."
-  (interactive)
-  (save-excursion
-    (goto-char (post-kill-signature))
-    (insert "-- \n")
-    (shell-command post-random-signature-command t)
-    (goto-char (point-max))
-    (if (file-readable-p post-fixed-signature-source)
-	(insert-file-contents post-fixed-signature-source)
-      (insert "I really need a `post-fixed-signature-source'!\n"))))
-
-(defun post-el-random-signature ()
-  "Choose a random signature from `post-variable-signature-source'.
-the signatures in `post-variable-signature-source' must be separated by
-`post-signature-sep-regexp'."
-  (interactive)
-  (let ((sig nil))
-    (save-excursion
-      (set-buffer (generate-new-buffer "*Post-Select-Signature*"))
-      (insert-file post-variable-signature-source)
-      (beginning-of-buffer)
-      ;; we have 2 lists of marks since seperators are of arbitrary lenght
-      (let ((marks-st (list (point-min)))
-	    (marks-end (list))
-	    (count 0))          ;nth counts from zero and random is [0,N)
-	(while (search-forward-regexp post-signature-sep-regexp nil "a")
-	  (setq marks-st (cons (match-end 0) marks-st)
-		marks-end (cons (match-beginning 0) marks-end)
-		count (1+ count)))
-	(setq marks-end (cons (point-max) marks-end))
-	(let ((r (random (1+ count))))
-	  (setq sig (buffer-substring-no-properties
-		     (nth r marks-st) (nth r marks-end))))
-	(kill-buffer (current-buffer)))
-      (goto-char (post-kill-signature))
-      (insert-string "-- \n")
-      (insert sig)
-      (if (file-readable-p post-fixed-signature-source)
-	  (insert-file-contents post-fixed-signature-source)
-	(insert "I really need a `post-fixed-signature-source'!\n")))))
-
-(defun post-select-signature-from-file ()
-  "*Interactively select a signature from `post-variable-signature-source'."
-  (interactive)
-  (setq post-select-signature-last-buffer (current-buffer))
-  (setq post-select-signature-last-point (point))
-  (pop-to-buffer "*Post-Select-Signature*")
-  (insert-file post-variable-signature-source)
-  (use-local-map post-select-signature-mode-map))
-
-(defun post-select-signature-select-sig-from-file ()
- "*Chooses the signature the cursor is in from `post-variable-signature-source'."
-  (interactive)
-
-  ;; These 2 lines select whatever siglet the cursor is sitting in,
-  ;; making it nifty to C-s "word" then C-m (or whatever this is
-  ;; bound to).
-  (let ((sig-start (point))
-        (sig-end (point)))
-
-    (cond ((setq sig-start (search-backward-regexp post-signature-sep-regexp
-						   nil "a"))
-	   (forward-line 1)
-	   (setq sig-start (point))))
-
-    (if (search-forward-regexp post-signature-sep-regexp nil "a")
-	(setq sig-end (match-beginning 0))
-      (setq sig-end (point-max)))
-
-    (let ((sig (buffer-substring-no-properties sig-start sig-end)))
-      (switch-to-buffer post-select-signature-last-buffer)
-      (goto-char (post-kill-signature))
-      (insert-string "-- \n")
-      (insert sig))
-    (if (file-readable-p post-fixed-signature-source)
-	(insert-file-contents post-fixed-signature-source))
-    (post-select-signature-quit)))
-
-(defun post-select-signature-from-dir ()
-  "Select a new signature for an email/post in the current buffer."
-  (interactive)
-  (setq post-select-signature-last-buffer (current-buffer))
-  (setq post-select-signature-last-point (point))
-  (pop-to-buffer "*Post-Select-Signature*")
-  (list-directory (concat post-signature-directory
-                          post-signature-wildcard) t)
-  (pop-to-buffer "*Directory*")
-  (next-line 1)
-  (copy-to-buffer "*Post-Select-Signature*" (point) (point-max))
-  (kill-buffer "*Directory*")
-  (pop-to-buffer "*Post-Select-Signature*")
-  (use-local-map post-select-signature-mode-map)
-  (toggle-read-only t))
-
-(defun post-select-signature-select-sig-from-dir ()
-  "Set the signature in the calling buffer to the one under the cursor."
-  (interactive)
-  (let ((sig-start   nil)
-        (sig-to-load nil))
-    (end-of-line)
-    (search-backward " ")
-    (forward-char)
-    (setq sig-start (point))
-    (end-of-line)
-    (setq sig-to-load (buffer-substring-no-properties sig-start (point)))
-    (switch-to-buffer post-select-signature-last-buffer)
-    (goto-char (post-kill-signature))
-    (insert-string "-- \n")
-    (insert-file (concat post-signature-directory sig-to-load))
-    (message "Signature set to %s%s" post-signature-directory sig-to-load)
-    (post-select-signature-quit)))
-
-(defun post-select-signature-quit ()
-  "Kill the *Post-Select-Signature* frame."
-  (interactive)
-  (kill-buffer "*Post-Select-Signature*")
-  (switch-to-buffer post-select-signature-last-buffer)
-  (goto-char post-select-signature-last-point)
-  (delete-other-windows))
-
-;;; Non-interactive functions
-
-(defun post-ask-for-address-with-default (header)
-  "Prompt for an email address, showing default.
-Argument HEADER the header type."
-  (let ((default (if (= (length (post-get-header-value header)) 0)
-                     post-email-address
-                   (post-get-header-value header))))
-    (read-string (concat header ": ") default)))
-
-; From davep@davep.org.  RR hasn't tested it.
-(defun post-get-header-value (header)
-  "Get the value of a specific mail HEADER."
-  (save-excursion
-    (let ((value          "")
-          (start-of-value nil))
-      (setf (point) (point-min))
-      (when (post-find-header-line header)
-        (setq start-of-value (point))
-        (end-of-line)
-        (setq value (buffer-substring-no-properties start-of-value (point))))
-      value)))
-
-;;; From davep@davep.org.  RR hasn't tested it.
-(defun post-find-header-line (header)
-  "Find a HEADER line in the header."
-  (let ((old-point (point))
-        (end-of-header nil)
-        (found-point nil))
-    (setf (point) (point-min))
-    (search-forward-regexp "^$" nil t)
-    (setq end-of-header (point))
-    (setf (point) (point-min))
-    (cond ((search-forward-regexp (concat "^" header ": ") nil t)
-           (cond ((< (point) end-of-header)
-                  (setq found-point (point)))
-                 (t
-                  (setf (point) old-point))))
-          (t
-           (setf (point) old-point)))
-    found-point))
-
-;;; Function to make a backup buffer for viewing the original.
-(defun post-copy-original ()
-  "Make a copy of the `post-mode' buffer before any editing by the user.
-This way they can refer back to this buffer during a compose session."
-  (copy-to-buffer (get-buffer-create "*Original*")
-		  (point-min) (point-max)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;
-;;; The Heart of Darkness
-;;;
-;;; The old post mode (i.e. Dave Pearson's) derived from mail-mode.  I
-;;; prefer deriving from text mode like mutt mode did. - RR
-(define-derived-mode post-mode text-mode "Post"
-  "Major mode for composing email or news with an external agent.
-To customize it, type \\[customize] and select [Applications] [Mail] [Post].
-When you finish editing this message, type \\[post-save-current-buffer-and-exit] to save and exit Emacs.
-
-\\{post-mode-map}"
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;
-;;; Neat things to do right off the bat.
-
-  (auto-fill-mode (if post-uses-fill-mode 1 0))
-
-  (if post-backup-original (post-copy-original))
-
-  ;; Make Emacs smarter about wrapping citations and paragraphs.
-  ;; We probably can't handle Supercited messages, though.
-  (make-local-variable 'paragraph-start)
-  (make-local-variable 'paragraph-separate)
-  (setq paragraph-start
-	"\\([ \t\n\f]+[^ \t\n\f>]\\|[ \t\f>]*$\\)"
-	paragraph-separate
-	"[ \t\f>]*$")
-
-  ;; XEmacs needs easy-menu-add, Emacs does not care
-  (easy-menu-add post-mode-menu)
-
-  ;; If headers were passed, activate the necessary commands.
-  (when (looking-at "^[-A-Za-z0-9]+:")
-    (header-mode 1))
-
-  ;; Our temporary file lives in /tmp. Yuck! Compensate appropriately.
-  (make-local-variable 'backup-inhibited)
-  (setq backup-inhibited t)
-
-  (if (boundp 'font-lock-defaults)
-      (make-local-variable 'font-lock-defaults))
-  (flet ((add-syntax-highlight (face regexps)
-	    (set face face)
-	    (nconc post-font-lock-keywords
-		   (loop for regexp in regexps
-			 collect (list regexp (list 0 face 't))))))
-;			 collect (list regexp `(,0 ',face))))))
-    (add-syntax-highlight 'post-emoticon-face post-emoticon-pattern)
-    (add-syntax-highlight 'post-bold-face   post-bold-pattern)
-    (add-syntax-highlight 'post-underline-face   post-underline-pattern)
-    (add-syntax-highlight 'post-url-face    post-url-pattern))
-  (setq font-lock-defaults
-	'(post-font-lock-keywords nil nil nil nil
-				  (font-lock-syntactic-keywords
-				   . post-font-lock-syntactic-keywords)
-				  (font-lock-comment-face
-;				   . 'post-signature-text-face)))
-				   . post-signature-text-face)))
-
-  ;; Force pwd to home directory if so required.
-  (cond (post-force-pwd-to-home
-	 (cd "~")))
-
-  ;; Kill quoted sig if so required.
-  (cond (post-kill-quoted-sig
-	 (post-delete-quoted-signatures)
-         (not-modified)))
-
-  ;; Remap signature selection functions according to whether the
-  ;; signatures are stored in a file or directory.
-  (if post-signature-source-is-file
-      (progn
-	(defalias 'post-select-signature 'post-select-signature-from-file)
-	(defalias 'post-select-signature-select-sig
-	  'post-select-signature-select-sig-from-file))
-    (progn
-      (defalias 'post-select-signature 'post-select-signature-from-dir)
-      (defalias 'post-select-signature-select-sig
-	'post-select-signature-select-sig-from-dir)))
-
-  ;; Define mutt/slrn specific key bindings.
-  (define-key (current-local-map) "\C-c\C-b"	 'post-make-region-bold)
-  (define-key (current-local-map) "\C-c\C-u"	 'post-make-region-underlined)
-  (define-key (current-local-map) "\C-c\C-q"	 'post-quote-region)
-  (define-key (current-local-map) "\C-c\C-d\C-q" 'post-unquote-region)
-  (define-key (current-local-map) "\C-c\C-a"	 'post-attach-file)
-  (define-key (current-local-map) "\C-c\C-p"	 'post-set-return-receipt-to)
-
-  ;; Give the buffer a handy name.
-  (if post-rename-buffer
-      (setq post-buf (rename-buffer "*Composing*" t)))
- 
-  ;; If this is a news posting, check the length of the References field.
-  (if (post-references-p)
-      (header-check-references))
-
-  ;; Define the quote signs as comments to make comment-region usable.
-  (make-local-variable 'comment-start)
-  (setq comment-start post-quote-start)
-
-  ;; Run any hooks.
-  (run-hooks 'post-mode-hook)
-
-  ;; Jump past header if so required.
-  (cond (post-jump-header
-         (post-goto-body)))
-
-  (unless (fboundp 'server-process-filter)
-    (message (substitute-command-keys
-     "Type \\[describe-mode] for help composing; \\[post-save-current-buffer-and-exit] when done."))))
-
-(defun post-references-p ()
-  "Is there a References header in this buffer?"
-  (save-excursion
-    (goto-char (point-min))
-    (looking-at "^References: ")))
-
-(defun post-body-says-attach ()
-  "Check if attach appears in the body."
-  (post-goto-body)
-  
-  ;; Aargh it's annoying that how-many returns a string,
-  ;; "13 occurences" instead of a number, 13.
-  (let ((total-attach (string-to-int (how-many post-attachment-regexp))))
-    ;; And this mess is just to catch the unlikely false alarm of
-    ;; "attach" being in the signature, but not in the body.
-    (if (> total-attach 0)
-	(progn (post-goto-signature)
-	       (> total-attach (string-to-int (how-many
-					       post-attachment-regexp)))))))
-
-(defun post-prompt-for-attachment ()
-  "Prompt for an attachment."
-   (if (y-or-n-p "Do you want to attach anything? ")
-       (let ((file (read-file-name "Attach file: " nil nil t nil))
-	     (description (string-read "Description: ")))
-	 (header-attach-file file description))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;
-;;; Post Header Mode
-
-(defvar header-mode nil)
-
-(defun header-mode (&optional arg)
-  "Commands for editing the header of an e-mail or news message.
-
-\\{header-mode-map}
-Optional argument ARG ."
-
-  (interactive "P")
-  (make-local-variable 'header-mode)
-  (setq header-mode
-	(if (null arg)
-	    (not header-mode)
-	  (> (prefix-numeric-value arg) 0)))
-  (setq post-has-attachment nil)
-
-  ;; XEmacs needs easy-menu-add, Emacs does not care
-  (easy-menu-add header-mode-menu)
-
-  (force-mode-line-update))
-
-(defvar header-mode-map (make-sparse-keymap)
-  "Keymap used for editing RFC822 header.")
-
-(defun header-position-on-value ()
-  "Go to the start of the value part of a header."
-  (beginning-of-line)
-  (skip-chars-forward "-A-Za-z0-9:")
-  ;; XXX - Should make sure we stay on line.
-  (forward-char)
-  (point))
-
-(defun header-goto-field (field)
-  "Go to FIELD of a header."
-  (let ((case-fold-search t))
-    (goto-char (point-min))
-    (save-match-data
-      (when (re-search-forward (concat "^\\($\\|" field ": \\)"))
-	(if (looking-at "^$")
-	    (progn
-	      (insert-string field ": \n")
-	      (forward-char -1))
-	  (header-position-on-value))))))
-
-(defmacro define-header-goto (name header)
-  "Define functions called NAME to go to HEADER."
-  `(defun ,name ()
-     ,(concat "Position the cursor on the " header ": header.")
-     (interactive)
-     (header-goto-field ,header)))
-
-(define-header-goto header-goto-to "To")
-(define-header-goto header-goto-cc "Cc")
-(define-header-goto header-goto-fcc "Fcc")
-(define-header-goto header-goto-summary "Summary")
-(define-header-goto header-goto-keywords "Keywords")
-(define-header-goto header-goto-subject "Subject")
-(define-header-goto header-goto-bcc "Bcc")
-(define-header-goto header-goto-reply-to "Reply-To")
-(define-header-goto header-goto-from "From")
-(define-header-goto header-goto-organization "Organization")
-
-(defun header-attach-file (file description)
-  "Attach a FILE to the current message (works with Mutt).
-Argument DESCRIPTION MIME description."
-  (interactive "fAttach file: \nsDescription: ")
-  (when (> (length file) 0)
-    (save-excursion
-      (save-match-data
-	(save-restriction
-	  (widen)
-	  (goto-char (point-min))
-	  (search-forward-regexp "^$")
-	  (insert-string (concat "Attach: " (file-truename file) " "
-				 description "\n"))
-	  (message (concat "Attached '" file "'."))
-	  (setq post-has-attachment t))))))
-
-(or (assq 'header-mode minor-mode-alist)
-    (setq minor-mode-alist
-	  (cons '(header-mode " Header") minor-mode-alist)))
-
-(or (assq 'header-mode minor-mode-map-alist)
-    (setq minor-mode-map-alist
-	  (cons (cons 'header-mode header-mode-map)
-		minor-mode-map-alist)))
-
-(defun header-set-return-receipt-to (address)
-  "Insert a Return-Receipt-To header into an email.
-Argument ADDRESS email address return receipts should be sent to."
-  (interactive (list (post-ask-for-address-with-default "Return-Receipt-To")))
-  (save-excursion
-    (header-set-value "Return-Receipt-To" address)))
-
-(defun post-news-posting-p ()
-  "Does the buffer look like a news posting?"
-  (save-excursion
-    (setf (point) (point-min))
-    (looking-at "^Newsgroups: ")))
-
-(defun header-set-followup-to (to)
-  "Set the Followup-To: header.
-Argument TO Where followups should go."
-  (interactive (list (header-ask-for-value "Followup-To"
-					   (header-ask-for-value
-					    "Newsgroups"))))
-  (cond ((post-news-posting-p)
-	 (save-excursion
-	   (header-set-value "Followup-To" to)))
-	(t
-	 (error
-  "Followup-To is for Usenet.  Maybe you want Reply-To or Mail-Followup-To"))))
-
-(defun header-set-organization (org)
-  "Set the Organization: header.
-Argument ORG Should be SMERSH."
-  (interactive (list (header-ask-for-value "Organization")))
-  (save-excursion
-    (header-set-value "Organization" org)))
-
-(defun header-check-references ()
-  "Place the cursor at the start of the References: if they are too long."
-  (interactive)
-  (cond ((> (header-references-length) 500) ; 500 to be on the safe side.
-         (beep)                              ; Catch my attention.
-         (goto-char (point-min))
-         (search-forward-regexp "^References: " nil t))))
-
-(defun header-references-length (&optional show)
-  "Get (and optionally display) the length of the references header.
-Optional argument SHOW Whether or not to display the length."
-  (interactive)
-  (let* ((header "References")
-         (refs (header-get-value header))
-         (len (+ (length header) (length refs) 2)))
-    (if (or (interactive-p) show)
-        (message "References header is %d characters in length." len))
-    len))
-
-(defun header-delete-reference ()
-  "Delete the first reference in the references header."
-  (interactive)
-  (save-excursion
-    (let ((ref-location (header-goto-field "References")))
-      (cond (ref-location
-             (let ((ref-start (goto-char ref-location)))
-               (cond ((search-forward ">" nil t)
-                      (forward-char 1)
-                      (delete-region ref-start (point))
-                      (header-references-length t)))))))))
-
-;; Noninteractive functions.
-
-(defun header-ask-for-value (header &optional default)
-  "Ask for a HEADER value, defaulting to the current value if one is present.
-Optional argument DEFAULT ."
-  (let ((new-value (post-get-header-value header)))
-    (and (= (length new-value) 0)
-         default
-         (setq new-value default))
-    (read-string (concat header ": ") new-value)))
-
-(defun header-get-value (header)
-  "Get the value of a specific mail HEADER."
-  (save-excursion
-    (let ((value          "")
-          (start-of-value nil))
-      (goto-char (point-min))
-      (cond ((post-find-header-line header)
-             (setq start-of-value (point))
-             (end-of-line)
-             (setq value (buffer-substring-no-properties
-			  start-of-value (point)))))
-      value)))
-
-(defun header-set-value (header value)
-  "Set VALUE of a HEADER (replacing any existing value)."
-  (let ((kill-ring kill-ring))
-    (setf (point) (point-min))
-    (cond ((post-find-header-line header)
-	   (beginning-of-line)
-	   (kill-line)
-	   (insert-string (concat header ": " value)))
-	  (t
-	   (header-append-value header value))))
-  (message "%s set to %s" header value))
-
-(defun header-append-value (header value)
-  "Add a HEADER and set it's VALUE (if header exists, will add multiple headers)."
-  (goto-char (point-min))
-  (search-forward-regexp "^$" nil t)
-  (insert-string (concat header ": " value "\n")))
-
-;;; Setup the mode map for the select-signature buffer.
-(if post-select-signature-mode-map nil
-  (setq post-select-signature-mode-map (make-sparse-keymap))
-  (define-key post-select-signature-mode-map "\C-m"
-    'post-select-signature-select-sig)
-  (define-key post-select-signature-mode-map " "
-    'post-select-signature-select-sig)
-  (define-key post-select-signature-mode-map "q" 'post-select-signature-quit)
-  (define-key post-select-signature-mode-map "\C-g"
-    'post-select-signature-quit))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;
-;;; Key Bindings
-
-(define-key post-mode-map "\C-c\C-c" 'post-save-current-buffer-and-exit)
-(define-key post-mode-map "\C-c\C-d\C-s" 'post-delete-quoted-signatures)
-(define-key post-mode-map "\C-c\C-d\C-c" 'post-delete-old-citations)
-(define-key post-mode-map "\C-c\C-t" 'post-goto-body)
-(define-key post-mode-map "\C-c\C-e" 'post-goto-signature)
-(define-key post-mode-map "\C-c\C-r" 'post-random-signature)
-(define-key post-mode-map "\C-c\C-b" 'post-make-region-bold)
-(define-key post-mode-map "\C-c\C-u" 'post-make-region-underlined)
-(define-key post-mode-map "\C-c\C-q" 'post-quote-region)
-(define-key post-mode-map "\C-c\C-d\C-q" 'post-unquote-region)
-(define-key post-mode-map "\C-c\C-s" 'post-select-signature)
-
-(define-key header-mode-map "\C-c\C-f\C-t" 'header-goto-to)
-(define-key header-mode-map "\C-c\C-f\C-c" 'header-goto-cc)
-(define-key header-mode-map "\C-c\C-f\C-w" 'header-goto-fcc)
-(define-key header-mode-map "\C-c\C-f\C-u" 'header-goto-summary)
-(define-key header-mode-map "\C-c\C-f\C-k" 'header-goto-keywords)
-(define-key header-mode-map "\C-c\C-f\C-s" 'header-goto-subject)
-(define-key header-mode-map "\C-c\C-f\C-b" 'header-goto-bcc)
-(define-key header-mode-map "\C-c\C-f\C-r" 'header-goto-reply-to)
-(define-key header-mode-map "\C-c\C-f\C-f" 'header-goto-from)
-(define-key header-mode-map "\C-c\C-f\C-o" 'header-goto-organization)
-(define-key header-mode-map "\C-c\C-ff"    'header-set-followup-to)
-(define-key header-mode-map "\C-c\C-a"     'header-attach-file)
-(define-key header-mode-map "\C-c\C-fd"    'header-delete-reference)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;
-;;; Menus
-
-(easy-menu-define
- post-mode-menu post-mode-map "Post Message Composition Commands."
- '("Post"
-   ["Delete quoted signatures" post-delete-quoted-signatures t]
-   ["Delete doubly quoted text" post-delete-old-citations t]
-   "----"
-   ["Go to body of message" post-goto-body t]
-   ["Go to signature of message" post-goto-signature t]
-   ["Get new random signature" post-random-signature t]
-   ["Select new signature" post-select-signature t]
-   "----"
-   ["Embolden region" post-make-region-bold t]
-   ["Underline region" post-make-region-underlined t]
-   "----"
-   ["Quote region" post-quote-region t]
-   ["Unquote region" post-unquote-region t]
-   "----"
-   ["Save message and return from Post" post-save-current-buffer-and-exit t]))
-
-(easy-menu-define
- header-mode-menu header-mode-map "Header Editing Commands."
- '("Header"
-   ["Attach File..." header-attach-file t]
-   "----"
-   ["Edit From Header" header-goto-from t]
-   ["Edit Subject Header" header-goto-subject t]
-   ["Edit To Header" header-goto-to t]
-   ["Edit Cc Header" header-goto-cc t]
-   ["Edit Bcc Header" header-goto-bcc t]
-   ["Edit Fcc Header" header-goto-fcc t]
-   ["Edit Reply-To Header" header-goto-reply-to t]
-   ["Edit Summary Header" header-goto-summary t]
-   ["Edit Keywords Header" header-goto-keywords t]
-   ["Edit Organization Header" header-goto-organization t]))
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;
-;;; Finish Installing Post Mode
-
-(when post-insert-to-auto-mode-alist-on-load
-  (unless (assq post-mail-message auto-mode-alist)
-    (setq auto-mode-alist
-	  (cons (cons post-mail-message 'post-mode)
-		auto-mode-alist)))
-  (unless (assq post-news-posting auto-mode-alist)
-    (setq auto-mode-alist
-	  (cons (cons post-news-posting 'post-mode)
-		auto-mode-alist))))
-
-(provide 'post)
-
-;;; post.el ends here