# HG changeset patch # User Reiner Steib # Date 1091456748 0 # Node ID bb6c986199c4a03730be2afed90050ebb12e80e7 # Parent 70bec5d00eeb85ad23cea132abc18d419919ce60 Import from the v5_10 branch of the Gnus repository. diff -r 70bec5d00eeb -r bb6c986199c4 etc/ChangeLog --- a/etc/ChangeLog Mon Aug 02 14:21:13 2004 +0000 +++ b/etc/ChangeLog Mon Aug 02 14:25:48 2004 +0000 @@ -1,3 +1,8 @@ +2004-08-02 Reiner Steib + + * gnus.xpm, gnus-pointer.xbm, gnus-pointer.xpm: Import from the + v5_10 branch of the Gnus repository. + 2004-07-14 Luc Teirlinck * MORE.STUFF: Tramp is now distributed with Emacs. diff -r 70bec5d00eeb -r bb6c986199c4 etc/gnus-pointer.xbm --- a/etc/gnus-pointer.xbm Mon Aug 02 14:21:13 2004 +0000 +++ b/etc/gnus-pointer.xbm Mon Aug 02 14:25:48 2004 +0000 @@ -1,7 +1,6 @@ - #define noname_width 18 -#define noname_height 12 +#define noname_height 13 static char noname_bits[] = { - 0xc0,0x0c,0x00,0xe0,0x1f,0x00,0x92,0x39,0x00,0x0e,0x71,0x02, + 0x00,0x00,0x00,0xc0,0x0c,0x00,0xe0,0x1f,0x00,0x92,0x39,0x00,0x0e,0x71,0x02, 0x46,0xe0,0x03,0x20,0xc0,0x01,0x00,0x08,0x00,0x10,0x0d,0x00,0xc4,0x08,0x00, 0x78,0x08,0x00,0x18,0x89,0x00,0x00,0x08,0x00}; diff -r 70bec5d00eeb -r bb6c986199c4 etc/gnus-pointer.xpm --- a/etc/gnus-pointer.xpm Mon Aug 02 14:21:13 2004 +0000 +++ b/etc/gnus-pointer.xpm Mon Aug 02 14:25:48 2004 +0000 @@ -1,11 +1,12 @@ /* XPM */ static char *gnus-pointer[] = { /* width height num_colors chars_per_pixel */ -" 18 12 2 1", +" 18 13 2 1", /* colors */ ". c #0000ff", "# c None s None", /* pixels */ +"##################", "######..##..######", "#####........#####", "#.##.##..##...####", diff -r 70bec5d00eeb -r bb6c986199c4 etc/gnus.xpm --- a/etc/gnus.xpm Mon Aug 02 14:21:13 2004 +0000 +++ b/etc/gnus.xpm Mon Aug 02 14:25:48 2004 +0000 @@ -5,7 +5,7 @@ /* colors */ ". s thing c #bf9900", "# s shadow c #ffcc00", -"a s background c None", +"a s None c None", /* pixels */ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", @@ -281,3 +281,4 @@ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" }; + diff -r 70bec5d00eeb -r bb6c986199c4 man/pgg.texi --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/pgg.texi Mon Aug 02 14:25:48 2004 +0000 @@ -0,0 +1,404 @@ +\input texinfo @c -*-texinfo-*- + +@setfilename ../info/pgg + +@set VERSION 0.1 + +@direntry +* PGG: (pgg). Emacs interface to various PGP implementations. +@end direntry + +@settitle PGG @value{VERSION} + +@ifinfo +This file describes the PGG. + +Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2001 Daiki Ueno. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the section entitled "GNU +Free Documentation License". +@end ifinfo + +@tex + +@titlepage +@title PGG + +@author by Daiki Ueno +@page + +@vskip 0pt plus 1filll +Copyright @copyright{} 2001 Daiki Ueno. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the section entitled "GNU +Free Documentation License". +@end titlepage +@page + +@end tex + +@node Top +@top PGG +This manual describes PGG. PGG is an interface library between Emacs +and various tools for secure communication. PGG also provides a simple +user interface to encrypt, decrypt, sign, and verify MIME messages. + +@menu +* Overview:: What PGG is. +* Prerequisites:: Complicated stuff you may have to do. +* How to use:: Getting started quickly. +* Architecture:: +* Parsing OpenPGP packets:: +* Function Index:: +* Variable Index:: +@end menu + +@node Overview +@chapter Overview + +PGG is an interface library between Emacs and various tools for secure +communication. Even though Mailcrypt has similar feature, it does not +deal with detached PGP messages, normally used in PGP/MIME +infrastructure. This was the main reason why I wrote the new library. + +PGP/MIME is an application of MIME Object Security Services (RFC1848). +The standard is documented in RFC2015. + +@node Prerequisites +@chapter Prerequisites + +PGG requires at least one implementation of privacy guard system. +This document assumes that you have already obtained and installed them +and that you are familiar with its basic functions. + +By default, PGG uses GnuPG, but Pretty Good Privacy version 2 or version +5 are also supported. If you are new to such a system, I recommend that +you should look over the GNU Privacy Handbook (GPH) which is available +at @uref{http://www.gnupg.org/gph/}. + +@node How to use +@chapter How to use + +The toplevel interface of this library is quite simple, and only +intended to use with public-key cryptographic operation. + +To use PGG, evaluate following expression at the beginning of your +application program. + +@lisp +(require 'pgg) +@end lisp + +If you want to check existence of pgg.el at runtime, instead you can +list autoload setting for desired functions as follows. + +@lisp +(autoload 'pgg-encrypt-region "pgg" + "Encrypt the current region." t) +(autoload 'pgg-decrypt-region "pgg" + "Decrypt the current region." t) +(autoload 'pgg-sign-region "pgg" + "Sign the current region." t) +(autoload 'pgg-verify-region "pgg" + "Verify the current region." t) +(autoload 'pgg-insert-key "pgg" + "Insert the ASCII armored public key." t) +(autoload 'pgg-snarf-keys-region "pgg" + "Import public keys in the current region." t) +@end lisp + +@menu +* User Commands:: +* Selecting an implementation:: +* Caching passphrase:: +* Default user identity:: +@end menu + +@node User Commands +@section User Commands + +At this time you can use some cryptographic commands. The behavior of +these commands relies on a fashion of invocation because they are also +intended to be used as library functions. In case you don't have the +signer's public key, for example, the function @code{pgg-verify-region} +fails immediately, but if the function had been called interactively, it +would ask you to retrieve the signer's public key from the server. + +@deffn Command pgg-encrypt-region start end recipients &optional sign +Encrypt the current region between @var{start} and @var{end} for +@var{recipients}. When the function were called interactively, you +would be asked about the recipients. + +If encryption is successful, it replaces the current region contents (in +the accessible portion) with the resulting data. + +If optional argument @var{sign} is non-nil, the function is request to +do a combined sign and encrypt. This currently only work with GnuPG. +@end deffn + +@deffn Command pgg-decrypt-region start end +Decrypt the current region between @var{start} and @var{end}. If +decryption is successful, it replaces the current region contents (in +the accessible portion) with the resulting data. +@end deffn + +@deffn Command pgg-sign-region start end &optional cleartext +Make the signature from text between @var{start} and @var{end}. If the +optional third argument @var{cleartext} is non-@code{nil}, or the +function is called interactively, it does not create a detached +signature. In such a case, it replaces the current region contents (in +the accessible portion) with the resulting data. +@end deffn + +@deffn Command pgg-verify-region start end &optional signature fetch +Verify the current region between @var{start} and @var{end}. If the +optional third argument @var{signature} is non-@code{nil}, or the function +is called interactively, it is treated as the detached signature of the +current region. + +If the optional 4th argument @var{fetch} is non-@code{nil}, or the +function is called interactively, we attempt to fetch the signer's +public key from the key server. +@end deffn + +@deffn Command pgg-insert-key +Retrieve the user's public key and insert it as ASCII-armored format. +@end deffn + +@deffn Command pgg-snarf-keys-region start end +Collect public keys in the current region between @var{start} and +@var{end}, and add them into the user's keyring. +@end deffn + +@node Selecting an implementation +@section Selecting an implementation + +Since PGP has a long history and there are a number of PGP +implementations available today, the function which each one has differs +considerably. For example, if you are using GnuPG, you know you can +select cipher algorithm from 3DES, CAST5, BLOWFISH, and so on, but on +the other hand the version 2 of PGP only supports IDEA. + +By default, if the variable @code{pgg-scheme} is not set, PGG searches the +registered scheme for an implementation of the requested service +associated with the named algorithm. If there are no match, PGG uses +@code{pgg-default-scheme}. In other words, there are two options to +control which command is used to process the incoming PGP armors. One +is for encrypting and signing, the other is for decrypting and +verifying. + +@defvar pgg-scheme +Force specify the scheme of PGP implementation for decrypting and verifying. +The value can be @code{gpg}, @code{pgp}, and @code{pgp5}. +@end defvar + +@defvar pgg-default-scheme +Force specify the scheme of PGP implementation for encrypting and signing. +The value can be @code{gpg}, @code{pgp}, and @code{pgp5}. +@end defvar + +@node Caching passphrase +@section Caching passphrase + +PGG provides a simple passphrase caching mechanism. If you want to +arrange the interaction, set the variable @code{pgg-read-passphrase}. + +@defvar pgg-cache-passphrase +If non-@code{nil}, store passphrases. The default value of this +variable is @code{t}. If you were worry about security issue, however, +you could stop caching with setting it @code{nil}. +@end defvar + +@defvar pgg-passphrase-cache-expiry +Elapsed time for expiration in seconds. +@end defvar + +@node Default user identity +@section Default user identity + +The PGP implementation is usually able to select the proper key to use +for signing and decryption, but if you have more than one key, you may +need to specify the key id to use. + +@defvar pgg-default-user-id +User ID of your default identity. It defaults to the value returned +by @samp{(user-login-name)}. You can customize this variable. +@end defvar + +@defvar pgg-gpg-user-id +User ID of the GnuPG default identity. It defaults to @samp{nil}. +This overrides @samp{pgg-default-user-id}. You can customize this +variable. +@end defvar + +@defvar pgg-pgp-user-id +User ID of the PGP 2.x/6.x default identity. It defaults to +@samp{nil}. This overrides @samp{pgg-default-user-id}. You can +customize this variable. +@end defvar + +@defvar pgg-pgp5-user-id +User ID of the PGP 5.x default identity. It defaults to @samp{nil}. +This overrides @samp{pgg-default-user-id}. You can customize this +variable. +@end defvar + +@node Architecture +@chapter Architecture + +PGG introduces the notion of a "scheme of PGP implementation" (used +interchangeably with "scheme" in this document). This term refers to a +singleton object wrapped with the luna object system. + +Since PGG was designed for accessing and developing PGP functionality, +the architecture had to be designed not just for interoperability but +also for extensiblity. In this chapter we explore the architecture +while finding out how to write the PGG backend. + +@menu +* Initializing:: +* Backend methods:: +* Getting output:: +@end menu + +@node Initializing +@section Initializing + +A scheme must be initialized before it is used. +It had better guarantee to keep only one instance of a scheme. + +The following code is snipped out of @file{pgg-gpg.el}. Once an +instance of @code{pgg-gpg} scheme is initialized, it's stored to the +variable @code{pgg-scheme-gpg-instance} and will be reused from now on. + +@lisp +(defvar pgg-scheme-gpg-instance nil) + +(defun pgg-make-scheme-gpg () + (or pgg-scheme-gpg-instance + (setq pgg-scheme-gpg-instance + (luna-make-entity 'pgg-scheme-gpg)))) +@end lisp + +The name of the function must follow the +regulation---@code{pgg-make-scheme-} follows the backend name. + +@node Backend methods +@section Backend methods + +In each backend, these methods must be present. The output of these +methods is stored in special buffers (@ref{Getting output}), so that +these methods must tell the status of the execution. + +@deffn Method pgg-scheme-lookup-key scheme string &optional type +Return keys associated with @var{string}. If the optional third +argument @var{type} is non-@code{nil}, it searches from the secret +keyrings. +@end deffn + +@deffn Method pgg-scheme-encrypt-region scheme start end recipients &optional sign +Encrypt the current region between @var{start} and @var{end} for +@var{recipients}. If @var{sign} is non-nil, do a combined sign and +encrypt. If encryption is successful, it returns @code{t}, otherwise +@code{nil}. +@end deffn + +@deffn Method pgg-scheme-decrypt-region scheme start end +Decrypt the current region between @var{start} and @var{end}. If +decryption is successful, it returns @code{t}, otherwise @code{nil}. +@end deffn + +@deffn Method pgg-scheme-sign-region scheme start end &optional cleartext +Make the signature from text between @var{start} and @var{end}. If the +optional third argument @var{cleartext} is non-@code{nil}, it does not +create a detached signature. If signing is successful, it returns +@code{t}, otherwise @code{nil}. +@end deffn + +@deffn Method pgg-scheme-verify-region scheme start end &optional signature +Verify the current region between @var{start} and @var{end}. If the +optional third argument @var{signature} is non-@code{nil}, it is treated +as the detached signature of the current region. If the signature is +successfully verified, it returns @code{t}, otherwise @code{nil}. +@end deffn + +@deffn Method pgg-scheme-insert-key scheme +Retrieve the user's public key and insert it as ASCII-armored format. +On success, it returns @code{t}, otherwise @code{nil}. +@end deffn + +@deffn Method pgg-scheme-snarf-keys-region scheme start end +Collect public keys in the current region between @var{start} and +@var{end}, and add them into the user's keyring. +On success, it returns @code{t}, otherwise @code{nil}. +@end deffn + +@node Getting output +@section Getting output + +The output of the backend methods (@ref{Backend methods}) is stored in +special buffers, so that these methods must tell the status of the +execution. + +@defvar pgg-errors-buffer +The standard error output of the execution of the PGP command is stored +here. +@end defvar + +@defvar pgg-output-buffer +The standard output of the execution of the PGP command is stored here. +@end defvar + +@defvar pgg-status-buffer +The rest of status information of the execution of the PGP command is +stored here. +@end defvar + +@node Parsing OpenPGP packets +@chapter Parsing OpenPGP packets + +The format of OpenPGP messages is maintained in order to publish all +necessary information needed to develop interoperable applications. +The standard is documented in RFC 2440. + +PGG has its own parser for the OpenPGP packets. + +@defun pgg-parse-armor string +List the sequence of packets in @var{string}. +@end defun + +@defun pgg-parse-armor-region start end +List the sequence of packets in the current region between @var{start} +and @var{end}. +@end defun + +@defvar pgg-ignore-packet-checksum +If non-@code{nil}, don't check the checksum of the packets. +@end defvar + +@node Function Index +@chapter Function Index +@printindex fn + +@node Variable Index +@chapter Variable Index +@printindex vr + +@summarycontents +@contents +@bye + +@c End: + +@ignore + arch-tag: 0c205838-34b9-41a5-b9d7-49ae57ccac85 +@end ignore diff -r 70bec5d00eeb -r bb6c986199c4 man/sieve.texi --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/sieve.texi Mon Aug 02 14:25:48 2004 +0000 @@ -0,0 +1,383 @@ +\input texinfo @c -*-texinfo-*- + +@setfilename ../info/sieve +@settitle Emacs Sieve Manual +@synindex fn cp +@synindex vr cp +@synindex pg cp +@dircategory Emacs +@direntry +* Sieve: (sieve). Managing Sieve scripts in Emacs. +@end direntry +@iftex +@finalout +@end iftex +@setchapternewpage odd + +@ifnottex + +This file documents the Emacs Sieve package. + +Copyright (C) 2001 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover texts being ``A GNU +Manual'', and with the Back-Cover Texts as in (a) below. A copy of the +license is included in the section entitled ``GNU Free Documentation +License'' in the Emacs manual. + +(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify +this GNU Manual, like GNU software. Copies published by the Free +Software Foundation raise funds for GNU development.'' + +This document is part of a collection distributed under the GNU Free +Documentation License. If you want to distribute this document +separately from the collection, you can do so by adding a copy of the +license to the document, as described in section 6 of the license. +@end ifnottex + +@tex + +@titlepage +@title Emacs Sieve Manual + +@author by Simon Josefsson +@page + +@vskip 0pt plus 1filll +Copyright @copyright{} 2001 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 or +any later version published by the Free Software Foundation; with the +Invariant Sections being none, with the Front-Cover texts being ``A GNU +Manual'', and with the Back-Cover Texts as in (a) below. A copy of the +license is included in the section entitled ``GNU Free Documentation +License'' in the Emacs manual. + +(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify +this GNU Manual, like GNU software. Copies published by the Free +Software Foundation raise funds for GNU development.'' + +This document is part of a collection distributed under the GNU Free +Documentation License. If you want to distribute this document +separately from the collection, you can do so by adding a copy of the +license to the document, as described in section 6 of the license. +@end titlepage +@page + +@end tex + +@node Top +@top Sieve Support for Emacs + +This manual documents the Emacs Sieve package. + +It is intended as a users manual for Sieve Mode and Manage Sieve, and +as a reference manual for the @samp{sieve-manage} protocol Emacs Lisp +API. + +Sieve is a language for server-side filtering of mail. The language +is documented in RFC 3028. This manual does not attempt to document +the language, so keep RFC 3028 around. + +A good online Sieve resources is @uref{http://www.cyrusoft.com/sieve/}. + +@menu +* Installation:: Getting ready to use the package. +* Sieve Mode:: Editing Sieve scripts. +* Managing Sieve:: Managing Sieve scripts on a remote server. +* Examples :: A few Sieve code snippets. +* Manage Sieve API :: Interfacing to the Manage Sieve Protocol API. +* Standards:: A summary of RFCs and working documents used. +* Index:: Function and variable index. +@end menu + + +@node Installation +@chapter Installation +@cindex Install +@cindex Setup + +The Sieve package should come with your Emacs version, and should be +ready for use directly. + +However, to manually set up the package you can put the following +commands in your @code{~/.emacs}: + +@lisp +(autoload 'sieve-mode "sieve-mode") +@end lisp +@lisp +(setq auto-mode-alist (cons '("\\.s\\(v\\|iv\\|ieve\\)\\'" . sieve-mode) + auto-mode-alist)) +@end lisp + + +@node Sieve Mode +@chapter Sieve Mode + +Sieve mode provides syntax-based indentation, font-locking support and +other handy functions to make editing Sieve scripts easier. + +Use @samp{M-x sieve-mode} to switch to this major mode. This command +runs the hook @code{sieve-mode-hook}. + +@vindex sieve-mode-map +@vindex sieve-mode-syntax-table +Sieve mode is derived from @code{c-mode}, and is very similar except +for the syntax of comments. The keymap (@code{sieve-mode-map}) is +inherited from @code{c-mode}, as are the variables for customizing +indentation. Sieve mode has its own abbrev table +(@code{sieve-mode-abbrev-table}) and syntax table +(@code{sieve-mode-syntax-table}). + +In addition to the editing utility functions, Sieve mode also contains +bindings to manage Sieve scripts remotely. @xref{Managing Sieve}. + +@table @kbd + +@item C-c RET +@kindex C-c RET +@findex sieve-manage +@cindex manage remote sieve script +Open a connection to a remote server using the Managesieve protocol. + +@item C-c C-l +@kindex C-c C-l +@findex sieve-upload +@cindex upload sieve script +Upload the Sieve script to the currently open server. + +@end table + + +@node Managing Sieve +@chapter Managing Sieve + +Manage Sieve is a special mode used to display Sieve scripts available +on a remote server. It can be invoked with @kbd{M-x sieve-manage +RET}, which queries the user for a server and if necessary, user +credentials to use. + +When a server has been successfully contacted, the Manage Sieve buffer +looks something like: + +@example +Server : mailserver:2000 + +2 scripts on server, press RET on a script name edits it, or +press RET on to create a new script. + + ACTIVE .sieve + template.siv +@end example + +One of the scripts are highlighted, and standard point navigation +commands (@kbd{}, @kbd{} etc) can be used to navigate the +list. + +The following commands are available in the Manage Sieve buffer: + +@table @kbd + +@item m +@kindex m +@findex sieve-activate +Activates the currently highlighted script. + +@item u +@kindex u +@findex sieve-deactivate +Deactivates the currently highlighted script. + +@item C-M-? +@kindex C-M-? +@findex sieve-deactivate-all +Deactivates all scripts. + +@item r +@kindex r +@findex sieve-remove +Remove currently highlighted script. + +@item RET +@item mouse-2 +@item f +@kindex RET +@kindex mouse-2 +@kindex f +@findex sieve-edit-script +Bury the server buffer and download the currently highlighted script +into a new buffer for editing in Sieve mode (@pxref{Sieve Mode}). + +@item o +@kindex o +@findex sieve-edit-script-other-window +Create a new buffer in another window containing the currently +highlighted script for editing in Sieve mode (@pxref{Sieve Mode}). + +@item q +@kindex q +@findex sieve-bury-buffer +Bury the Manage Sieve buffer without closing the connection. + +@item ? +@item h +@kindex ? +@kindex h +@findex sieve-help +Displays help in the minibuffer. + +@end table + +@node Examples +@chapter Examples + +If you are not familiar with Sieve, this chapter contains a few simple +code snippets that you can cut'n'paste and modify at will, until you +feel more comfortable with the Sieve language to write the rules from +scratch. + +The following complete Sieve script places all messages with a matching +@samp{Sender:} header into the given mailbox. Many mailing lists uses +this format. The first line makes sure your Sieve server understands +the @code{fileinto} command. + +@example +require "fileinto"; + +if address "sender" "owner-w3-beta@@xemacs.org" @{ + fileinto "INBOX.w3-beta"; +@} +@end example + +A few mailing lists do not use the @samp{Sender:} header, but does +contain some unique identifier in some other header. The following is +not a complete script, it assumes that @code{fileinto} has already been +required. + +@example +if header :contains "Delivered-To" "auc-tex@@sunsite.dk" @{ + fileinto "INBOX.auc-tex"; +@} +@end example + +At last, we have the hopeless mailing lists that does not have any +unique identifier and you are forced to match on the @samp{To:} and +@samp{Cc} headers. As before, this snippet assumes that @code{fileinto} +has been required. + +@example +if address ["to", "cc"] "kerberos@@mit.edu" @{ + fileinto "INBOX.kerberos"; +@} +@end example + +@node Manage Sieve API +@chapter Manage Sieve API + +The @file{sieve-manage.el} library contains low-level functionality +for talking to a server with the @sc{managesieve} protocol. + +A number of user-visible variables exist, which all can be customized +in the @code{sieve} group (@kbd{M-x customize-group RET sieve RET}): + +@table @code + +@item sieve-manage-default-user +@vindex sieve-manage-default-user +Sets the default username. + +@item sieve-manage-default-port +@vindex sieve-manage-default-port +Sets the default port to use, the suggested port number is @code{2000}. + +@item sieve-manage-log +@vindex sieve-manage-log +If non-nil, should be a string naming a buffer where a protocol trace +is dumped (for debugging purposes). + +@end table + +The API functions include: + +@table @code + +@item sieve-manage-open +@findex sieve-manage-open +Open connection to managesieve server, returning a buffer to be used +by all other API functions. + +@item sieve-manage-opened +@findex sieve-manage-opened +Check if a server is open or not. + +@item sieve-manage-close +@findex sieve-manage-close +Close a server connection. + +@item sieve-manage-authenticate +@findex sieve-manage-authenticate +Authenticate to the server. + +@item sieve-manage-capability +@findex sieve-manage-capability +Return a list of capabilities the server support. + +@item sieve-manage-listscripts +@findex sieve-manage-listscripts +List scripts on the server. + +@item sieve-manage-havespace +@findex sieve-manage-havespace +Returns non-nil iff server have roam for a script of given size. + +@item sieve-manage-getscript +@findex sieve-manage-getscript +Download script from server. + +@item sieve-manage-putscript +@findex sieve-manage-putscript +Upload script to server. + +@item sieve-manage-setactive +@findex sieve-manage-setactive +Indicate which script on the server should be active. + +@end table + +@node Standards +@chapter Standards + +The Emacs Sieve package implements all or parts of a small but +hopefully growing number of RFCs and drafts documents. This chapter +lists the relevant ones. They can all be fetched from +@uref{http://quimby.gnus.org/notes/}. + +@table @dfn + +@item RFC3028 +Sieve: A Mail Filtering Language. + +@item draft-martin-managesieve-03 +A Protocol for Remotely Managing Sieve Scripts + +@end table + + +@node Index +@chapter Index +@printindex cp + +@summarycontents +@contents +@bye + +@c End: + +@ignore + arch-tag: 6e3ad0af-2eaf-4f35-a081-d40f4a683ec3 +@end ignore