1. xemacs
  2. vm

Commits

fenk  committed 9be6dc5

Synced vm package with VM 8.0.x.

It will get some more changes before releasing 8.0.10.

There are tons of warnings as we do not use the old Makefile anymore.

Also there are much more dependencies to other packages now.

  • Participants
  • Parent commits 925ad9b
  • Branches default

Comments (0)

Files changed (260)

File Makefile

View file
 # the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 # Boston, MA 02111-1307, USA.
 
-VERSION = 7.26
-AUTHOR_VERSION = 7.19
-MAINTAINER = Kyle Jones <kyle_jones@wonderworks.com>
+VERSION = 8.0
+AUTHOR_VERSION = 8.0.10-devo
+MAINTAINER = Robert Widhopf-Fenk <hack@robf.de>
 PACKAGE = vm
 PKG_TYPE = regular
-REQUIRES = mail-lib xemacs-base
+REQUIRES = vm xemacs-base mail-lib gnus pgg ecrypto eterm sh-script net-utils ps-print os-utils bbdb fsf-compat
 CATEGORY = standard
 
 # vm-version.elc needs to be first in this list, because load time
 # code needs the Emacs/XEmacs MULE/no-MULE feature stuff.
-ELCS = vm-version.elc vm-message.elc vm-misc.elc tapestry.elc \
-	vm-delete.elc vm-digest.elc vm-easymenu.elc vm-edit.elc \
-	vm-folder.elc vm-imap.elc vm-license.elc vm-macro.elc \
-	vm-mark.elc vm-menu.elc vm-mime.elc vm-minibuf.elc \
-	vm-motion.elc vm-mouse.elc vm-page.elc vm-pop.elc vm-reply.elc \
-	vm-save.elc vm-search.elc vm-sort.elc vm-startup.elc \
-	vm-summary.elc vm-thread.elc vm-toolbar.elc vm-undo.elc \
-	vm-user.elc vm-vars.elc vm-virtual.elc vm-window.elc \
-	vm-crypto.elc
+DONTCOMPILE = lisp/vm-build.el \
+	lisp/_pkg.el lisp/auto-autoloads.el lisp/custom-load.el
 
