Mercurial > emacs
changeset 97101:17ffb4cfad01
New file.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Tue, 29 Jul 2008 18:00:35 +0000 |
parents | 49554aa0f89a |
children | ac037a911bec |
files | doc/misc/mairix-el.texi |
diffstat | 1 files changed, 346 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/misc/mairix-el.texi Tue Jul 29 18:00:35 2008 +0000 @@ -0,0 +1,346 @@ +\input texinfo.tex + +@setfilename ../../info/mairix-el +@settitle Emacs Interface for Mairix + +@documentencoding ISO-8859-1 + +@copying +Copyright @copyright{} 2008 Free Software Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 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''. + +(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and +modify this GNU manual. Buying copies from the FSF supports it in +developing GNU and promoting software freedom.'' +@end quotation +@end copying + +@dircategory Emacs +@direntry +* mairix.el: (mairix-el). Mairix interface for Emacs. +@end direntry + +@titlepage +@title mairix.el - Mairix interface for Emacs + +@author David Engster +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + + +@node Top +@top mairix.el - Mairix interface for Emacs + +Mairix is a tool for indexing and searching words in locally stored +mail. It was written by Richard Curnow and is licensed under the +GPL. + +@code{mairix.el} is an interface to the mairix search engine. It allows you to +call mairix with a search term, easily create searches based on the +currently displayed mail, save regularly used searches in your +@file{.emacs} for future use and lets you call mairix for updating the +database. + +@menu +* About mairix and mairix.el:: About the mairix search engine and mairix.el +* Configuring mairix:: How to configure mairix +* Setting up mairix.el:: Set up mairix.el +* Using mairix.el:: List of interactive functions +* Extending mairix.el:: Support your favorite mail reader! +@end menu + +@node About mairix and mairix.el +@chapter About mairix and mairix.el + +Mairix is a tool for indexing and searching words in locally stored +mail. It was written by Richard Curnow and is licensed under the +GPL. Mairix comes with most popular GNU/Linux distributions, but it also +runs under Windows (with cygwin), Mac OS X and Solaris. The homepage can +be found at +@uref{http://www.rpcurnow.force9.co.uk/mairix/index.html} + +Though mairix might not be as flexible as other search tools like +swish++ or namazu, it has the prime advantage of being incredibly fast. +On current systems, it can easily search through headers and message +bodies of thousands and thousands of mails in well under a second. +Building the database necessary for searching might take a minute or +two, but only has to be done once fully. Afterwards, the updates are +done incrementally and therefore are really fast, too. Additionally, +mairix is very easy to set up. + +Mairix presents the search results by either populating a @emph{virtual} +maildir/MH folder with symlinks which point to the ``real'' message +files, or if mbox is used, it creates a new mbox file which contains +copies of the found messages. + +@code{mairix.el} is an interface to the mairix search engine. It allows +you to call mairix with a search term, easily create searches based on +the currently displayed mail, save regularly used searches in your +@file{.emacs} for future use and lets you call mairix for updating the +database. It also lets you easily create search queries using graphical +widgets, similar to a customization buffer. + +Currently, @code{mairix.el} is only tested with mbox output together +with RMail, Gnus, or VM as the Emacs mail program. However, it should +also work with Maildir or MH, and it should be very easy to integrate +other Emacs mail programs into @code{mairix.el} +(@pxref{Extending mairix.el}). + +If you use Gnus with maildir or MH, you should really use the native +Gnus back end @code{nnmairix} instead, since it is more tightly +integrated into Gnus and has more features. + +@node Configuring mairix +@chapter Configuring mairix + +Setting up mairix is easy: simply create a @file{.mairixrc} file with +(at least) the following entries: + +@example +# Your mail base folder +base=~/Mail +@end example + +This is the base folder for your mails. All the following directories, +except the one for the database, are relative to this base folder. + +@example +mbox = ... your mbox files which should be indexed ... +maildir= ... your maildir folders which should be indexed ... +mh= ... your nnml/mh folders which should be indexed ... +@end example + +Specify all your maildir/nnml folders and mbox files (relative to the +base directory!) you want to index with mairix. Use colons to separate +different files. See the man-page for @code{mairixrc} for details. + +@example +mformat = mbox +database = ... location of database file ... +@end example + +This chooses @code{mbox} as the output format for the mairix search +results. Currently, this is the supported format by mairix.el, but +technically it should be possible to also use maildir or mh; it's just +not tested (yet). + +You should make sure that you don't accidentally index the search +results produced by mairix. This can be done by pointing +`mairix-file-path' to a directory which is surely not indexed by mairix. +Another possibility is to use something like + +@example +omit = mairix* +@end example + +in the @file{.mairixrc} file, and prefix every search file you use with +``mairix''. + +@example +database = /home/user/.mairixdatabase +@end example + +This specifies the name of the database file. Note that this is not +relative to the @code{base} folder. + +See the man page for @code{mairixrc} for details and further options, +especially regarding wildcard usage, which may be a little different +than you are used to. + +Now simply call @code{mairix} to create the index for the first time. +Note that this may take a few minutes, but every following index will do +the updates incrementally and hence is very fast. + +@node Setting up mairix.el +@chapter Setting up mairix.el + +First, put @code{mairix.el} in your Emacs search path and put +@code{(require 'mairix)} into your @file{.emacs} file. Then, use +@kbd{M-x customize-group mairix RET} to set your preferences for +mairix.el. The most important items are @emph{Mairix File Path}, +@emph{Mairix Search File} and @emph{Mairix Mail Program}. The latter +specifies which mail program should be used to display the mairix search +results. Currently, RMail, Gnus with mbox files, and VM are supported. +If you use Gnus with maildir or mh, use the native Gnus back end +nnmairix instead. + +If you use another Emacs mail program which is not yet supported by +mairix.el, it is pretty easy to integrate it. @xref{Extending +mairix.el}, on how to integrate it into mairix.el. + +Now you should be ready to go. @xref{Using mairix.el}, for the available +commands. + +@node Using mairix.el +@chapter Using mairix.el + +There are currently no default key bindings for mairix.el, since those +should depend on the used mail program and I personally do not use +RMail, so I wouldn't know which key bindings are reasonable. I hope some +day this will change and @code{mairix.el} will come with some good +key bindings for the different mail programs. Feel free to send me your +suggestions. Until then, define some bindings yourself. Here's a quick +and dirty solution with global key definitions I currently use, which +might or might not collide with some other modes. Simply include them +in your @file{.emacs} and adapt to your needs: + +@lisp +(global-set-key (kbd "C-c C-o m") 'mairix-search) +(global-set-key (kbd "C-c C-o w") 'mairix-widget-search) +(global-set-key (kbd "C-c C-o u") 'mairix-update-database) +(global-set-key (kbd "C-c C-o f") 'mairix-search-from-this-article) +(global-set-key (kbd "C-c C-o t") 'mairix-search-thread-this-article) +(global-set-key (kbd "C-c C-o b") 'mairix-widget-search-based-on-article) +(global-set-key (kbd "C-c C-o s") 'mairix-save-search) +(global-set-key (kbd "C-c C-o i") 'mairix-use-saved-search) +(global-set-key (kbd "C-c C-o e") 'mairix-edit-saved-searches) +@end lisp + +Here's a description of the available interactive functions: + +@table @code + +@item mairix-search +@kindex M-x mairix-search +@findex mairix-search +@vindex mairix-search-file +@vindex mairix-file-path +@vindex mairix-command +@vindex mairix-search-options +Call mairix with a search query. You will also be asked if you want to +include whole threads. The results are saved by mairix in the default +mail file, which is set through the variable `mairix-search-file', which +again is prefixed by `mairix-file-path'. The results will then be +displayed with the chosen mail program. The command used to call mairix +is specified by the variable `mairix-command', together with the options +`mairix-search-options'. The latter has the default ``-F'' for making +searching faster. + +@item mairix-widget-search +@kindex M-x mairix-widget-search +@findex mairix-widget-search +@vindex mairix-widget-fields-list +Creates a mairix query using graphical widgets. Very handy if you're +not (yet) familiar with the mairix search syntax. Just call it to see +how it works. You can then directly call mairix with the search term or +save it for future use. Since mairix allows almost arbitrary +combinations of search commands (like ``tc'' for ``to or cc''), you +might want to include some other fields. This can be easily done by +modifying `mairix-widget-fields-list'. + +@item mairix-widget-search-based-on-article +@kindex M-x mairix-widget-search-based-on-article +@findex mairix-widget-search-based-on-article +Create a mairix query using graphical widgets, but based on the +currently displayed article, i.e. the available fields will be filled +with the current header values. + +@item mairix-search-from-this-article +@kindex M-x mairix-search-from-this-article +@findex mairix-search-from-this-article +Search messages from sender of the current article. This is effectively +a shortcut for calling @code{mairix-search} with @code{f:current_from}. +If used with a prefix, include whole threads of the found messages. + +@item mairix-search-thread-this-article +@kindex M-x mairix-search-thread-this-article +@findex mairix-search-thread-this-article +Search thread for the current article. This is effectively a shortcut +for calling @code{mairix-search} with @code{m:msgid} of the current article and +enabled threads. + +@item mairix-save-search +@kindex M-x mairix-save-search +@findex mairix-save-search +Save the last search for future use. You will have to specify a name +for the search and will then be asked if you want to save your saved +searches in your @file{.emacs}. If you answer with yes, the variable +@code{mairix-saved-searches} will be saved in the customize section of +your @file{.emacs}. You can also do this later by using +`mairix-edit-saved-searches'. + +@item mairix-use-saved-search +@kindex M-x mairix-use-saved-search +@findex mairix-use-saved-search +Call mairix with a previously saved search. You will be asked for the +name of the saved search (use @kbd{TAB} for completion). + +@item mairix-edit-saved-searches +@kindex M-x mairix-edit-saved-searches +@findex mairix-edit-saved-searches +Edit your current mairix searches. This is a simple major mode for +editing the contents of the variable @code{mairix-saved-searches}. You +can edit and delete searches and save them in your @file{.emacs}. You +can also use this mode to call mairix with one of the saved searches. +Additionally, you can specify a file name for mairix to use for a +certain search instead of the default one. This is useful if you want +to open different searches at the same time, or if you want to regularly +access certain searches without the need to call mairix. + +@item mairix-edit-saved-searches-customize +@kindex M-x mairix-edit-saved-searches-customize +@findex mairix-edit-saved-searches-customize +Edit the variable @code{mairix-saved-searches} in a normal customization +buffer. This function exists more or less for historic reasons, but +maybe you like it. + +@item mairix-update-database +@kindex M-x mairix-update-database +@findex mairix-update-database +@vindex mairix-update-options +@vindex mairix-synchronous-update +Call mairix to update the database. Mairix will be called with the +options `mairix-update-options'; the default is ``-F'' and ``-Q'' to +make updates as fast as possible. Note that by using these options, +absolutely no integrity checking is done. If your database somehow gets +corrupted, simply delete it and update. If `mairix-synchronous-update' +is nil (the default), mairix will be called in a subprocess so Emacs +will still be usable while the update is done. + +@end table + + +@node Extending mairix.el +@chapter Extending mairix.el + +Your favorite Emacs mail program is not supported? Shame on me. But +it is really easy to integrate other mail programs into mairix.el. Just +do the following: + +@table @strong +@item Write a display function +Write a function that displays the mairix search results. This function +will be called from @code{mairix.el} with the mail file/folder as the +single argument. For example, the function @code{mairix-rmail-display} +is currently used for RMail and @code{mairix-gnus-ephemeral-nndoc} is +used for Gnus. + +@item Write a get-header function +Write a function that retrieves a header from the currently active mail. +The single argument for this function is a string with the header name. +For examples, see @code{mairix-rmail-fetch-field} and +@code{mairix-gnus-fetch-field} for RMail and Gnus, respectively. + +@item Integrate the functions into mairix.el +Add your mail program to the defcustom of @code{mairix-mail-program}. +Then add the functions to @code{mairix-display-functions} and +@code{mairix-get-mail-header-functions}. + +@item Let me know... +...so that I can eventually integrate it into future versions of mairix.el. +@end table + +And that's it! + + + +@bye