-EXTRA_SOURCES = vm.el vm.elc vm-autoload.el vm-autoload.elc Makefile-kj \
-	README.bytecompile
+ELCS = $(patsubst %.el,%.elc,$(filter-out $(DONTCOMPILE),$(wildcard lisp/*.el)))
 
-PRELOADS =-l vm-byteopts.el -l vm-version.el -l vm-message.el \
-	-l vm-macro.el -l vm-vars.el
+EXTRA_SOURCES = NEWS $(DONTCOMPILE)
 
-DOCS_TEXINFO_EXTENSION = t
-STANDARD_DOCS = t
+EXPLICIT_DOCS = $(wildcard info/*.texi)
 
-DATA_FILES = $(shell echo etc/*.x??)
-DATA_DEST = $(PACKAGE)
+DATA_FILES = $(shell echo pixmaps/*.xpm) $(shell echo pixmaps/mime/*.xpm)
+DATA_DEST = pixmaps
 
-EARLY_GENERATED_LISP += vm.el vm-autoload.el
+AUTOLOAD_PATH = lisp
+
+PRELOADS = -l vm-version.el -l vm-message.el \
+	-l vm-macro.el -l vm-vars.el -l vm-misc.el 
 
 include ../../XEmacs.rules
 
-vm.el:
-	@echo "building vm.elc (with all modules set to autoload)..."
-	@echo "(defun vm-its-such-a-cruel-world ()" > vm.el
-	@echo "   (require 'vm-version)" >> vm.el
-	@echo "   (require 'vm-startup)" >> vm.el
-	@echo "   (require 'vm-vars)" >> vm.el
-	@echo "   (require 'vm-autoload))" >> vm.el
-	@echo "(vm-its-such-a-cruel-world)" >> vm.el
-	@echo "(fmakunbound 'vm-its-such-a-cruel-world)" >> vm.el
+lisp/vm-revno.el: .bzr/branch/last-revision
+	./release.sh version-info
 
-vm-autoload.el: $(ELCS:.elc=.el)
-	@echo scanning sources to build autoload definitions...
-	$(BOOT_XEMACS) -l ./make-autoloads -f print-autoloads \
-		$(ELCS:.elc=.el) >> vm-autoload.el
-	@echo "(provide 'vm-autoload)" >> vm-autoload.el

File Makefile-kj

-# All versions of Emacs prior to 19.34 for Emacs and
-# prior to 19.14 for XEmacs are unsupported.
-
-# what emacs is called on your system
-EMACS = emacs
-
-# top of the installation
-prefix = /usr/local
-
-# where the Info file should go
-INFODIR = ${prefix}/lib/emacs/info
-
-# where the vm.elc, tapestry.elc, etc. files should go
-LISPDIR = ${prefix}/lib/emacs/site-lisp
-
-# where the toolbar pixmaps should go.
-# vm-toolbar-pixmap-directory must point to the same place.
-# vm-image-directory must point to the same place.
-PIXMAPDIR = ${prefix}/lib/emacs/etc/vm
-
-# where the binaries should be go.
-BINDIR = ${prefix}/bin
-
-############## no user servicable parts beyond this point ###################
-
-# no csh please
-SHELL = /bin/sh
-
-# byte compiler options
-BYTEOPTS = ./vm-byteopts.el
-
-# have to preload the files that contain macro definitions or the
-# byte compiler will compile everything that references them
-# incorrectly.  also preload a file that sets byte compiler options.
-PRELOADS = -l $(BYTEOPTS) -l ./vm-version.el -l ./vm-message.el -l ./vm-macro.el -l ./vm-vars.el  
-
-# compile with noninteractive and relatively clean environment
-BATCHFLAGS = -batch -q -no-site-file
-
-# files that contain key macro definitions.  almost everything
-# depends on them because the byte-compiler inlines macro
-# expansions.  everything also depends on the byte compiler
-# options file since this might do odd things like turn off
-# certain compiler optimizations.
-CORE = vm-message.el vm-macro.el vm-byteopts.el
-
-# vm-version.elc needs to be first in this list, because load time
-# code needs the Emacs/XEmacs MULE/no-MULE feature stuff.
-OBJECTS = \
-    vm-version.elc \
-    vm-crypto.elc \
-    vm-delete.elc vm-digest.elc vm-easymenu.elc vm-edit.elc vm-folder.elc \
-    vm-imap.elc vm-license.elc vm-macro.elc vm-mark.elc vm-menu.elc \
-    vm-message.elc \
-    vm-mime.elc vm-minibuf.elc vm-misc.elc vm-motion.elc \
-    vm-mouse.elc vm-page.elc vm-pop.elc vm-reply.elc \
-    vm-save.elc \
-    vm-search.elc vm-sort.elc vm-summary.elc vm-startup.elc vm-thread.elc \
-    vm-toolbar.elc vm-undo.elc \
-    vm-user.elc vm-vars.elc vm-virtual.elc vm-window.elc
-
-SOURCES = \
-    vm-version.el \
-    vm-crypto.el \
-    vm-delete.el vm-digest.el vm-easymenu.el vm-edit.el vm-folder.el \
-    vm-imap.el vm-license.el vm-macro.el vm-mark.el vm-menu.el vm-message.el \
-    vm-mime.el vm-minibuf.el vm-misc.el vm-motion.el \
-    vm-mouse.el vm-page.el vm-pop.el vm-reply.el vm-save.el \
-    vm-search.el vm-sort.el vm-startup.el vm-summary.el vm-thread.el \
-    vm-toolbar.el vm-undo.el \
-    vm-user.el vm-vars.el vm-virtual.el vm-window.el
-
-UTILS = qp-decode qp-encode base64-decode base64-encode
-
-vm:	vm.elc
-
-vm.elc:	autoload
-
-noautoload:	$(OBJECTS) tapestry.elc
-	@echo "building vm.elc (with all modules included)..."
-	@cat $(OBJECTS) tapestry.elc > vm.elc
-
-autoload:	vm-autoload.elc $(OBJECTS) tapestry.elc
-	@echo "building vm.elc (with all modules set to autoload)..."
-	@echo "(defun vm-its-such-a-cruel-world ()" > vm.el
-	@echo "   (require 'vm-version)" >> vm.el
-	@echo "   (require 'vm-startup)" >> vm.el
-	@echo "   (require 'vm-vars)" >> vm.el
-	@echo "   (require 'vm-autoload))" >> vm.el
-	@echo "(vm-its-such-a-cruel-world)" >> vm.el
-	@echo "(fmakunbound 'vm-its-such-a-cruel-world)" >> vm.el
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm.el
-
-all:	vm.info vm utils
-
-debug:	$(SOURCES) tapestry.el
-	@echo "building vm.elc (uncompiled, no autoloads)..."
-	@cat $(SOURCES) tapestry.el > vm.elc
-
-utils: $(UTILS)
-
-qp-decode: qp-decode.c
-	$(CC) $(CFLAGS) -o qp-decode qp-decode.c
-
-qp-encode: qp-encode.c
-	$(CC) $(CFLAGS) -o qp-encode qp-encode.c
-
-base64-decode: base64-decode.c
-	$(CC) $(CFLAGS) -o base64-decode base64-decode.c
-
-base64-encode: base64-encode.c
-	$(CC) $(CFLAGS) -o base64-encode base64-encode.c
-
-install: all install-info install-el install-vm install-pixmaps install-utils
-
-install-info: vm.info
-	test -d $(INFODIR) || mkdir -p $(INFODIR)
-	cp vm.info vm.info-* $(INFODIR)
-
-install-vm: vm.elc
-	test -d $(LISPDIR) || mkdir -p $(LISPDIR)
-	cp *.elc $(LISPDIR)
-
-install-el:
-	test -d $(LISPDIR) || mkdir -p $(LISPDIR)
-	cp *.el $(LISPDIR)
-
-install-pixmaps:
-	test -d $(PIXMAPDIR) || mkdir -p $(PIXMAPDIR)
-	cp pixmaps/*.x[pb]m $(PIXMAPDIR)
-
-install-utils: $(UTILS)
-	test -d $(BINDIR) || mkdir -p $(BINDIR)
-	cp $(UTILS) $(BINDIR)
-
-clean:
-	rm -f $(UTILS) vm.info vm.info-* vm-autoload.el vm-autoload.elc $(OBJECTS) tapestry.elc
-
-vm.info:	vm.texinfo
-	@echo "making vm.info..."
-	@$(EMACS) $(BATCHFLAGS) -insert vm.texinfo -l texinfmt -f texinfo-format-buffer -f save-buffer
-
-# We use tr -d because Emacs under Cygwin apparently outputs CRLF
-# under Windows.  We remove the CRs.
-# Solaris 8's tr -d '\r' removes r's so we use '\015' instead.
-# the echo command can also emit CRs.
-vm-autoload.elc:	$(SOURCES)
-	@echo scanning sources to build autoload definitions...
-	@$(EMACS) $(BATCHFLAGS) -l ./make-autoloads -f print-autoloads $(SOURCES) | tr -d '\015' > vm-autoload.el
-	@echo "(provide 'vm-autoload)" | tr -d '\015' >> vm-autoload.el
-	@echo compiling vm-autoload.el...
-	@$(EMACS) $(BATCHFLAGS) -l $(BYTEOPTS) -f batch-byte-compile vm-autoload.el
-
-vm-crypto.elc:	vm-crypto.el $(CORE)
-	@echo compiling vm-crypto.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-crypto.el
-
-vm-delete.elc:	vm-delete.el $(CORE)
-	@echo compiling vm-delete.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-delete.el
-
-vm-digest.elc:	vm-digest.el $(CORE)
-	@echo compiling vm-digest.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-digest.el
-
-vm-edit.elc:	vm-edit.el $(CORE)
-	@echo compiling vm-edit.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-edit.el
-
-vm-folder.elc:	vm-folder.el $(CORE)
-	@echo compiling vm-folder.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-folder.el
-
-vm-imap.elc:	vm-imap.el $(CORE)
-	@echo compiling vm-imap.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-imap.el
-
-vm-license.elc:	vm-license.el $(CORE)
-	@echo compiling vm-license.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-license.el
-
-vm-macro.elc:	vm-macro.el $(CORE)
-	@echo compiling vm-macro.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-macro.el
-
-vm-mark.elc:	vm-mark.el $(CORE)
-	@echo compiling vm-mark.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-mark.el
-
-vm-menu.elc:	vm-menu.el vm-easymenu.el $(CORE)
-	@echo compiling vm-menu.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -l ./vm-easymenu.el -f batch-byte-compile vm-menu.el
-
-vm-message.elc:	vm-message.el $(CORE)
-	@echo compiling vm-message.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-message.el
-
-vm-minibuf.elc:	vm-minibuf.el $(CORE)
-	@echo compiling vm-minibuf.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-minibuf.el
-
-vm-mime.elc:	vm-mime.el $(CORE)
-	@echo compiling vm-mime.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-mime.el
-
-vm-misc.elc:	vm-misc.el $(CORE)
-	@echo compiling vm-misc.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-misc.el
-
-vm-mouse.elc:	vm-mouse.el $(CORE)
-	@echo compiling vm-mouse.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-mouse.el
-
-vm-motion.elc:	vm-motion.el $(CORE)
-	@echo compiling vm-motion.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-motion.el
-
-vm-page.elc:	vm-page.el $(CORE)
-	@echo compiling vm-page.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-page.el
-
-vm-pop.elc:	vm-pop.el $(CORE)
-	@echo compiling vm-pop.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-pop.el
-
-vm-reply.elc:	vm-reply.el $(CORE)
-	@echo compiling vm-reply.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-reply.el
-
-vm-save.elc:	vm-save.el $(CORE)
-	@echo compiling vm-save.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-save.el
-
-vm-search.elc:	vm-search.el $(CORE)
-	@echo compiling vm-search.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-search.el
-
-vm-sort.elc:	vm-sort.el $(CORE)
-	@echo compiling vm-sort.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-sort.el
-
-vm-startup.elc:	vm-startup.el $(CORE)
-	@echo compiling vm-startup.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-startup.el
-
-vm-summary.elc:	vm-summary.el $(CORE)
-	@echo compiling vm-summary.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-summary.el
-
-vm-thread.elc:	vm-thread.el $(CORE)
-	@echo compiling vm-thread.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-thread.el
-
-vm-toolbar.elc:	vm-toolbar.el $(CORE)
-	@echo compiling vm-toolbar.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-toolbar.el
-
-vm-undo.elc:	vm-undo.el $(CORE)
-	@echo compiling vm-undo.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-undo.el
-
-vm-user.elc:	vm-user.el $(CORE)
-	@echo compiling vm-user.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-user.el
-
-vm-vars.elc:	vm-vars.el $(CORE)
-	@echo compiling vm-vars.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-vars.el
-
-vm-version.elc:	vm-version.el $(CORE)
-	@echo compiling vm-version.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-version.el
-
-vm-virtual.elc:	vm-virtual.el $(CORE)
-	@echo compiling vm-virtual.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-virtual.el
-
-vm-window.elc:	vm-window.el $(CORE)
-	@echo compiling vm-window.el...
-	@$(EMACS) $(BATCHFLAGS) $(PRELOADS) -f batch-byte-compile vm-window.el
-
-tapestry.elc:	tapestry.el
-	@echo compiling tapestry.el...
-	@$(EMACS) $(BATCHFLAGS) -l $(BYTEOPTS) -f batch-byte-compile tapestry.el
-
-vm-easymenu.elc:	vm-easymenu.el
-	@echo compiling vm-easymenu.el...
-	@$(EMACS) $(BATCHFLAGS) -l $(BYTEOPTS) -f batch-byte-compile vm-easymenu.el

File NEWS

View file
+VM 8.0.10
+
+  NOTES:
+
+    * This is the first version of VM 8.* to be also released as a XEmacs
+      package.
+
+  IMPROVEMENTS:
+
+    * `vm-message-history.el' now uses a buffer similar to the summary for
+      browsing the history.  The buffer replaces the summary buffer when
+      present.  Duplicate history entries will be removed.  
+
+  BUGFIXES:
+
+    * Rewrote `vm-message-history.el' to also work for XEmacs.
+
+    * Leading lines of a yanked message were accidently taken as headers and
+      got removed if `vm-reply-include-presentation' was t.
+
+    * Fixed encoding of headers for trailing 8 bit characters.  (Thanks to
+      Lutz Euler for the patch)
+
+    * Decode (QP-)encoded clear text before decrypting it.
+
+VM 8.0.9
+
+  BUGFIXES:
+
+    * Added documentation to `vm-mime-external-content-types-alist' that no
+      extra single quotes should be used around %f as the file name is already
+      quoted for the shell. (Thanks to Martin Schwenke)
+
+    * Fixed version number generation in release script.  It was broken for
+      8.0.8, i.e. it was showing 8.0.x-xemacs-542 instead.  Now also other
+      branch related information is stored in the file vm-revno.el.
+
+VM 8.0.8
+
+  IMPROVEMENTS:
+
+    * Reactivated "Allow defadvice on function `vm' by recursing on session
+      start".  It should work correctly now.
+
+    * Added interactive `vm-pipe-message-to-command-discard-output' and
+      the non-interactive `vm-pipe-message-to-command-to-string' for using
+      it in own functions.
+
+    * Added `vm-pipe-messages-to-command*' for bulk piping messages to a
+      single command, i.e. like saving to a pipe.  This is substantially
+      faster than `vm-pipe-message-to-command*' which call the command on 
+      each message separately.  You may want to use it to feed spamassasin.
+
+    * Modified key bindings for piping messages, i.e. "|" is a prefix key
+      now. Type it twice to get the old pipe command, "|d" will call the 
+      discard the output, just display some infos in the mode line. "|s" 
+      will call `vm-pipe-messages-to-command' and "|n" will also call it 
+      but discard the output.
+
+    * Removed vm-easymenu.el and use easymenu.el instead.
+
+    * In `vm-save-message-preview', ask the user if the output file already
+      exists instead of silently overwriting it.
+
+  BUGFIXES:
+
+    * Moved [Undo] to Dispose menu and [Emacs] to Help menu as these do not
+      work in Emacs 22 anymore when on the menu bar.
+
+    * Fixed intermixing of signature and quoted text in reply if
+      `vm-reply-include-presentation' is t. (Thanks to Roland Winkler for
+      debugging and reporting)
+
+    * Fixed yanking of presentation from wrong folder when folder is virtual.
+      (Thanks to Roland Winkler for reporting)
+
+    * Redistributed flag not displayed in presentation buffer mode line. 
+      https://bugzilla.redhat.com/show_bug.cgi?id=428248 (Thanks to Jonathan
+      Underwood for the fix)
+
+    * `vm-submit-bug-report' gets the variables dynamically now and thus does
+      not miss new ones or references old ones anymore. 
+
+    * Correctly determine the real folder when postponing compositions started
+      from a virtual folder. (Thanks to Uday S. Reddy for reporting and 
+      debugging)
+
+    * Avoid crash when `vm-mouse-set-mouse-track-highlight' is not called
+      within a summary buffer or without a valid message pointer.
+
+    * Do not disable modes which do not exist. (Thanks to Uday S. Reddy for
+      reporting) 
+
+VM 8.0.7
+
+  BUGFIXES:
+
+    * Disable only those minor modes listed in the variable
+      `vm-disable-modes-before-encoding' before encoding a
+      composition. (Thanks to Alley for reporting and debugging)
+
+    * Removed recursion from function `vm' added by 8.0.6, as it 
+      causes startup troubles.
+
+    * Removed extra newline before attachment buttons. (Thanks to Alley for
+      reporting)
+
+    * Removed wrongly used calls to `interactive-p'. (Thanks to Alley for
+      reporting and debugging)
+
+VM 8.0.6
+
+  IMPROVEMENTS:
+
+    * Rewrote INSTALL to be more consistent and more understandable.
+
+    * Allow defadvice on function `vm' by recursing on session start. (Thanks
+      to Blueman for the code)
+
+  BUGFIXES:
+
+    * Ignore empty reply-to in `vm-ignored-reply-to'.
+
+    * Quoted the variable `vm-summary-format' in a doc string.
+
+    * Fixed typos in the docstring of `vm-mail-send-and-exit'.
+
+    * Disable all minor modes before encoding a composition.  This results in
+      faster encoding when font-lock was enabled and avoids problems when
+      parts of a MIME object button get expanded due to an abbrev and thus the
+      extent/overlay gets split into two separate parts causing an encoding
+      error.
+
+    * Avoid duplicate mime buttons during decoding. (Thanks to Alley for
+      reporting)
+
+    * Mask 8 bit chars by 0xff in `vm-mime-qp-encode-region' to avoid crash
+      for those with all higher order bits set (negative ones?) (Thanks to
+      Blueman for the fix.)
+
+VM 8.0.5
+
+  BUGFIXES:
+
+    * Fixed bug caused by fixing `vm-drop-buffer-name-chars' in 8.0.4.  There
+      is a 20-40% chance to create a new bug when fixing one.  Regression
+      tests would be nice, but we do not have any for VM ;-/
+
+VM 8.0.4
+
+  IMPROVEMENTS:
+
+    * Require cl.el at compile-time only. (Thanks to John J. Foerch)
+
+    * Quiet compiler warning about old style backquotes. (Thanks to John
+      J. Foerch)
+
+  BUGFIXES:
+
+    * Correctly call custom-add-load. (Thanks to John J. Foerch and
+      Jonathan.underwood) 
+
+    * Fixed building of vm-cus-load.el for Emacs 21.
+
+    * Use the old default for `vm-primary-inbox', i.e. "~/INBOX".
+
+    * Honor a t in `vm-drop-buffer-name-chars' as documented.
+
+VM 8.0.3
+
+  IMPROVEMENTS:
+
+    * Unified `vm-continue-what-message', i.e. first check for composition
+      buffers, if none exist then for saved drafts.  Also added new variable
+      `vm-zero-drafts-start-compose'.
+
+  BUGFIXES:
+
+    * Fixed building of autoloads for GNU Emacs.
+
+    * Docfixes for vm-pine.el (Thanks to Stephen Eglen).
+
+    * Resurrected `vm-add-reply-subject-prefix' which was lost by the commit
+      of revno 91.
+
+    * Search for BZR only if bzrdir exists and use locate-file only when
+      defined.
+
+    * Use  vm-mime-8bit-composition-charset as a fallback also for MULE Emacs.
+
+    * Fixed defcustom of vm-keep-crash-boxes and vm-spool-files.
+
+    * Fixed the section headers of the NEWS file.
+
+VM 8.0.2
+
+  IMPROVEMENTS:
+
+    * Added --with-pixmapdir to configure the location of the pixmaps.
+
+    * DESTDIR-Patch (Ulrich Mueller).
+
+  BUGFIXES:
+
+    * Avoid overflow of `buffer-undo-list' when inserting or encoding
+      big attachments.
+
+    * defcustom of `vm-mime-all-attachments-directory' should list nil.
+
+    * Honor pre VM 8.0.0 values of `vm-folder-directory' and
+      `vm-primary-inbox'. This should eliminate problems with users which
+      never changed the defaults. 
+
+    * Use "cygwin-mount" to fix paths when available.
+
+    * Activate summary faces only when requested by vm-enable-addons.
+
+    * Fixed defcustom of `vm-enable-addons' and added documentation.
+
+    * "make install" creates $(bindir) now.
+
+    * Separate paths (e.g. otherdirs) only by semicolons to avoid problems on
+      Win32.
+
+    * Handle paths with spaces correctly.
+
+    * Install also pixmaps for GTK enabled Emacs.
+
+    * Just use the first subject when replying/forwarding to a set of
+      messages.  This avoids long filenames for saved composition buffers.
+    
+    * Ensure we are compiling with an emacs version >= 21.
+
+    * Encode headers regexp and case-fold-search corrected. (Ulrich Mueller)
+
+    * vm-summary-faces-mode does not leak extents anymore.
+
+VM 8.0.1
+
+  NOTES:
+
+    In order to get more features from vm-rfaddons set the variable
+    `vm-enable-addons' in your ~/.vm.
+
+  BUGFIXES:
+
+    * A saner default for vm-shrunken-header-face.
+
+    * Added documentation on vm-shrunken-headers-face and
+      vm-shrunken-headers-keymap.
+
+    * Added a new custom group `vm-faces' for faces.
+
+    * Added autoload token for vm-user-agent.
+
+    * Use INSTALL_PROGRAM instead of INSTALL_DATA for programs.
+
+    * Do not set vm-folder-directory if there is ~/INBOX.  If VM does not get
+      mail after upgrading from 7.19 it is probably due to the new default for
+      vm-folder-directory, which was nil before.
+
+    * Revised the bindings and enabled features to a hopefully less
+      controversial setting. 
+
+VM 8.0.0
+
+  NOTES:
+
+    VM is now in my hands and I will do my best to keep it alive!
+
+    ,--------------------------------------------------------------------------
+    | From: Kyle Jones <kyle_jones@wonderworks.com>
+    | To: Robert Widhopf-Fenk <hack@robf.de>
+    | Date: Wed, 21 Feb 2007 13:11:32 -0800
+    | Subject: Handing over VM?
+    | 
+    | Robert Widhopf-Fenk writes:
+    |  > Hi Kyle,
+    |  > 
+    |  > I have been maintaining VM "unofficially" for the last few
+    |  > years and now I want to become the official maintainer of
+    |  > VM.
+    |  > 
+    |  > Do I get your OK?
+    | 
+    | Yes.  Obviously I've moved on, though I've been slow to admit it
+    | to myself.  Good luck.
+    `--------------------------------------------------------------------------
+	   
+    * My (robf) VM extensions are now activated by default, where it makes
+      sense to me.
+
+    * Releases are numbered now MAJOR.MINOR.PATCHLEVEL, where MAJOR is
+      increased when fundamental changes occur, MINOR for new features and
+      PATCHLEVEL for bugfix releases.
+
+    * New cleaner source tree layout.
+
+    * Better built system based on configure.  Autoloads are generated only
+      for those functions marked with the autoload token now, which are mainly
+      interactive function. Thus, loading occurs only on demand and startup
+      should be faster.
+      
+  BUGFIXES:
+
+    * All bugs reported to gnu.emacs.vm.bugs, gnu.emacs.vm.info and directly
+      to me are fixed either by the patches posted by others or me.
+
+    * If there are any missing autoloads, please report them and add a
+      (require 'vm-SOURCE) to your ~/.vm!
+
+    * Probably added numerous new bugs.
+
+
+  IMPROVEMENTS: compared to 7.19 (not vmrf)
+
+    * A new icon set based on vm-small-pixmaps.tgz which was floating around.
+      This one should fit by height to the one used in XEmacs and Emacs 22,
+      but it is slightly larger than those used in Emacs 21.  If you see the
+      old icons, the please set the variables `vm-image-directory' and
+      `vm-toolbar-pixmap-directory' to nil in your ~/.vm!
+
+    * vm-mime-type-converter-alist now also works when replying to messages,
+      i.e. for text/html one can use lynx or w3m for the conversion.
+      (setq vm-mime-type-converter-alist
+	'(("text/html" "text/plain" "lynx -force_html -dump /dev/stdin")))
+
+    * Postponing (draft handling) of compositions and continuing of drafts, in
+      fact any messages also those from other people. (Info node: Sending
+      Messages) 
+
+    * New mail header insertion functions for return-receipts, mail-priority
+      and FCC.
+
+    * More virtual folder selectors and replacements of other functions based
+      on selectors. (Info node: Virtual Folders)
+
+    * vm-serial.el provides message templates for composition and
+      personalizes mass emails. (Info node: TODO)
+    
+    * vm-biff.el for popups with a list of new messages.
+
+    * vm-rfaddons.el has various stuff, look at the source if you are curious
+      or miss some VM feature, as it might already be there!
+
+;;; Local Variables: ***
+;;; mode:text ***
+;;; End: ***

File README

View file
-How to setup VM:
+VM was written by Kyle Jones! Hail Kyle! The last release from Kyle was 7.19.
 
-0) Look at the Makefile and review the values of EMACS, INFODIR,
-   LISPDIR, BINDIR and PIXMAPDIR.  If they are not right for your
-   system, change them.
+VM's home page up to version 7.19 on the World Wide Web is at
+http://www.wonderworks.com/vm and the FAQ is still hosted there.
 
-1) Your build options:
-     `make' to build a usable VM.
-     `make vm.info' to build the Info online help document.
-     'make utils' to compile the external Quoted-Printable and
-         BASE64 encoders and decoders.
-     `make all' to make everything.
-   If there are byte compiler warnings, ignore them.  They
-   probably can't be avoided with code that is run on multipe
-   Emacs versions.
+This VM is based on my (Robert Widhopf-Fenk) patches against VM 7.19.
 
-2) Put all the .elc files into a Lisp directory that is in your
-   Emacs load-path.  If you've already set LISPDIR to this
-   directory, just `make install'.
+The persons who have contributed to this version of VM are:
 
-3) If you're using XEmacs or Emacs 21 and you want toolbar
-   support, make a directory called `vm' in the XEmacs `etc'
-   directory.  Copy the files in pixmaps directory into the
-   directory you just created.  VM will look for the pixmaps
-   there by default.
+ * Aidan Kehoe
+ * Glenn ???
+ * Jens Gustedt
+ * John J Foerch
+ * Kevin Rogers
+ * Kyle Jones
+ * Rob Hodges
+ * Robert Marshall
+ * Robert P. Goldman
+ * Robert Widhopf-Fenk
 
-   Alternately you can put the pixmap files in any directory you
-   want or just leave them where they are.  Be sure to point the
-   variables vm-toolbar-pixmap-directory and vm-image-directory at
-   the direrctory where you put the files.  That is
+Please mail me a note, if I have forgotten someone or accidently put you on
+the list. 
 
-      (setq vm-toolbar-pixmap-directory "/path/to/pixmaps")
-      (setq vm-image-directory "/path/to/pixmaps")
+Read INSTALL and follow the instructions to compile and setup VM.
 
-   in your .emacs or .vm file.  If you've set PIXMAPDIR, 'make
-   install' will copy the files to that directory.
+*******************************************************************************
+BUGS
 
-4) If you built the Info document, copy the file vm.info* files
-   into the Emacs' info.  ('make install' will do this for you if
-   you've set INFODIR). You may need to edit the "dir" file in
-   that directory and add a menu entry for VM.  It should look
-   like this:
+If you have any problems or meet a bug it is best to discuss them on the USENET
+groups gnu.emacs.vm.bugs or gnu.emacs.vm.info!  Also search the groups before
+posting as there might have been some discussion and a fix before.
 
-* VM:: (vm)		A mail reader.
+Report any problems or bugs otherwise they cannot be fixed!
 
-5) Put these lines in your .emacs file if they aren't there
-   already:
+Please provide the version number of VM and Emacs and how to reproduce the
+problem.
 
-   (autoload 'vm "vm" "Start VM on your primary inbox." t)
-   (autoload 'vm-other-frame "vm" "Like `vm' but starts in another frame." t)
-   (autoload 'vm-visit-folder "vm" "Start VM on an arbitrary folder." t)
-   (autoload 'vm-visit-virtual-folder "vm" "Visit a VM virtual folder." t)
-   (autoload 'vm-mode "vm" "Run VM major mode on a buffer" t)
-   (autoload 'vm-mail "vm" "Send a mail message using VM." t)
-   (autoload 'vm-submit-bug-report "vm" "Send a bug report about VM." t)
+Personally I am an follower of the XEmacs church and thus some things may not
+work with GNU Emacs, nevertheless I test VM also on GNU Emacs from time to
+time and I am happy to merge you fixes.
 
-You're now ready to use VM.  C-h i should start up the Emacs Info
-system and if you've installed the Info document properly you can
-use the online documentation to teach yourself how to use VM.
+*******************************************************************************
+Homepage
 
-Please use M-x vm-submit-bug-report to report bugs.  The bug report
-will be sent to bug-vm@uunet.uu.net and be gatewayed from there to
-gnu.emacs.vm.bug.
+The new homepage of VM is at http://www.nongnu.org/viewmail/ hosted by
+Savannah.  There is a bugtracker and other stuff, but I prefer the news
+groups!
 
-VM's home page on the World Wide Web is at http://www.wonderworks.com/vm .
-You can get the latest version of VM from there.
+*******************************************************************************
+Wiki
+
+The Wiki at http://www.emacswiki.org/cgi-bin/wiki?id=CategoryViewMail is
+best suited to conserve code snippets, cooking guides or feature requests.
+
+*******************************************************************************
+BZR (http://bazaar-vcs.org/)
+
+I maintain my changes with BZR now, since CVS and SVN suck and TLA/BAZ do as well.
+
+If you want to send me changes or start hacking on your own you may want to 
+branch from my repository at http://www.robf.de/Hacking/bazaar/vm-repo.
+
+# create your own branch from the trunk
+bzr get http://www.robf.de/Hacking/bazaar/vm-repo/vm-trunk
+# get updates
+bzr pull
+# start hacking 
+xemacs vm-pgg.el
+# commit your changes 
+bzr commit
+# Generate a bundle of your changes for merging
+bzr bundle-revisions --output=xy-changes.diff
+# Attach the bundle to a mail (rather than doing cut&paste) and send
+# it to hack@robf.de with a descriptive subject.  
+
+*******************************************************************************
+COMMENTS
+
+The documentation of my changes is incomplete and the changes may even cause
+new problems or bugs.  
+
+This VM provides the following hacks & enhancements and other stuff not
+listed here, as I am quite lazy in writing docs. ;c) 
+
+Additional extensions for VM written by myself:
+- vm-pine.el	      for draft handling and other Pine inspired functions.
+- vm-ps-print.el      for nice ps-printing functions
+- vm-rfaddons.el      adds various add-ons to VM
+- vm-grepmail	      a grepmail interface for VM
+- vm-avirtual.el      brings additional virtual folder selectors and functions
+		      for spam tagging
+- vm-biff.el	      is a xbiff within VM, notifying you of new mail
+- vm-serial.el	      templates for mails, personalized serial mails 
+- vm-summary-faces.el face base on virtual selectors 
+
+Additional extensions for VM from other people:
+- vm-pcrisis.el	      by Rob Hodges for people with personal crisis which need
+		      to rewrite headers automatically. 
+- vcard.el            by Noah Friedman <friedman@splode.com> for
+  vm-vcard.el	      displaying vcards within VM.
+
+Changes of the VM core (incomplete):
+- make-autoloads: enhanced output & ignore links
+- vm-mime.el:
+	* vm-pine patch for attachment handling of continued message drafts
+	* mime button displaying file name of attachment
+	* write mime filter
+	* qp-decoding of disposition parameters like filename etc.
+- vm-mouse.el: handling of email-addresses like "mailto:" URLs
+- vm-page.el: vm-energize-urls is interactive now, this allows you to easily
+	      check URLs in a message you are currently composing.
+- vm-reply.el:
+	* Proper setting of subject & references when replying to multiple
+	  messages.
+	* Filtering of MIME types when yanking a message.  Now only those
+	  types listed in `vm-included-mime-types-list' are yanked and you
+	  will have no attachment mess any more!
+- vm-startup.el: vm-mail takes now a subject argument
+- vm-vars.el: two new variables for customization (see vm-reply)
+	* vm-included-mime-types-list

File README.bytecompile

-Kyle sez:
-
-    Rebuild VM with make, always, or there will be trouble.  The
-    compiler has to know about every macro used in a Lisp source
-    file so that they can be expanded.  If the bytecode interpreter
-    encounters a macro at runtime, it will testily bark the exception
-
-    Invalid function: (macro . #<compiled-function (pos &optional buffer) "...(9)" [set-marker (make-marker) pos buffer] 4>)
-
-So, if you must edit and rebuild VM from the installed package, edit
-Makefile-kj and use `make -f Makefile-kj ...'.

File etc/audio_stamp-colorful.xpm

Removed
Old image

File etc/audio_stamp-simple.xpm

Removed
Old image

File etc/autofile-dn.xbm

Removed
Old image

File etc/autofile-dn.xpm

Removed
Old image

File etc/autofile-up.xbm

Removed
Old image

File etc/autofile-up.xpm

Removed
Old image

File etc/autofile-xx.xbm

Removed
Old image

File etc/compose-dn.xbm

Removed
Old image

File etc/compose-dn.xpm

Removed
Old image

File etc/compose-up.xbm

Removed
Old image

File etc/compose-up.xpm

Removed
Old image

File etc/compose-xx.xbm

Removed
Old image

File etc/delete-dn.xbm

Removed
Old image

File etc/delete-dn.xpm

Removed
Old image

File etc/delete-up.xbm

Removed
Old image

File etc/delete-up.xpm

Removed
Old image

File etc/delete-xx.xbm

Removed
Old image

File etc/document-colorful.xpm

Removed
Old image

File etc/document-simple.xpm

Removed
Old image

File etc/file-dn.xbm

Removed
Old image

File etc/file-dn.xpm

Removed
Old image

File etc/file-up.xbm

Removed
Old image

File etc/file-up.xpm

Removed
Old image

File etc/file-xx.xbm

Removed
Old image

File etc/film-colorful.xpm

Removed
Old image

File etc/film-simple.xpm

Removed
Old image

File etc/gear-colorful.xpm

Removed
Old image

File etc/gear-simple.xpm

Removed
Old image

File etc/getmail-dn.xbm

Removed
Old image

File etc/getmail-dn.xpm

Removed
Old image

File etc/getmail-up.xbm

Removed
Old image

File etc/getmail-up.xpm

Removed
Old image

File etc/getmail-xx.xbm

Removed
Old image

File etc/help-dn.xbm

Removed
Old image

File etc/help-dn.xpm

Removed
Old image

File etc/help-up.xbm

Removed
Old image

File etc/help-up.xpm

Removed
Old image

File etc/help-xx.xbm

Removed
Old image

File etc/message-colorful.xpm

Removed
Old image

File etc/message-simple.xpm

Removed
Old image

File etc/mime-colorful-dn.xpm

Removed
Old image

File etc/mime-colorful-up.xpm

Removed
Old image

File etc/mime-colorful-xx.xpm

Removed
Old image

File etc/mime-dn.xbm

Removed
Old image

File etc/mime-simple-dn.xpm

Removed
Old image

File etc/mime-simple-up.xpm

Removed
Old image

File etc/mime-simple-xx.xpm

Removed
Old image

File etc/mime-up.xbm

Removed
Old image

File etc/mime-xx.xbm

Removed
Old image

File etc/mona_stamp-colorful.xpm

Removed
Old image

File etc/mona_stamp-simple.xpm

Removed
Old image

File etc/next-dn.xbm

Removed
Old image

File etc/next-dn.xpm

Removed
Old image

File etc/next-up.xbm

Removed
Old image

File etc/next-up.xpm

Removed
Old image

File etc/next-xx.xbm

Removed
Old image

File etc/previous-dn.xbm

Removed
Old image

File etc/previous-dn.xpm

Removed
Old image

File etc/previous-up.xbm

Removed
Old image

File etc/previous-up.xpm

Removed
Old image

File etc/previous-xx.xbm

Removed
Old image

File etc/print-dn.xbm

Removed
Old image

File etc/print-dn.xpm

Removed
Old image

File etc/print-up.xbm

Removed
Old image

File etc/print-up.xpm

Removed
Old image

File etc/print-xx.xbm

Removed
Old image

File etc/quit-dn.xbm

Removed
Old image

File etc/quit-dn.xpm

Removed
Old image

File etc/quit-up.xbm

Removed
Old image

File etc/quit-up.xpm

Removed
Old image

File etc/quit-xx.xbm

Removed
Old image

File etc/recover-dn.xbm

Removed
Old image

File etc/recover-dn.xpm

Removed
Old image

File etc/recover-up.xbm

Removed
Old image

File etc/recover-up.xpm

Removed
Old image

File etc/recover-xx.xbm

Removed
Old image

File etc/reply-dn.xbm

Removed
Old image

File etc/reply-dn.xpm

Removed
Old image

File etc/reply-up.xbm

Removed
Old image

File etc/reply-up.xpm

Removed
Old image

File etc/reply-xx.xbm

Removed
Old image

File etc/stuffed_box-colorful.xpm

Removed
Old image

File etc/stuffed_box-simple.xpm

Removed
Old image

File etc/undelete-dn.xbm

Removed
Old image

File etc/undelete-dn.xpm

Removed
Old image

File etc/undelete-up.xbm

Removed
Old image

File etc/undelete-up.xpm

Removed
Old image

File etc/undelete-xx.xbm

Removed
Old image

File etc/visit-dn.xbm

Removed
Old image

File etc/visit-dn.xpm

Removed
Old image

File etc/visit-up.xbm

Removed
Old image

File etc/visit-up.xpm

Removed
Old image

File etc/visit-xx.xbm

Removed
Old image

File example.vm

View file
+;;; .vm --- Example ~/.vm
+;;;
+;;; -*- emacs-lisp -*-
+;;;
+;;; Copyright (C) 2007 Robert Widhopf-Fenk
+;;;
+;;; This program is free software; you can redistribute it and/or modify
+;;; it under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 1, or (at your option)
+;;; any later version.
+;;;
+;;; This program is distributed in the hope that it will be useful,
+;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with this program; if not, write to the Free Software
+;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+;;;
+
+;;; You may use this file as a starting point for setting up and customizing
+;;; VM to your own needs.
+
+;;*****************************************************************************
+;; Make VM your default mail agent in Emacs
+(setq mail-user-agent 'vm-user-agent)
+
+;;*****************************************************************************
+;; Folders and spool files, this is where your mail comes from.
+
+;; vm-spool-files is a list of lists, each sublist should be of the form
+;;   (INBOX SPOOLNAME CRASHBOX)
+
+(setq vm-spool-files
+      (list
+       ;; You can drop mail to the same inbox from different spool files.
+       (list vm-primary-inbox "/var/spool/mail/username1" vm-crash-box)
+       (list vm-primary-inbox "/var/spool/mail/username2" vm-crash-box)
+       ;; Another spool file
+       (list "spam" (expand-file-name "~spam/drop")
+             (concat vm-folder-directory "spam.crash"))
+       ;; POP
+       (list "gmail.pop" "pop:pop.google.com:110:pass:YourEmailAddress:*"
+             (concat vm-folder-directory "gmail.pop.crash"))
+       ;; POP-SSL 
+       (list "gmail.pop" "pop-ssl:pop.google.com:995:pass:YourEmailAddress:*"
+             (concat vm-folder-directory "gmail.pop.crash"))
+       ;; IMAP
+       (list "gmail.imap" "imap:imap.google.com:143:inbox:login:YourEmailAddress:*"
+             (concat vm-folder-directory "gmail.imap.crash"))
+       ))
+       
+;;*****************************************************************************
+;; Summary 
+
+;; See the recipients for emails you sent instead of yourself.
+(setq vm-summary-uninteresting-senders 
+      (regexp-opt '("@robf.de" "Robert Widhopf-Fenk")))
+
+;; Change the summary format by setting `vm-summary-format'.
+;; Run "M-x vm-fix-my-summary!!! RET" to fix existing summaries.
+
+;;*****************************************************************************
+;; Viewing messages
+;;
+;; HTML messages can be converted to text or the w3 resp. w3m Emacs viewers
+;; can be used for displaying. 
+
+(setq  vm-mime-type-converter-alist
+      '(("text/html" "text/plain" "lynx -force_html -dump /dev/stdin")
+        ("message/delivery-status"  "text/plain")
+        ("application/zip"  "text/plain" "listzip")
+        ("application/x-zip-compressed"  "text/plain" "zipinfo /dev/stdin")
+        ("application/x-www-form-urlencoded"  "text/plain")
+        ("message/disposition-notification"  "text/plain")
+        ("application/mac-binhex40" "application/octet-stream" "hexbin -s"))
+
+      
+;; Set up w3m (you should check if it exists)
+(require 'vm-w3m)
+(setq vm-included-mime-types-list
+      '("text/plain" "text/html" "text/enriched" "message/rfc822"))
+
+;;*****************************************************************************
+;; Composing email
+
+(setq mail-default-headers "From: Robert Widhopf-Fenk <hack@robf.de>\n")
+
+(vmpc-my-identities "me@company1.nil" "me@home.nil" "me@alterego.nil")
+(require 'vm-pcrisis)
+
+;;*****************************************************************************
+;; A hook function to setup mail-composing buffers
+(defun robf-vm-mail-mode-hook ()
+  "Robert Widhopf-Fenks `vm-mail-mode-hook'."
+  (interactive)
+
+  (when (string-match "received" (buffer-name))
+    (make-local-variable 'vm-confirm-quit)
+    (setq vm-confirm-quit t))
+  
+  (setq fill-column 60
+        comment-start "> "
+        indent-line-function 'indent-relative-maybe)
+  
+  ;; mark lines longer than `fill-column' chars red 
+  (add-to-list 'mail-font-lock-keywords
+               (list (concat "^" (make-string fill-column ?.)
+                             "\\(.+$\\)")
+                     '(1 font-lock-warning-face t)))
+  
+  (ispell-change-dictionary "deutsch8")
+
+  (font-lock-mode 1)
+  (turn-on-auto-fill)
+  (turn-on-filladapt-mode)
+  (flyspell-mode 1)
+;  (enriched-mode 1)
+;  (auto-capitalize-mode)
+;  (vm-mail-subject-prefix-cleanup)
+  )
+
+(add-hook 'vm-mail-mode-hook 'robf-vm-mail-mode-hook)
+
+;; Do you like boxquotes? 
+(require 'boxquote)
+
+(defun boxquote-region-and-edit-title (s e)
+  (interactive "r")
+  (boxquote-region s e)
+  (call-interactively 'boxquote-title))
+
+;;*****************************************************************************
+;; Sending email via SMTP.
+;;
+;; This is not done by VM, by by separate packages.  The standard package is
+;; smtpmail.el and it should come with your Emacs. If you have more than one
+;; email address and have to send them using different SMTP servers, the you
+;; might want to take a look at esmtpmail.el a fork from smtpmail.el targeted
+;; to deal with personal crisis support.
+(require 'esmtpmail)
+(setq send-mail-function 'esmtpmail-send-it
+      esmtpmail-default-smtp-server "smtp.someprovider.com"
+      ;; trace buffers help debugging problems 
+      esmtpmail-debug-info t)
+
+;; Select the SMTP server based on the From: header, i.e. the email address of
+;; the author.  There are also other authentication  methods, see the docs.
+(setq esmtpmail-send-it-by-alist 
+      (list
+       '("YourEmaiAddress1" "SMTPSERVER1"
+         (vm-pop-login "pop:SMTPSERVER1:110:pass:YourEmailAddress:*"))
+       '("YourEmaiAddress2" "SMTPSERVER2"
+         (vm-after-pop "pop:SMTPSERVER2:110:pass:YourEmailAddress:*"))))
+
+;;*****************************************************************************
+;; Feed mail to a local queue if you are offline
+(require 'feedmail)
+
+(setq send-mail-function 'vm-mail-send-or-feed-it
+      feedmail-enable-queue t
+      feedmail-ask-before-queue nil
+      feedmail-buffer-eating-function 'feedmail-buffer-to-smtpmail
+      feedmail-queue-directory (expand-file-name "~/Mail/QUEUE"))
+
+(define-key vm-mode-map "Qr"     'feedmail-run-the-queue)
+(define-key vm-mode-map "Qc"     'vm-smtp-server-online-p)
+(define-key vm-mode-map "Qw"     'feedmail-queue-reminder-medium)
+
+(setq auto-mode-alist (cons '("\\.fqm$" . mail-mode) auto-mode-alist))
+
+;; Check the queue on startup 
+(when (and (> (car (feedmail-look-at-queue-directory
+                    feedmail-queue-directory)) 0))
+  (feedmail-queue-reminder-medium)
+  (sit-for 2)
+  (if (y-or-n-p "Send messages now? ")
+      (feedmail-run-the-queue)))
+
+;;*****************************************************************************
+;; BBDB - the address book for Emacs
+(require 'bbdb)
+(require 'bbdb-autoloads)
+(bbdb-initialize 'vm 'sendmail)
+(bbdb-insinuate-vm)
+
+;; create records for people you reply to
+(add-hook 'vm-reply-hook 'bbdb-force-record-create)
+
+;;*****************************************************************************
+;; Now change some keyboard bindings 
+(define-key vm-mode-map [(meta up)]    'vm-previous-unread-message)
+(define-key vm-mode-map [(meta down)]  'vm-next-unread-message)
+(define-key vm-mode-map "\C- "  'vm-scroll-backward)
+(define-key vm-mode-map " "     'vm-scroll-forward)
+(define-key vm-mode-map "c"     'vm-continue-what-message-other-frame)
+(define-key vm-mode-map "C"     'vm-continue-postponed-message)
+(define-key vm-mode-map "R"     'vm-reply-other-frame)
+(define-key vm-mode-map "r"     'vm-reply-include-text-other-frame)
+(define-key vm-mode-map "\C-R"  'vm-followup-other-frame)
+(define-key vm-mode-map "\C-r"  'vm-followup-include-text-other-frame)
+(define-key vm-mode-map "f"     'vm-forward-message-other-frame)
+(define-key vm-mode-map "m"     'vm-toggle-mark)
+(define-key vm-mode-map "d"     'vm-delete-message-action)
+(define-key vm-mode-map "s"     'vm-virtual-save-message)
+(define-key vm-mode-map "w"     'vm-save-message-preview)
+(define-key vm-mode-map "lr"    'vm-delete-message-labels)
+(define-key vm-mode-map "li"    'rf-vm-label-toggle-important)
+(define-key vm-mode-map "ls"    'rf-vm-label-toggle-spam)
+(define-key vm-mode-map "W"     'vm-save-message-sans-headers)
+(define-key vm-mode-map "W"     (make-sparse-keymap))
+(define-key vm-mode-map "WW"    'vm-apply-window-configuration)
+(define-key vm-mode-map "WS"    'vm-save-window-configuration)
+(define-key vm-mode-map "WD"    'vm-delete-window-configuration)
+(define-key vm-mode-map "W?"    'vm-window-help)
+(define-key vm-mode-map "x"     'vm-expunge-folder)
+(define-key vm-mode-map "X"     'vm-expunge-pop-messages)
+(define-key vm-mode-map "#"     nil)
+(define-key vm-mode-map "/"      'bbdb)
+(define-key vm-mode-map [(control return)] 'vm-edit-init-file)
+(define-key vm-mode-map "S"     'vm-save-everything)
+(define-key vm-mode-map "\C-a"  'vm-mime-auto-save-all-attachments)
+(define-key vm-mode-map "VO"    'vm-virtual-omit-message)
+(define-key vm-mode-map "VU"    'vm-virtual-update-folders)
+(define-key vm-mode-map [(control s)] 'isearch-forward)
+(define-key vm-mode-map "o"     'vm-switch-to-folder)
+
+(define-key vm-summary-mode-map [(control up)] 'previous-line)
+(define-key vm-summary-mode-map [(control down)] 'next-line)
+(define-key vm-summary-mode-map [(control s)] 'vm-isearch-forward)
+
+(define-key vm-mail-mode-map [tab] 'indent-relative)
+(define-key vm-mail-mode-map [(control tab)] 'mail-interactive-insert-alias)
+(define-key vm-mail-mode-map [return] 'newline-and-indent)
+(define-key vm-mail-mode-map "\C-c\C-i" 'vm-serial-yank-mail)
+(define-key vm-mail-mode-map "\C-c\C-o" 'vm-serial-expand-tokens)
+(define-key vm-mail-mode-map [(control c) (control I)] 'vm-serial-insert-token)
+(define-key vm-mail-mode-map [(control meta delete)] 'kill-this-buffer)
+(define-key vm-mail-mode-map "\C-c\C-c" 'vm-mail-mode-comment-region)
+(define-key vm-mail-mode-map "\C-c\C-d" 'vm-mail-mode-elide-reply-region)
+(define-key vm-mail-mode-map "\C-c\C-k" 'vm-mail-mode-citation-clean-up)
+(define-key vm-mail-mode-map "\C-c\C-a" 'vm-mime-attach-file)
+(define-key vm-mail-mode-map "\C-c\C-b" 'boxquote-region-and-edit-title)
+
+;;; Local Variables: ***
+;;; mode:emacs-lisp ***
+;;; End: ***
+
+;;; .vm ends here

File lisp/tapestry.el

View file
+;;; tapestry.el --- Tools to configure your GNU Emacs windows
+;;
+;; Copyright (C) 1991, 1993, 1994, 1995, 1997 Kyle E. Jones
+;;
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License along
+;; with this program; if not, write to the Free Software Foundation, Inc.,
+;; 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+;;; Code:
+(defvar tapestry-version "1.09")
+
+;; Pass state information between the tapestry-set-window-map
+;; and tapestry-set-buffer-map stages.  UGH.  The reason for this
+;; is explained in tapestry-set-buffer-map.
+(defvar tapestry-windows-changed nil)
+
+;;;###autoload
+(defun tapestry (&optional frame-list)
+"Returns a list containing complete information about the current
+configuration of Emacs frames, windows, buffers and cursor
+positions.  Call the function set-tapestry with the list that this function
+returns to restore the configuration.
+
+Optional first arg FRAME-LIST should be a list of frames; only
+configuration information about these frames will be returned.
+
+The configuration information is returned in a form that can be saved and
+restored across multiple Emacs sessions."
+  (let ((frames (or frame-list (tapestry-frame-list)))
+	(frame-map (tapestry-frame-map))
+	(sf (tapestry-selected-frame))
+	(other-maps nil))
+    (unwind-protect
+	(while frames
+	  (tapestry-select-frame (car frames))
+	  (setq other-maps (cons (list (tapestry-window-map)
+				       (tapestry-buffer-map)
+				       (tapestry-position-map))
+				 other-maps)
+		frames (cdr frames)))
+      (tapestry-select-frame sf))
+    (list frame-map other-maps)))
+
+
+;;;###autoload
+(defun set-tapestry (map &optional n root-window-edges)
+  "Restore the frame/window/buffer configuration described by MAP,
+which should be a list previously returned by a call to
+tapestry.
+
+Optional second arg N causes frame reconfiguration to be skipped
+and the windows of the current frame will configured according to
+the window map of the Nth frame in MAP.
+
+Optional third arg ROOT-WINDOW-EDGES non-nil should be a list
+containing the edges of a window in the current frame.  This list
+should be in the same form as returned by the `window-edges'
+function.  The window configuration from MAP will be restored in
+this window.  If no window with these exact edges exists, a
+window that lies entirely within the edge coordinates will be
+expanded until the edge coordinates match or the window bounded by
+ROOT-WINDOW-EDGES is entirely contained within the expanded
+window.  If no window entirely within the ROOT-WINDOW-EDGES edge
+coordinates can be found, the window with the greatest overlap of
+ROOT-WINDOW-EDGES will be used."
+  (let ((sf (tapestry-selected-frame))
+	(tapestry-windows-changed nil)
+	frame-list frame-map other-maps other-map)
+    (setq frame-map (nth 0 map)
+	  other-maps (nth 1 map))
+    (if (and root-window-edges (null n))
+	(setq n 1))
+    (if n
+	(let (first-window)
+	  (setq other-map (nth (1- n) other-maps))
+	  (if (null other-map)
+	      (error "No such map, %d" n))
+	  (setq first-window
+		(tapestry-set-window-map (nth 0 other-map) root-window-edges))
+	  (tapestry-set-buffer-map (nth 1 other-map) first-window)
+	  (tapestry-set-position-map (nth 2 other-map) first-window))
+      (tapestry-set-frame-map frame-map)
+      ;; frame list is reversed relative to the map order because
+      ;; created frames are added to the head of the list instead
+      ;; of the tail.
+      (setq frame-list (nreverse (tapestry-frame-list)))
+      (unwind-protect
+	  (while other-maps
+	    (tapestry-select-frame (car frame-list))
+	    (tapestry-set-window-map (nth 0 (car other-maps)))
+	    (tapestry-set-buffer-map (nth 1 (car other-maps)))
+	    (tapestry-set-position-map (nth 2 (car other-maps)))
+	    (setq other-maps (cdr other-maps)
+		  frame-list (cdr frame-list)))
+	(and (tapestry-frame-live-p sf) (tapestry-select-frame sf))))))
+
+(defun tapestry-frame-map ()
+  (let ((map (mapcar 'tapestry-frame-parameters (tapestry-frame-list)))
+	list cell frame-list)
+    (setq list map
+	  frame-list (tapestry-frame-list))
+    (while list
+      (setq cell (assq 'minibuffer (car list)))
+      (if (and cell (windowp (cdr cell)))
+	  (if (eq (tapestry-window-frame (cdr cell)) (car frame-list))
+	      (setcdr cell t)
+	    (setcdr cell 'none)))
+      (setq list (cdr list)
+	    frame-list (cdr frame-list)))
+    map ))
+
+(defun tapestry-set-frame-map (map)
+  ;; some parameters can only be set only at frame creation time.
+  ;; so all existing frames must die.
+  (let ((doomed-frames (tapestry-frame-list)))
+    (while map
+      (tapestry-make-frame (car map))
+      (setq map (cdr map)))
+    (while doomed-frames
+      (tapestry-delete-frame (car doomed-frames))
+      (setq doomed-frames (cdr doomed-frames)))))
+
+(defun tapestry-window-map ()
+  (let (maps map0 map1 map0-edges map1-edges x-unchanged y-unchanged)
+    (setq maps (mapcar 'tapestry-window-edges (tapestry-window-list)))
+    (while (cdr maps)
+      (setq map0 maps)
+      (while (cdr map0)
+	(setq map1 (cdr map0)
+	      map0-edges (tapestry-find-window-map-edges (car map0))
+	      map1-edges (tapestry-find-window-map-edges (car map1))
+	      x-unchanged (and (= (car map0-edges) (car map1-edges))
+			       (= (nth 2 map0-edges) (nth 2 map1-edges)))
+	      y-unchanged (and (= (nth 1 map0-edges) (nth 1 map1-edges))
+			       (= (nth 3 map0-edges) (nth 3 map1-edges))))
+	(cond ((and (not x-unchanged) (not y-unchanged))
+	       (setq map0 (cdr map0)))
+	      ((or (and x-unchanged (eq (car (car map0)) '-))
+		   (and y-unchanged (eq (car (car map0)) '|)))
+	       (nconc (car map0) (list (car map1)))
+	       (setcdr map0 (cdr map1)))
+	      (t
+	       (setcar map0 (list (if x-unchanged '- '|)
+				  (car map0)
+				  (car map1)))
+	       (setcdr map0 (cdr map1))))))
+    (car maps)))
+
+(defun tapestry-set-window-map (map &optional root-window-edges)
+  (let ((map-width (tapestry-compute-map-width map))
+	(map-height (tapestry-compute-map-height map))
+	(root-window nil))
+    (if root-window-edges
+	(let (w-list w-edges w-area
+	      exact-w inside-w overlap-w max-overlap overlap)
+	  (while (null root-window)
+	    (setq exact-w nil
+		  inside-w nil
+		  overlap-w nil
+		  max-overlap -1
+		  w-list (tapestry-window-list))
+	    (while w-list
+	      (setq w-edges (tapestry-window-edges (car w-list))
+		    w-area (tapestry-window-area w-edges))
+	      (if (equal w-edges root-window-edges)
+		  (setq exact-w (car w-list)
+			w-list nil)
+		(setq overlap (tapestry-window-overlap w-edges
+						       root-window-edges)
+		      overlap (if overlap (tapestry-window-area overlap) 0)
+		      w-area (tapestry-window-area w-edges))
+		(if (< max-overlap overlap)
+		    (setq max-overlap overlap
+			  overlap-w (car w-list)))
+		;; set inside-w each time we find a window inside
+		;; the root window edges.  FSF Emacs gives space
+		;; to the window above or to the left if there is
+		;; such a window.  therefore we want to find the
+		;; inside window that is bottom-most or right-most so that
+		;; when we delete it, its space will be given to
+		;; what will be the root window.
+		(if (= w-area overlap)
+		    (setq inside-w (car w-list)))
+		(setq w-list (cdr w-list))))
+	    (cond (exact-w (setq root-window exact-w))
+		  (inside-w
+		   ;; how could a window be inside the root window
+		   ;; edges and there only be one window?  a
+		   ;; multi-line minibuffer, that's how!
+		   (if (not (one-window-p t))
+		       (delete-window inside-w)))
+		  (t (setq root-window overlap-w))))
+	  (tapestry-apply-window-map map map-width map-height root-window)
+	  (setq tapestry-windows-changed t)
+	  root-window )
+      (if (tapestry-windows-match-map map map-width map-height)
+	  (tapestry-first-window)
+	(if (fboundp 'frame-reduce-to-one-window)
+	    (frame-reduce-to-one-window (selected-frame))
+	  ;; `delete-other-windows' may cause the window point to move
+	  ;; as it tries to minimize redisplay
+	  (delete-other-windows))
+	(setq root-window (selected-window))
+	(tapestry-apply-window-map map map-width map-height root-window)
+	(setq tapestry-windows-changed t)
+	root-window ))))
+
+(defun tapestry-buffer-map ()
+  (let ((w-list (tapestry-window-list))
+	b list)
+    (while w-list
+      (setq b (window-buffer (car w-list))
+	    list (cons (list (buffer-file-name b)
+			     (buffer-name b))
+		       list)
+	    w-list (cdr w-list)))
+    (nreverse list)))
+
+;; This version of tapestry-set-buffer-map unconditionally set
+;; the window buffer.  This confused XEmacs 19.14's scroll-up
+;; function when scrolling VM presentation buffers.
+;; end-of-buffer was never signaled after a scroll.  You can
+;; duplicate this by creating a buffer that can be displayed
+;; fully in the current window and then run
+;;
+;;    (progn
+;;      (set-window-buffer (selected-window) (current-buffer))
+;;      (scroll-up nil))
+;;;;;;;;;;;
+;;(defun tapestry-set-buffer-map (buffer-map &optional first-window)
+;;  (let ((w-list (tapestry-window-list first-window)) wb)
+;;    (while (and w-list buffer-map)
+;;      (setq wb (car buffer-map))
+;;      (set-window-buffer
+;;       (car w-list)
+;;       (if (car wb)
+;;	   (or (get-file-buffer (car wb))
+;;	       (find-file-noselect (car wb)))
+;;	 (get-buffer-create (nth 1 wb))))
+;;      (setq w-list (cdr w-list)
+;;	    buffer-map (cdr buffer-map)))))
+
+(defun tapestry-set-buffer-map (buffer-map &optional first-window)
+  (let ((w-list (tapestry-window-list first-window))
+	current-wb proposed-wb cell)
+    (while (and w-list buffer-map)
+      (setq cell (car buffer-map)
+	    proposed-wb (if (car cell)
+			    (or (get-file-buffer (car cell))
+				(find-file-noselect (car cell)))
+			  (get-buffer-create (nth 1 cell)))
+	    current-wb (window-buffer (car w-list)))
+      ;; Setting the window buffer to the same value it already
+      ;; has seems to confuse XEmacs' scroll-up function.  But
+      ;; _not_ setting it after windows torn down seem to cause
+      ;; window point to sometimes drift away from point at
+      ;; redisplay time.  The solution (hopefully!) is to track
+      ;; when windows have been rearranged and unconditionally do
+      ;; the set-window-buffer, otherwise do it only if the
+      ;; window buffer and the proposed window buffer differ.
+      (if (or tapestry-windows-changed (not (eq proposed-wb current-wb)))
+	  (set-window-buffer (car w-list) proposed-wb))
+      (setq w-list (cdr w-list)
+	    buffer-map (cdr buffer-map)))))
+
+(defun tapestry-position-map ()
+  (let ((sw (selected-window))
+	(w-list (tapestry-window-list))
+	list)
+    (while w-list
+      (setq list (cons (list (window-start (car w-list))
+			     (window-point (car w-list))
+			     (window-hscroll (car w-list))
+			     (eq (car w-list) sw))
+		       list)
+	    w-list (cdr w-list)))
+    (nreverse list)))
+
+(defun tapestry-set-position-map (position-map &optional first-window)
+  (let ((w-list (tapestry-window-list first-window))
+	(osw (selected-window))
+	sw p)
+    (while (and w-list position-map)
+      (setq p (car position-map))
+      (and (car p) (set-window-start (car w-list) (car p)))
+      (and (nth 1 p) (set-window-point (car w-list) (nth 1 p)))
+      (and (nth 2 p) (set-window-hscroll (car w-list) (nth 2 p)))
+      (and (nth 3 p) (setq sw (car w-list)))
+      ;; move this buffer up in the buffer-list
+      (select-window (car w-list))
+      (setq w-list (cdr w-list)
+	    position-map (cdr position-map)))
+    (select-window (or sw osw))))
+
+(defun tapestry-apply-window-map (map map-width map-height current-window
+				      &optional
+				      root-window-width
+				      root-window-height)
+  (let ((window-min-height 1)
+	(window-min-width 1)
+	horizontal)
+    (if (null root-window-width)
+	(setq root-window-height (window-height current-window)
+	      root-window-width (window-width current-window)))
+    (while map
+      (cond
+       ((numberp (car map)) (setq map nil))
+       ((eq (car map) '-) (setq horizontal nil))
+       ((eq (car map) '|) (setq horizontal t))
+       (t
+	(if (cdr map)
+	    (split-window
+	     current-window
+	     (if horizontal
+		 (/ (* (tapestry-compute-map-width (car map))
+		       root-window-width)
+		    map-width)
+	       (/ (* (tapestry-compute-map-height (car map))
+		     root-window-height)
+		  map-height))
+	     horizontal))
+	(if (not (numberp (car (car map))))
+	    (setq current-window
+		  (tapestry-apply-window-map (car map)
+					     map-width map-height
+					     current-window
+					     root-window-width
+					     root-window-height)))
+	(and (cdr map) (setq current-window (next-window current-window 0)))))
+      (setq map (cdr map)))
+    current-window ))
+
+(defun tapestry-windows-match-map (map
+				   &optional
+				   map-width map-height
+				   window-map
+				   window-map-width
+				   window-map-height)
+  (or map-width
+      (setq map-width (tapestry-compute-map-width map)
+	    map-height (tapestry-compute-map-height map)))
+  (or window-map
+      (setq window-map (tapestry-window-map)
+	    window-map-height (tapestry-compute-map-height window-map)
+	    window-map-width (tapestry-compute-map-width window-map)))
+  (let ((result t))
+    (cond ((numberp (car map))
+	   (and (numberp (car window-map))
+		(= (/ (* (nth 0 map) window-map-width)
+		      map-width)
+		   (nth 0 window-map))
+		(= (/ (* (nth 1 map) window-map-height)
+		      map-height)
+		   (nth 1 window-map))
+		(= (/ (* (nth 2 map) window-map-width)
+		      map-width)
+		   (nth 2 window-map))
+		(= (/ (* (nth 3 map) window-map-height)
+		      map-height)
+		   (nth 3 window-map))))
+	  ((eq (car map) '-)
+	   (if (not (eq (car window-map) '-))
+	       nil
+	     (setq map (cdr map)
+		   window-map (cdr window-map))
+	     (while (and result map window-map)
+	       (setq result (tapestry-windows-match-map (car map)
+						       map-width
+						       map-height
+						       (car window-map)
+						       window-map-width
+						       window-map-height)
+		     map (cdr map)
+		     window-map (cdr window-map)))
+	     (and result (null map) (null window-map))))
+	  ((eq (car map) '|)
+	   (if (not (eq (car window-map) '|))
+	       nil
+	     (setq map (cdr map)
+		   window-map (cdr window-map))
+	     (while (and result map window-map)
+	       (setq result (tapestry-windows-match-map (car map)
+						       map-width
+						       map-height
+						       (car window-map)
+						       window-map-width
+						       window-map-height)
+		     map (cdr map)
+		     window-map (cdr window-map)))
+	     (and result (null map) (null window-map)))))))
+
+(defun tapestry-find-window-map-edges (map)
+  (let (nw-edges se-edges)