annotate lisp/mh-e/mh-search.el @ 68228:badae83666f6

(buffer-menu-buffer) <defface>: Renamed from Buffer-menu-buffer. Doc fix. (Buffer-menu-buffer): Face alias to buffer-menu-buffer.
author Juri Linkov <juri@jurta.org>
date Tue, 17 Jan 2006 02:10:12 +0000
parents 0c77c0b9a620
children 37d03b3298bf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
1 ;;; mh-search --- MH-E search
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
2
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
3 ;; Copyright (C) 1993, 1995,
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
4 ;; 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
5
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
6 ;; Author: Indexed search by Satyaki Das <satyaki@theforce.stanford.edu>
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
7 ;; Maintainer: Bill Wohler <wohler@newt.com>
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
8 ;; Keywords: mail
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
9 ;; See: mh-e.el
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
10
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
12
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
13 ;; GNU Emacs is free software; you can redistribute it and/or modify
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
15 ;; the Free Software Foundation; either version 2, or (at your option)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
16 ;; any later version.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
17
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
21 ;; GNU General Public License for more details.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
22
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
24 ;; along with GNU Emacs; see the file COPYING. If not, write to the
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
25 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
26 ;; Boston, MA 02110-1301, USA.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
27
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
28 ;;; Commentary:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
29
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
30 ;; (1) The following search engines are supported:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
31 ;; swish++
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
32 ;; swish-e
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
33 ;; mairix
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
34 ;; namazu
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
35 ;; pick
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
36 ;; grep
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
37 ;;
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
38 ;; (2) To use this package, you first have to build an index. Please
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
39 ;; read the documentation for `mh-search' to get started. That
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
40 ;; documentation will direct you to the specific instructions for
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
41 ;; your particular searcher.
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
42
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
43 ;;; Change Log:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
44
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
45 ;;; Code:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
46
68199
5012e59a73c7 * mh-comp.el (mh-pgp-support-flag): Move here from mh-utils.el; needed
Bill Wohler <wohler@newt.com>
parents: 68192
diff changeset
47 ;;(message "> mh-search")
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
48 (eval-when-compile (require 'mh-acros))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
49 (mh-require-cl)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
50
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
51 (require 'gnus-util)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
52 (require 'mh-buffers)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
53 (require 'mh-e)
68199
5012e59a73c7 * mh-comp.el (mh-pgp-support-flag): Move here from mh-utils.el; needed
Bill Wohler <wohler@newt.com>
parents: 68192
diff changeset
54 ;;(message "< mh-search")
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
55
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
56 (defvar mh-searcher nil
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
57 "Cached value of chosen search program.")
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
58
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
59 (defvar mh-search-function nil
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
60 "Function which executes the search program.")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
61
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
62 (defvar mh-search-next-result-function nil
68188
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
63 "Function to parse the next line of output.
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
64 Expected to return a list of three strings: name of the folder,
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
65 message number, and optionally the match.")
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
66
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
67 (defvar mh-search-regexp-builder nil
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
68 "Function used to construct search regexp.")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
69
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
70 (defvar mh-index-folder "+mhe-index"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
71 "Folder that contains the folders resulting from the index searches.")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
72
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
73 (defvar mh-flists-results-folder "sequence"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
74 "Subfolder for `mh-index-folder' where flists output is placed.")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
75
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
76 (defvar mh-flists-sequence)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
77
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
78 (defvar mh-flists-called-flag nil)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
79
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
80
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
81
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
82 ;;; MH-Search mode
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
83
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
84 ;;;###mh-autoload
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
85 (defun* mh-search (folder search-regexp
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
86 &optional redo-search-flag window-config)
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
87 "Search your MH mail.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
88
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
89 This command helps you find messages in your entire corpus of
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
90 mail. You can search for messages to or from a particular person
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
91 or about a particular subject. In fact, you can also search for
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
92 messages containing selected strings in any arbitrary header
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
93 field or any string found within the messages.
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
94
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
95 Out of the box, MH-E uses \"pick\" to find messages. With a
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
96 little extra effort, you can set an indexing program which
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
97 rewards you with extremely quick results. The drawback is that
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
98 sometimes the index does not contain the words you're looking
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
99 for. You can still use \"pick\" in these situations.
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
100
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
101 You are prompted for the FOLDER to search. This can be \"all\" to
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
102 search all folders. Note that the search works recursively on the
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
103 listed folder.
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
104
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
105 Next, an MH-Search buffer appears where you can enter search
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
106 criteria SEARCH-REGEXP.
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
107
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
108 From:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
109 To:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
110 Cc:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
111 Date:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
112 Subject:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
113 --------
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
114
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
115 Edit this template by entering your search criteria in an
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
116 appropriate header field that is already there, or create a new
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
117 field yourself. If the string you're looking for could be
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
118 anywhere in a message, then place the string underneath the row
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
119 of dashes.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
120
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
121 As an example, let's say that we want to find messages from
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
122 Ginnean about horseback riding in the Kosciusko National
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
123 Park (Australia) during January, 1994. Normally we would start
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
124 with a broad search and narrow it down if necessary to produce a
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
125 manageable amount of data, but we'll cut to the chase and create
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
126 a fairly restrictive set of criteria as follows:\\<mh-search-mode-map>
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
127
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
128 From: ginnean
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
129 To:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
130 Cc:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
131 Date: Jan 1994
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
132 Subject:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
133 --------
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
134 horse
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
135 kosciusko
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
136
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
137 As with MH-Letter mode, MH-Search provides commands like
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
138 \\[mh-to-field] to help you fill in the blanks.\\<mh-folder-mode-map>
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
139
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
140 If you find that you do the same thing over and over when editing
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
141 the search template, you may wish to bind some shortcuts to keys.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
142 This can be done with the variable `mh-search-mode-hook', which is
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
143 called when \\[mh-search] is run on a new pattern.\\<mh-search-mode-map>
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
144
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
145 To perform the search, type \\[mh-index-do-search].
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
146
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
147 Sometimes you're searching for text that is either not indexed,
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
148 or hasn't been indexed yet. In this case you can override the
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
149 default method with the pick method by running the command
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
150 \\[mh-pick-do-search].
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
151
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
152 The messages that are found are put in a temporary sub-folder of
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
153 \"+mhe-index\" and are displayed in an MH-Folder buffer. This
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
154 buffer is special because it displays messages from multiple
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
155 folders; each set of messages from a given folder has a heading
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
156 with the folder name.\\<mh-folder-mode-map>
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
157
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
158 The appearance of the heading can be modified by customizing the
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
159 face `mh-search-folder'. You can jump back and forth between the
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
160 headings using the commands \\[mh-index-next-folder] and
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
161 \\[mh-index-previous-folder].
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
162
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
163 In addition, the command \\[mh-index-visit-folder] can be used to
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
164 visit the folder of the message at point. Initially, only the
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
165 messages that matched the search criteria are displayed in the
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
166 folder. While the temporary buffer has its own set of message
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
167 numbers, the actual messages numbers are shown in the visited
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
168 folder. Thus, the command \\[mh-index-visit-folder] is useful to
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
169 find the actual message number of an interesting message, or to
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
170 view surrounding messages with the command \\[mh-rescan-folder].
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
171
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
172 Because this folder is temporary, you'll probably get in the
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
173 habit of killing it when you're done with \\[mh-kill-folder].
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
174
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
175 You can regenerate the results by running this command with a
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
176 prefix argument REDO-SEARCH-FLAG.
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
177
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
178 Note: This command uses an \"X-MHE-Checksum:\" header field to
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
179 cache the MD5 checksum of a message. This means that if an
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
180 incoming message already contains an \"X-MHE-Checksum:\" field,
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
181 that message might not be found by this command. The following
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
182 \"procmail\" recipe avoids this problem by renaming the existing
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
183 header field:
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
184
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
185 :0 wf
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
186 | formail -R \"X-MHE-Checksum\" \"X-Old-MHE-Checksum\"
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
187
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
188 Configuring Indexed Searches
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
189
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
190 The command \\[mh-search] runs the command defined by the option
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
191 `mh-search-program'. The default value is \"Auto-detect\" which
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
192 means that MH-E will automatically choose one of \"swish++\",
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
193 \"swish-e\", \"mairix\", \"namazu\", \"pick\" and \"grep\" in
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
194 that order. If, for example, you have both \"swish++\" and
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
195 \"mairix\" installed and you want to use \"mairix\", then you can
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
196 set this option to \"mairix\".
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
197
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
198 The documentation for the following commands describe how to set
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
199 up the various indexing programs to use with MH-E.
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
200
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
201 - `mh-swish++-execute-search'
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
202 - `mh-swish-execute-search'
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
203 - `mh-mairix-execute-search'
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
204 - `mh-namazu-execute-search'
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
205 - `mh-pick-execute-search'
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
206 - `mh-grep-execute-search'
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
207
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
208 In a program, if FOLDER is \"+\" or nil, then mail in all folders
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
209 are searched. Optional argument WINDOW-CONFIG stores the window
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
210 configuration that will be restored after the user quits the
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
211 folder containing the index search results."
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
212 (interactive
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
213 (list (progn
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
214 (mh-find-path)
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
215 ;; Yes, we do want to call mh-search-choose every time in case the
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
216 ;; user has switched the searcher manually.
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
217 (unless (mh-search-choose (and current-prefix-arg
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
218 mh-index-previous-search
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
219 (cadr mh-index-previous-search)))
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
220 (error "No search program found"))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
221 (or (and current-prefix-arg mh-index-sequence-search-flag)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
222 (and current-prefix-arg (car mh-index-previous-search))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
223 (mh-prompt-for-folder "Search" "+" nil "all" t)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
224 (or (and current-prefix-arg (caddr mh-index-previous-search))
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
225 mh-search-regexp-builder
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
226 (read-string (format "%s regexp: "
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
227 (upcase-initials (symbol-name mh-searcher)))))
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
228 current-prefix-arg
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
229 (if (and (not (and current-prefix-arg
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
230 (caddr mh-index-previous-search)))
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
231 mh-search-regexp-builder)
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
232 (current-window-configuration)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
233 nil)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
234 ;; Redoing a sequence search?
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
235 (when (and redo-search-flag mh-index-data mh-index-sequence-search-flag
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
236 (not mh-flists-called-flag))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
237 (let ((mh-flists-called-flag t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
238 (apply #'mh-index-sequenced-messages mh-index-previous-search))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
239 (return-from mh-search))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
240 ;; We have fancy query parsing.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
241 (when (symbolp search-regexp)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
242 (mh-search-folder folder window-config)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
243 (return-from mh-search))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
244 ;; Begin search proper.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
245 (mh-checksum-choose)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
246 (let ((result-count 0)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
247 (old-window-config (or window-config mh-previous-window-config))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
248 (previous-search mh-index-previous-search)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
249 (index-folder (format "%s/%s" mh-index-folder
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
250 (mh-index-generate-pretty-name search-regexp))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
251 ;; Create a new folder for the search results or recreate the old one...
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
252 (if (and redo-search-flag mh-index-previous-search)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
253 (let ((buffer-name (buffer-name (current-buffer))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
254 (mh-process-or-undo-commands buffer-name)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
255 (save-excursion (mh-exec-cmd-quiet nil "rmf" buffer-name))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
256 (mh-exec-cmd-quiet nil "folder" "-create" "-fast" buffer-name)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
257 (setq index-folder buffer-name))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
258 (setq index-folder (mh-index-new-folder index-folder search-regexp)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
259
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
260 (let ((folder-path (format "%s%s" mh-user-path (substring folder 1)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
261 (folder-results-map (make-hash-table :test #'equal))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
262 (origin-map (make-hash-table :test #'equal)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
263 ;; Run search program...
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
264 (message "Executing %s... " mh-searcher)
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
265 (funcall mh-search-function folder-path search-regexp)
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
266
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
267 ;; Parse searcher output.
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
268 (message "Processing %s output... " mh-searcher)
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
269 (goto-char (point-min))
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
270 (loop for next-result = (funcall mh-search-next-result-function)
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
271 while next-result
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
272 do (unless (eq next-result 'error)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
273 (unless (gethash (car next-result) folder-results-map)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
274 (setf (gethash (car next-result) folder-results-map)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
275 (make-hash-table :test #'equal)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
276 (setf (gethash (cadr next-result)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
277 (gethash (car next-result) folder-results-map))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
278 t)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
279
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
280 ;; Copy the search results over.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
281 (maphash #'(lambda (folder msgs)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
282 (let ((cur (car (mh-translate-range folder "cur")))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
283 (msgs (sort (loop for msg being the hash-keys of msgs
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
284 collect msg)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
285 #'<)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
286 (mh-exec-cmd "refile" msgs "-src" folder
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
287 "-link" index-folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
288 ;; Restore cur to old value, that refile changed
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
289 (when cur
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
290 (mh-exec-cmd-quiet nil "mark" folder "-add" "-zero"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
291 "-sequence" "cur" (format "%s" cur)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
292 (loop for msg in msgs
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
293 do (incf result-count)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
294 (setf (gethash result-count origin-map)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
295 (cons folder msg)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
296 folder-results-map)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
297
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
298 ;; Vist the results folder.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
299 (mh-visit-folder index-folder () (list folder-results-map origin-map))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
300
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
301 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
302 (forward-line)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
303 (mh-update-sequences)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
304 (mh-recenter nil)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
305
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
306 ;; Update the speedbar, if needed.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
307 (when (mh-speed-flists-active-p)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
308 (mh-speed-flists t mh-current-folder))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
309
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
310 ;; Maintain history.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
311 (when (or (and redo-search-flag previous-search) window-config)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
312 (setq mh-previous-window-config old-window-config))
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
313 (setq mh-index-previous-search (list folder mh-searcher search-regexp))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
314
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
315 ;; Write out data to disk.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
316 (unless mh-flists-called-flag (mh-index-write-data))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
317
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
318 (message "%s found %s matches in %s folders"
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
319 (upcase-initials (symbol-name mh-searcher))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
320 (loop for msg-hash being hash-values of mh-index-data
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
321 sum (hash-table-count msg-hash))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
322 (loop for msg-hash being hash-values of mh-index-data
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
323 count (> (hash-table-count msg-hash) 0))))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
324
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
325 (defun mh-search-folder (folder window-config)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
326 "Search FOLDER for messages matching a pattern.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
327
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
328 In a program, argument WINDOW-CONFIG is the current window
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
329 configuration and is used when the search folder is dismissed."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
330 (interactive (list (mh-prompt-for-folder "Search" mh-current-folder nil nil t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
331 (current-window-configuration)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
332 (let ((pick-folder (if (equal folder "+") mh-current-folder folder)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
333 (switch-to-buffer-other-window "search-pattern")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
334 (if (or (zerop (buffer-size))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
335 (not (y-or-n-p "Reuse pattern? ")))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
336 (mh-make-pick-template)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
337 (message ""))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
338 (mh-make-local-vars 'mh-current-folder folder
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
339 'mh-previous-window-config window-config)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
340 (message "%s" (substitute-command-keys
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
341 (concat "Type \\[mh-index-do-search] to search messages, "
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
342 "\\[mh-pick-do-search] to use pick, "
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
343 "\\[mh-help] for help")))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
344
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
345 (defun mh-make-pick-template ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
346 "Initialize the current buffer with a template for a pick pattern."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
347 (let ((inhibit-read-only t)) (erase-buffer))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
348 (insert "From: \n"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
349 "To: \n"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
350 "Cc: \n"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
351 "Date: \n"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
352 "Subject: \n"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
353 "---------\n")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
354 (mh-search-mode)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
355 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
356 (dotimes (i 5)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
357 (add-text-properties (point) (1+ (point)) '(front-sticky t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
358 (add-text-properties (- (line-end-position) 2) (1- (line-end-position))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
359 '(rear-nonsticky t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
360 (add-text-properties (point) (1- (line-end-position)) '(read-only t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
361 (forward-line))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
362 (add-text-properties (point) (1+ (point)) '(front-sticky t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
363 (add-text-properties (point) (1- (line-end-position)) '(read-only t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
364 (goto-char (point-max)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
365
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
366 ;;;###mh-autoload
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
367 (defvar mh-search-mode-map (make-sparse-keymap)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
368 "Keymap for searching folder.")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
369
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
370 ;;;###mh-autoload
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
371 ;; If this changes, modify mh-search-mode-help-messages accordingly, below.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
372 (gnus-define-keys mh-search-mode-map
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
373 "\C-c?" mh-help
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
374 "\C-c\C-c" mh-index-do-search
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
375 "\C-c\C-p" mh-pick-do-search
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
376 "\C-c\C-f\C-b" mh-to-field
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
377 "\C-c\C-f\C-c" mh-to-field
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
378 "\C-c\C-f\C-d" mh-to-field
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
379 "\C-c\C-f\C-f" mh-to-field
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
380 "\C-c\C-f\C-r" mh-to-field
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
381 "\C-c\C-f\C-s" mh-to-field
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
382 "\C-c\C-f\C-t" mh-to-field
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
383 "\C-c\C-fb" mh-to-field
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
384 "\C-c\C-fc" mh-to-field
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
385 "\C-c\C-fd" mh-to-field
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
386 "\C-c\C-ff" mh-to-field
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
387 "\C-c\C-fr" mh-to-field
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
388 "\C-c\C-fs" mh-to-field
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
389 "\C-c\C-ft" mh-to-field)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
390
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
391 (easy-menu-define
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
392 mh-pick-menu mh-search-mode-map "Menu for MH-E Search"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
393 '("Search"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
394 ["Perform Search" mh-index-do-search t]
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
395 ["Search with pick" mh-pick-do-search t]))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
396
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
397 ;; Group messages logically, more or less.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
398 (defvar mh-search-mode-help-messages
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
399 '((nil
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
400 "Perform search: \\[mh-index-do-search]\n"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
401 "Search with pick: \\[mh-pick-do-search]\n"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
402 "Move to a field by typing C-c C-f C-<field>\n"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
403 "where <field> is the first letter of the desired field\n"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
404 "(except for From: which uses \"m\")."))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
405 "Key binding cheat sheet.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
406
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
407 This is an associative array which is used to show the most common
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
408 commands. The key is a prefix char. The value is one or more strings
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
409 which are concatenated together and displayed in the minibuffer if ?
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
410 is pressed after the prefix character. The special key nil is used to
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
411 display the non-prefixed commands.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
412
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
413 The substitutions described in `substitute-command-keys' are performed
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
414 as well.")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
415
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
416 (put 'mh-search-mode 'mode-class 'special)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
417
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
418 (define-derived-mode mh-search-mode fundamental-mode "MH-Search"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
419 "Mode for creating search templates in MH-E.\\<mh-search-mode-map>
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
420
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
421 Edit this template by entering your search criteria in an
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
422 appropriate header field that is already there, or create a new
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
423 field yourself. If the string you're looking for could be
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
424 anywhere in a message, then place the string underneath the row
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
425 of dashes.
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
426
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
427 To perform the search, type \\[mh-index-do-search].
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
428
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
429 Sometimes you're searching for text that is either not indexed,
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
430 or hasn't been indexed yet. In this case you can override the
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
431 default method with the pick method by running the command
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
432 \\[mh-pick-do-search].
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
433
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
434 The hook `mh-search-mode-hook' is called upon entry to this mode.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
435
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
436 \\{mh-search-mode-map}"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
437
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
438 (make-local-variable 'mh-help-messages)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
439 (easy-menu-add mh-pick-menu)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
440 (setq mh-help-messages mh-search-mode-help-messages))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
441
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
442 ;;;###mh-autoload
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
443 (defun mh-index-do-search (&optional searcher)
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
444 "Find messages using `mh-search-program'.
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
445 If optional argument SEARCHER is present, use it instead of
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
446 `mh-search-program'."
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
447 (interactive)
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
448 (unless (mh-search-choose searcher) (error "No search program found"))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
449 (let* ((regexp-list (mh-pick-parse-search-buffer))
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
450 (pattern (funcall mh-search-regexp-builder regexp-list)))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
451 (if pattern
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
452 (mh-search mh-current-folder pattern nil mh-previous-window-config)
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
453 (error "No search terms"))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
454
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
455 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
456 (defun mh-pick-do-search ()
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
457 "Find messages using \"pick\".
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
458
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
459 Uses the pick method described in `mh-pick-execute-search'."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
460 (interactive)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
461 (mh-index-do-search 'pick))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
462
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
463 (defun mh-pick-parse-search-buffer ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
464 "Parse the search buffer contents.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
465 The function returns a alist. The car of each element is either
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
466 the header name to search in or nil to search the whole message.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
467 The cdr of the element is the pattern to search."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
468 (save-excursion
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
469 (let ((pattern-list ())
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
470 (in-body-flag nil)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
471 start begin)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
472 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
473 (while (not (eobp))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
474 (if (search-forward "--------" (line-end-position) t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
475 (setq in-body-flag t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
476 (beginning-of-line)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
477 (setq begin (point))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
478 (setq start (if in-body-flag
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
479 (point)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
480 (search-forward ":" (line-end-position) t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
481 (point)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
482 (push (cons (and (not in-body-flag)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
483 (intern (downcase
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
484 (buffer-substring-no-properties
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
485 begin (1- start)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
486 (mh-index-parse-search-regexp
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
487 (buffer-substring-no-properties
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
488 start (line-end-position))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
489 pattern-list))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
490 (forward-line))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
491 pattern-list)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
492
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
493 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
494 (defun mh-index-parse-search-regexp (input-string)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
495 "Construct parse tree for INPUT-STRING.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
496 All occurrences of &, |, ! and ~ in INPUT-STRING are replaced by
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
497 AND, OR and NOT as appropriate. Then the resulting string is
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
498 parsed."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
499 (let (input)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
500 (with-temp-buffer
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
501 (insert input-string)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
502 ;; replace tabs
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
503 (mh-replace-string "\t" " ")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
504 ;; synonyms of AND
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
505 (mh-replace-string " AND " " and ")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
506 (mh-replace-string "&" " and ")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
507 (mh-replace-string " -and " " and ")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
508 ;; synonyms of OR
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
509 (mh-replace-string " OR " " or ")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
510 (mh-replace-string "|" " or ")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
511 (mh-replace-string " -or " " or ")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
512 ;; synonyms of NOT
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
513 (mh-replace-string " NOT " " not ")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
514 (mh-replace-string "!" " not ")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
515 (mh-replace-string "~" " not ")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
516 (mh-replace-string " -not " " not ")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
517 ;; synonyms of left brace
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
518 (mh-replace-string "(" " ( ")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
519 (mh-replace-string " -lbrace " " ( ")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
520 ;; synonyms of right brace
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
521 (mh-replace-string ")" " ) ")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
522 (mh-replace-string " -rbrace " " ) ")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
523 ;; get the normalized input
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
524 (setq input (format "( %s )" (buffer-substring (point-min) (point-max)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
525
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
526 (let ((tokens (mh-index-add-implicit-ops (split-string input)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
527 (op-stack ())
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
528 (operand-stack ())
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
529 oper1)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
530 (dolist (token tokens)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
531 (cond ((equal token "(") (push 'paren op-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
532 ((equal token "not") (push 'not op-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
533 ((equal token "or") (push 'or op-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
534 ((equal token "and") (push 'and op-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
535 ((equal token ")")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
536 (multiple-value-setq (op-stack operand-stack)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
537 (mh-index-evaluate op-stack operand-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
538 (when (eq (car op-stack) 'not)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
539 (setq op-stack (cdr op-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
540 (push `(not ,(pop operand-stack)) operand-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
541 (when (eq (car op-stack) 'and)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
542 (setq op-stack (cdr op-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
543 (setq oper1 (pop operand-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
544 (push `(and ,(pop operand-stack) ,oper1) operand-stack)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
545 ((eq (car op-stack) 'not)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
546 (setq op-stack (cdr op-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
547 (push `(not ,token) operand-stack)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
548 (when (eq (car op-stack) 'and)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
549 (setq op-stack (cdr op-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
550 (setq oper1 (pop operand-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
551 (push `(and ,(pop operand-stack) ,oper1) operand-stack)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
552 ((eq (car op-stack) 'and)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
553 (setq op-stack (cdr op-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
554 (push `(and ,(pop operand-stack) ,token) operand-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
555 (t (push token operand-stack))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
556 (prog1 (pop operand-stack)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
557 (when (or op-stack operand-stack)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
558 (error "Invalid regexp: %s" input))))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
559
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
560 (defun mh-index-add-implicit-ops (tokens)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
561 "Add implicit operators in the list TOKENS."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
562 (let ((result ())
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
563 (literal-seen nil)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
564 current)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
565 (while tokens
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
566 (setq current (pop tokens))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
567 (cond ((or (equal current ")") (equal current "and") (equal current "or"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
568 (setq literal-seen nil)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
569 (push current result))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
570 ((and literal-seen
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
571 (push "and" result)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
572 (setq literal-seen nil)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
573 nil))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
574 (t
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
575 (push current result)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
576 (unless (or (equal current "(") (equal current "not"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
577 (setq literal-seen t)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
578 (nreverse result)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
579
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
580 (defun mh-index-evaluate (op-stack operand-stack)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
581 "Read expression till starting paren based on OP-STACK and OPERAND-STACK."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
582 (block mh-index-evaluate
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
583 (let (op oper1)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
584 (while op-stack
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
585 (setq op (pop op-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
586 (cond ((eq op 'paren)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
587 (return-from mh-index-evaluate (values op-stack operand-stack)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
588 ((eq op 'not)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
589 (push `(not ,(pop operand-stack)) operand-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
590 ((or (eq op 'and) (eq op 'or))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
591 (setq oper1 (pop operand-stack))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
592 (push `(,op ,(pop operand-stack) ,oper1) operand-stack))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
593 (error "Ran out of tokens"))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
594
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
595
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
596
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
597 ;;; Sequence browsing
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
598
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
599 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
600 (defun mh-index-new-messages (folders)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
601 "Display unseen messages.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
602
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
603 If you use a program such as \"procmail\" to use \"rcvstore\" to file
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
604 your incoming mail automatically, you can display new, unseen,
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
605 messages using this command. All messages in the \"unseen\"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
606 sequence from the folders in `mh-new-messages-folders' are
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
607 listed.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
608
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
609 With a prefix argument, enter a space-separated list of FOLDERS,
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
610 or nothing to search all folders."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
611 (interactive
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
612 (list (if current-prefix-arg
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
613 (split-string (read-string "Search folder(s) (default all): "))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
614 mh-new-messages-folders)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
615 (mh-index-sequenced-messages folders mh-unseen-seq))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
616
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
617 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
618 (defun mh-index-ticked-messages (folders)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
619 "Display ticked messages.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
620
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
621 All messages in `mh-tick-seq' from the folders in
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
622 `mh-ticked-messages-folders' are listed.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
623
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
624 With a prefix argument, enter a space-separated list of FOLDERS,
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
625 or nothing to search all folders."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
626 (interactive
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
627 (list (if current-prefix-arg
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
628 (split-string (read-string "Search folder(s) (default all): "))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
629 mh-ticked-messages-folders)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
630 (mh-index-sequenced-messages folders mh-tick-seq))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
631
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
632 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
633 (defun mh-index-sequenced-messages (folders sequence)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
634 "Display messages in any sequence.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
635
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
636 All messages from the FOLDERS in `mh-new-messages-folders' in the
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
637 SEQUENCE you provide are listed. With a prefix argument, enter a
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
638 space-separated list of folders at the prompt, or nothing to
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
639 search all folders."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
640 (interactive
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
641 (list (if current-prefix-arg
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
642 (split-string (read-string "Search folder(s) (default all): "))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
643 mh-new-messages-folders)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
644 (mh-read-seq-default "Search" nil)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
645 (unless sequence (setq sequence mh-unseen-seq))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
646 (let* ((mh-flists-search-folders folders)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
647 (mh-flists-sequence sequence)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
648 (mh-flists-called-flag t)
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
649 (mh-searcher 'flists)
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
650 (mh-search-function 'mh-flists-execute)
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
651 (mh-search-next-result-function 'mh-mairix-next-result)
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
652 (mh-mairix-folder mh-user-path)
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
653 (mh-search-regexp-builder nil)
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
654 (new-folder (format "%s/%s/%s" mh-index-folder
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
655 mh-flists-results-folder sequence))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
656 (window-config (if (equal new-folder mh-current-folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
657 mh-previous-window-config
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
658 (current-window-configuration)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
659 (redo-flag nil)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
660 message)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
661 (cond ((buffer-live-p (get-buffer new-folder))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
662 ;; The destination folder is being visited. Trick `mh-search'
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
663 ;; into thinking that the folder resulted from a previous search.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
664 (set-buffer new-folder)
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
665 (setq mh-index-previous-search (list folders mh-searcher sequence))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
666 (setq redo-flag t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
667 ((mh-folder-exists-p new-folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
668 ;; Folder exists but we don't have it open. That means they are
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
669 ;; stale results from a old flists search. Clear it out.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
670 (mh-exec-cmd-quiet nil "rmf" new-folder)))
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
671 (setq message (mh-search "+" mh-flists-results-folder
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
672 redo-flag window-config)
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
673 mh-index-sequence-search-flag t
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
674 mh-index-previous-search (list folders mh-searcher sequence))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
675 (mh-index-write-data)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
676 (when (stringp message) (message "%s" message))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
677
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
678 (defvar mh-flists-search-folders)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
679
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
680 (defun mh-flists-execute (&rest args)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
681 "Execute flists.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
682 Search for messages belonging to `mh-flists-sequence' in the
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
683 folders specified by `mh-flists-search-folders'. If
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
684 `mh-recursive-folders-flag' is t, then the folders are searched
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
685 recursively. All parameters ARGS are ignored."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
686 (set-buffer (get-buffer-create mh-temp-index-buffer))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
687 (erase-buffer)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
688 (unless (executable-find "sh")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
689 (error "Didn't find sh"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
690 (with-temp-buffer
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
691 (let ((seq (symbol-name mh-flists-sequence)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
692 (insert "for folder in `" (expand-file-name "flists" mh-progs) " "
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
693 (cond ((eq mh-flists-search-folders t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
694 (mh-quote-for-shell mh-inbox))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
695 ((eq mh-flists-search-folders nil) "")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
696 ((listp mh-flists-search-folders)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
697 (loop for folder in mh-flists-search-folders
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
698 concat
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
699 (concat " " (mh-quote-for-shell folder)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
700 (if mh-recursive-folders-flag " -recurse" "")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
701 " -sequence " seq " -noshowzero -fast` ; do\n"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
702 (expand-file-name "mhpath" mh-progs) " \"+$folder\" " seq "\n"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
703 "done\n"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
704 (call-process-region
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
705 (point-min) (point-max) "sh" nil (get-buffer mh-temp-index-buffer))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
706
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
707
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
708
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
709 ;;; Folder navigation and utilities
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
710
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
711 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
712 (defun mh-index-group-by-folder ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
713 "Partition the messages based on source folder.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
714 Returns an alist with the the folder names in the car and the cdr
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
715 being the list of messages originally from that folder."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
716 (save-excursion
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
717 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
718 (let ((result-table (make-hash-table :test #'equal)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
719 (loop for msg being hash-keys of mh-index-msg-checksum-map
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
720 do (push msg (gethash (car (gethash
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
721 (gethash msg mh-index-msg-checksum-map)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
722 mh-index-checksum-origin-map))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
723 result-table)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
724 (loop for x being the hash-keys of result-table
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
725 collect (cons x (nreverse (gethash x result-table)))))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
726
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
727 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
728 (defun mh-index-insert-folder-headers ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
729 "Annotate the search results with original folder names."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
730 (let ((cur-msg (mh-get-msg-num nil))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
731 (old-buffer-modified-flag (buffer-modified-p))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
732 (buffer-read-only nil)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
733 current-folder last-folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
734 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
735 (while (not (eobp))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
736 (setq current-folder (car (gethash (gethash (mh-get-msg-num nil)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
737 mh-index-msg-checksum-map)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
738 mh-index-checksum-origin-map)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
739 (when (and current-folder (not (equal current-folder last-folder)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
740 (insert (if last-folder "\n" "") current-folder "\n")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
741 (setq last-folder current-folder))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
742 (forward-line))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
743 (when cur-msg
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
744 (mh-notate-cur)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
745 (mh-goto-msg cur-msg t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
746 (set-buffer-modified-p old-buffer-modified-flag))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
747 (mh-index-create-imenu-index))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
748
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
749 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
750 (defun mh-index-delete-folder-headers ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
751 "Delete the folder headers."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
752 (let ((cur-msg (mh-get-msg-num nil))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
753 (old-buffer-modified-flag (buffer-modified-p))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
754 (buffer-read-only nil))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
755 (while (and (not cur-msg) (not (eobp)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
756 (forward-line)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
757 (setq cur-msg (mh-get-msg-num nil)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
758 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
759 (while (not (eobp))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
760 (if (or (char-equal (char-after) ?+) (char-equal (char-after) 10))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
761 (delete-region (point) (progn (forward-line) (point)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
762 (forward-line)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
763 (when cur-msg (mh-goto-msg cur-msg t t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
764 (set-buffer-modified-p old-buffer-modified-flag)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
765
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
766 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
767 (defun mh-index-create-imenu-index ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
768 "Create alist of folder names and positions in index folder buffers."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
769 (save-excursion
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
770 (setq which-func-mode t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
771 (let ((alist ()))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
772 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
773 (while (re-search-forward "^+" nil t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
774 (save-excursion
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
775 (beginning-of-line)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
776 (push (cons (buffer-substring-no-properties
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
777 (point) (line-end-position))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
778 (set-marker (make-marker) (point)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
779 alist)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
780 (setq imenu--index-alist (nreverse alist)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
781
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
782 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
783 (defun mh-index-next-folder (&optional backward-flag)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
784 "Jump to the next folder marker.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
785
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
786 With non-nil optional argument BACKWARD-FLAG, jump to the previous
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
787 group of results."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
788 (interactive "P")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
789 (if (null mh-index-data)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
790 (message "Only applicable in an MH-E index search buffer")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
791 (let ((point (point)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
792 (forward-line (if backward-flag 0 1))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
793 (cond ((if backward-flag
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
794 (re-search-backward "^+" (point-min) t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
795 (re-search-forward "^+" (point-max) t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
796 (beginning-of-line))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
797 ((and (if backward-flag
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
798 (goto-char (point-max))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
799 (goto-char (point-min)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
800 nil))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
801 ((if backward-flag
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
802 (re-search-backward "^+" (point-min) t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
803 (re-search-forward "^+" (point-max) t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
804 (beginning-of-line))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
805 (t (goto-char point))))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
806
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
807 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
808 (defun mh-index-previous-folder ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
809 "Jump to the previous folder marker."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
810 (interactive)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
811 (mh-index-next-folder t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
812
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
813 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
814 (defun mh-index-visit-folder ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
815 "Visit original folder from where the message at point was found."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
816 (interactive)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
817 (unless mh-index-data
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
818 (error "Not in an index folder"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
819 (let (folder msg)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
820 (save-excursion
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
821 (cond ((and (bolp) (eolp))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
822 (ignore-errors (forward-line -1))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
823 (setq msg (mh-get-msg-num t)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
824 ((equal (char-after (line-beginning-position)) ?+)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
825 (setq folder (buffer-substring-no-properties
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
826 (line-beginning-position) (line-end-position))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
827 (t (setq msg (mh-get-msg-num t)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
828 (when (not folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
829 (setq folder (car (gethash (gethash msg mh-index-msg-checksum-map)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
830 mh-index-checksum-origin-map))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
831 (when (or (not (get-buffer folder))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
832 (y-or-n-p (format "Reuse buffer displaying %s? " folder)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
833 (mh-visit-folder
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
834 folder (loop for x being the hash-keys of (gethash folder mh-index-data)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
835 when (mh-msg-exists-p x folder) collect x)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
836
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
837 ;;;###mh-autoload
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
838 (defun mh-search-p ()
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
839 "Non-nil means that this folder was generated by searching."
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
840 mh-index-data)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
841
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
842 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
843 (defun mh-index-execute-commands ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
844 "Delete/refile the actual messages.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
845 The copies in the searched folder are then deleted/refiled to get
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
846 the desired result. Before deleting the messages we make sure
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
847 that the message being deleted is identical to the one that the
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
848 user has marked in the index buffer."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
849 (save-excursion
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
850 (let ((folders ())
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
851 (mh-speed-flists-inhibit-flag t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
852 (maphash
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
853 (lambda (folder msgs)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
854 (push folder folders)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
855 (if (not (get-buffer folder))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
856 ;; If source folder not open, just delete the messages...
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
857 (apply #'mh-exec-cmd "rmm" folder (mh-coalesce-msg-list msgs))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
858 ;; Otherwise delete the messages in the source buffer...
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
859 (save-excursion
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
860 (set-buffer folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
861 (let ((old-refile-list mh-refile-list)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
862 (old-delete-list mh-delete-list))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
863 (setq mh-refile-list nil
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
864 mh-delete-list msgs)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
865 (unwind-protect (mh-execute-commands)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
866 (setq mh-refile-list
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
867 (mapcar (lambda (x)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
868 (cons (car x)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
869 (loop for y in (cdr x)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
870 unless (memq y msgs) collect y)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
871 old-refile-list)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
872 mh-delete-list
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
873 (loop for x in old-delete-list
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
874 unless (memq x msgs) collect x))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
875 (mh-set-folder-modified-p (mh-outstanding-commands-p))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
876 (when (mh-outstanding-commands-p)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
877 (mh-notate-deleted-and-refiled)))))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
878 (mh-index-matching-source-msgs (append (loop for x in mh-refile-list
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
879 append (cdr x))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
880 mh-delete-list)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
881 t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
882 folders)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
883
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
884
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
885
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
886 ;;; Indexing functions
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
887
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
888 ;; Support different search programs
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
889 (defvar mh-search-choices
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
890 '((swish++
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
891 mh-swish++-binary mh-swish++-execute-search mh-swish++-next-result
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
892 mh-swish++-regexp-builder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
893 (swish
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
894 mh-swish-binary mh-swish-execute-search mh-swish-next-result nil)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
895 (mairix
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
896 mh-mairix-binary mh-mairix-execute-search mh-mairix-next-result
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
897 mh-mairix-regexp-builder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
898 (namazu
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
899 mh-namazu-binary mh-namazu-execute-search mh-namazu-next-result nil)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
900 (pick
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
901 mh-pick-binary mh-pick-execute-search mh-pick-next-result
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
902 mh-pick-regexp-builder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
903 (grep
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
904 mh-grep-binary mh-grep-execute-search mh-grep-next-result nil))
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
905 "List of possible searcher choices.")
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
906
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
907 (defun mh-search-choose (&optional searcher)
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
908 "Choose a searching function.
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
909 The side-effects of this function are that the variables
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
910 `mh-searcher', `mh-search-function', and
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
911 `mh-search-next-result-function' are set according to the first
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
912 searcher in `mh-search-choices' present on the system. If
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
913 optional argument SEARCHER is present, use it instead of
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
914 `mh-search-program'."
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
915 (block nil
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
916 (let ((program-alist (cond (searcher
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
917 (list (assoc searcher mh-search-choices)))
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
918 (mh-search-program
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
919 (list
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
920 (assoc mh-search-program mh-search-choices)))
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
921 (t mh-search-choices))))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
922 (while program-alist
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
923 (let* ((current (pop program-alist))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
924 (executable (symbol-value (cadr current))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
925 (when executable
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
926 (setq mh-searcher (car current))
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
927 (setq mh-search-function (nth 2 current))
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
928 (setq mh-search-next-result-function (nth 3 current))
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
929 (setq mh-search-regexp-builder (nth 4 current))
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
930 (return mh-searcher))))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
931 nil)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
932
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
933 ;;; Swish++ interface
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
934
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
935 (defvar mh-swish++-binary (or (executable-find "search++")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
936 (executable-find "search")))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
937 (defvar mh-swish++-directory ".swish++")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
938 (defvar mh-swish-folder nil)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
939
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
940 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
941 (defun mh-swish++-execute-search (folder-path search-regexp)
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
942 "Execute swish++.
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
943
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
944 In the examples below, replace \"/home/user/Mail\" with the path to
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
945 your MH directory.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
946
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
947 First create the directory \"/home/user/Mail/.swish++\". Then create
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
948 the file \"/home/user/Mail/.swish++/swish++.conf\" with the following
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
949 contents:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
950
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
951 IncludeMeta Bcc Cc Comments Content-Description From Keywords
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
952 IncludeMeta Newsgroups Resent-To Subject To
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
953 IncludeMeta Message-Id References In-Reply-To
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
954 IncludeFile Mail *
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
955 IndexFile /home/user/Mail/.swish++/swish++.index
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
956
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
957 Use the following command line to generate the swish index. Run
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
958 this daily from cron:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
959
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
960 find /home/user/Mail -path /home/user/Mail/mhe-index -prune \\
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
961 -o -path /home/user/Mail/.swish++ -prune \\
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
962 -o -name \"[0-9]*\" -print \\
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
963 | index -c /home/user/Mail/.swish++/swish++.conf -
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
964
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
965 This command does not index the folders that hold the results of your
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
966 searches in \"+mhe-index\" since they tend to be ephemeral and the
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
967 original messages are indexed anyway.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
968
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
969 On some systems (Debian GNU/Linux, for example), use \"index++\"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
970 instead of \"index\".
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
971
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
972 In a program, FOLDER-PATH is the directory in which SEARCH-REGEXP is
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
973 used to search."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
974 (set-buffer (get-buffer-create mh-temp-index-buffer))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
975 (erase-buffer)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
976 (unless mh-swish++-binary
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
977 (error "Set `mh-swish++-binary' appropriately"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
978 (call-process mh-swish++-binary nil '(t nil) nil
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
979 "-m" "10000"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
980 (format "-i%s%s/swish++.index"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
981 mh-user-path mh-swish++-directory)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
982 search-regexp)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
983 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
984 (setq mh-swish-folder
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
985 (let ((last-char (substring folder-path (1- (length folder-path)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
986 (if (equal last-char "/")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
987 folder-path
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
988 (format "%s/" folder-path)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
989
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
990 (defalias 'mh-swish++-next-result 'mh-swish-next-result)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
991
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
992 (defun mh-swish++-regexp-builder (regexp-list)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
993 "Generate query for swish++.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
994 REGEXP-LIST is an alist of fields and values."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
995 (let ((regexp ""))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
996 (dolist (elem regexp-list)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
997 (when (cdr elem)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
998 (setq regexp (concat regexp " and "
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
999 (if (car elem) "(" "")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1000 (if (car elem) (symbol-name (car elem)) "")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1001 (if (car elem) " = " "")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1002 (mh-swish++-print-regexp (cdr elem))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1003 (if (car elem) ")" "")))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1004 (substring regexp 4)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1005
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1006 (defun mh-swish++-print-regexp (expr)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1007 "Return infix expression corresponding to EXPR."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1008 (cond ((atom expr) (format "%s" expr))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1009 ((eq (car expr) 'not)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1010 (format "(not %s)" (mh-swish++-print-regexp (cadr expr))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1011 (t (format "(%s %s %s)" (mh-swish++-print-regexp (cadr expr))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1012 (symbol-name (car expr))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1013 (mh-swish++-print-regexp (caddr expr))))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1014
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1015 ;;; Swish interface
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1016
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1017 (defvar mh-swish-binary (executable-find "swish-e"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1018 (defvar mh-swish-directory ".swish")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1019
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1020 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1021 (defun mh-swish-execute-search (folder-path search-regexp)
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
1022 "Execute swish-e.
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1023
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1024 In the examples below, replace \"/home/user/Mail\" with the path
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1025 to your MH directory.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1026
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1027 First create the directory \"/home/user/Mail/.swish\". Then
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1028 create the file \"/home/user/Mail/.swish/config\" with the
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1029 following contents:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1030
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1031 DefaultContents TXT*
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1032 IndexDir /home/user/Mail
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1033 IndexFile /home/user/Mail/.swish/index
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1034 IndexName \"Mail Index\"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1035 IndexDescription \"Mail Index\"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1036 IndexPointer \"http://nowhere\"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1037 IndexAdmin \"nobody\"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1038 #MetaNames automatic
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1039 IndexReport 3
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1040 FollowSymLinks no
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1041 UseStemming no
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1042 IgnoreTotalWordCountWhenRanking yes
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1043 WordCharacters abcdefghijklmnopqrstuvwxyz0123456789-
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1044 BeginCharacters abcdefghijklmnopqrstuvwxyz
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1045 EndCharacters abcdefghijklmnopqrstuvwxyz0123456789
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1046 IgnoreLimit 50 1000
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1047 IndexComments 0
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1048 FileRules filename contains \\D
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1049 FileRules pathname contains /home/user/Mail/.swish
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1050 FileRules pathname contains /home/user/Mail/mhe-index
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1051
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1052 This configuration does not index the folders that hold the
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1053 results of your searches in \"+mhe-index\" since they tend to be
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1054 ephemeral and the original messages are indexed anyway.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1055
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1056 If there are any directories you would like to ignore, append
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1057 lines like the following to \"config\":
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1058
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1059 FileRules pathname contains /home/user/Mail/scripts
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1060
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1061 Use the following command line to generate the swish index. Run
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1062 this daily from cron:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1063
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1064 swish-e -c /home/user/Mail/.swish/config
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1065
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1066 In a program, FOLDER-PATH is the directory in which SEARCH-REGEXP
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1067 is used to search."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1068 (set-buffer (get-buffer-create mh-temp-index-buffer))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1069 (erase-buffer)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1070 (unless mh-swish-binary
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1071 (error "Set `mh-swish-binary' appropriately"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1072 (call-process mh-swish-binary nil '(t nil) nil
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1073 "-w" search-regexp
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1074 "-f" (format "%s%s/index" mh-user-path mh-swish-directory))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1075 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1076 (setq mh-swish-folder
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1077 (let ((last-char (substring folder-path (1- (length folder-path)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1078 (if (equal last-char "/")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1079 folder-path
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1080 (format "%s/" folder-path)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1081
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1082 (defun mh-swish-next-result ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1083 "Get the next result from swish output."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1084 (prog1
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1085 (block nil
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1086 (when (or (eobp) (equal (char-after (point)) ?.))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1087 (return nil))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1088 (when (equal (char-after (point)) ?#)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1089 (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1090 (let* ((start (search-forward " " (line-end-position) t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1091 (end (search-forward " " (line-end-position) t)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1092 (unless (and start end)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1093 (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1094 (setq end (1- end))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1095 (unless (file-exists-p (buffer-substring-no-properties start end))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1096 (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1097 (unless (search-backward "/" start t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1098 (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1099 (list (let* ((s (buffer-substring-no-properties start (1+ (point)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1100 (unless (string-match mh-swish-folder s)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1101 (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1102 (if (and (string-match mh-user-path s)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1103 (< (match-end 0) (1- (length s))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1104 (format "+%s"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1105 (substring s (match-end 0) (1- (length s))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1106 (return 'error)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1107 (let* ((s (buffer-substring-no-properties (1+ (point)) end))
68212
0c77c0b9a620 * mh-comp.el (mh-show-buffer-message-number): Replace (car
Bill Wohler <wohler@newt.com>
parents: 68199
diff changeset
1108 (n (ignore-errors (string-to-number s))))
0c77c0b9a620 * mh-comp.el (mh-show-buffer-message-number): Replace (car
Bill Wohler <wohler@newt.com>
parents: 68199
diff changeset
1109 (if n n (return 'error)))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1110 nil)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1111 (forward-line)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1112
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1113 ;;; Mairix interface
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1114
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1115 (defvar mh-mairix-binary (executable-find "mairix"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1116 (defvar mh-mairix-directory ".mairix")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1117 (defvar mh-mairix-folder nil)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1118
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1119 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1120 (defun mh-mairix-execute-search (folder-path search-regexp-list)
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
1121 "Execute mairix.
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1122
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1123 In the examples below, replace \"/home/user/Mail\" with the path
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1124 to your MH directory.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1125
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1126 First create the directory \"/home/user/Mail/.mairix\". Then
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1127 create the file \"/home/user/Mail/.mairix/config\" with the
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1128 following contents:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1129
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1130 base=/home/user/Mail
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1131
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1132 # List of folders that should be indexed. 3 dots at the end means there
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1133 # are subfolders within the folder
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1134 mh=archive...:inbox:drafts:news:sent:trash
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1135
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1136 vfolder_format=raw
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1137 database=/home/user/Mail/mairix/database
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1138
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1139 Use the following command line to generate the mairix index. Run
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1140 this daily from cron:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1141
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1142 mairix -f /home/user/Mail/.mairix/config
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1143
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1144 In a program, FOLDER-PATH is the directory in which
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1145 SEARCH-REGEXP-LIST is used to search."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1146 (set-buffer (get-buffer-create mh-temp-index-buffer))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1147 (erase-buffer)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1148 (unless mh-mairix-binary
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1149 (error "Set `mh-mairix-binary' appropriately"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1150 (apply #'call-process mh-mairix-binary nil '(t nil) nil
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1151 "-r" "-f" (format "%s%s/config" mh-user-path mh-mairix-directory)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1152 search-regexp-list)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1153 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1154 (setq mh-mairix-folder
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1155 (let ((last-char (substring folder-path (1- (length folder-path)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1156 (if (equal last-char "/")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1157 folder-path
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1158 (format "%s/" folder-path)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1159
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1160 (defun mh-mairix-next-result ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1161 "Return next result from mairix output."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1162 (prog1
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1163 (block nil
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1164 (when (or (eobp) (and (bolp) (eolp)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1165 (return nil))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1166 (unless (eq (char-after) ?/)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1167 (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1168 (let ((start (point))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1169 end msg-start)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1170 (setq end (line-end-position))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1171 (unless (search-forward mh-mairix-folder end t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1172 (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1173 (goto-char (match-beginning 0))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1174 (unless (equal (point) start)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1175 (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1176 (goto-char end)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1177 (unless (search-backward "/" start t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1178 (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1179 (setq msg-start (1+ (point)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1180 (goto-char start)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1181 (unless (search-forward mh-user-path end t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1182 (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1183 (list (format "+%s" (buffer-substring-no-properties
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1184 (point) (1- msg-start)))
68212
0c77c0b9a620 * mh-comp.el (mh-show-buffer-message-number): Replace (car
Bill Wohler <wohler@newt.com>
parents: 68199
diff changeset
1185 (string-to-number
0c77c0b9a620 * mh-comp.el (mh-show-buffer-message-number): Replace (car
Bill Wohler <wohler@newt.com>
parents: 68199
diff changeset
1186 (buffer-substring-no-properties msg-start end))
68188
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1187 nil)))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1188 (forward-line)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1189
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1190 (defun mh-mairix-regexp-builder (regexp-list)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1191 "Generate query for mairix.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1192 REGEXP-LIST is an alist of fields and values."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1193 (let ((result ()))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1194 (dolist (pair regexp-list)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1195 (when (cdr pair)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1196 (push
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1197 (concat
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1198 (cond ((eq (car pair) 'to) "t:")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1199 ((eq (car pair) 'from) "f:")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1200 ((eq (car pair) 'cc) "c:")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1201 ((eq (car pair) 'subject) "s:")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1202 ((eq (car pair) 'date) "d:")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1203 (t ""))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1204 (let ((sop (cdr (mh-mairix-convert-to-sop* (cdr pair))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1205 (final ""))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1206 (dolist (conjunct sop)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1207 (let ((expr-list (cdr conjunct))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1208 (expr-string ""))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1209 (dolist (e expr-list)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1210 (setq expr-string (concat expr-string ","
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1211 (if (atom e) "" "~")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1212 (if (atom e) e (cadr e)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1213 (setq final (concat final "/" (substring expr-string 1)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1214 (substring final 1)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1215 result)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1216 result))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1217
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1218 (defun mh-mairix-convert-to-sop* (expr)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1219 "Convert EXPR to sum of product form."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1220 (cond ((atom expr) `(or (and ,expr)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1221 ((eq (car expr) 'or)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1222 (cons 'or
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1223 (loop for e in (mapcar #'mh-mairix-convert-to-sop* (cdr expr))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1224 append (cdr e))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1225 ((eq (car expr) 'and)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1226 (let ((conjuncts (mapcar #'mh-mairix-convert-to-sop* (cdr expr)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1227 result next-factor)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1228 (setq result (pop conjuncts))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1229 (while conjuncts
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1230 (setq next-factor (pop conjuncts))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1231 (setq result (let ((res ()))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1232 (dolist (t1 (cdr result))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1233 (dolist (t2 (cdr next-factor))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1234 (push `(and ,@(cdr t1) ,@(cdr t2)) res)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1235 (cons 'or res))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1236 result))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1237 ((atom (cadr expr)) `(or (and ,expr)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1238 ((eq (caadr expr) 'not) (mh-mairix-convert-to-sop* (cadadr expr)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1239 ((eq (caadr expr) 'and) (mh-mairix-convert-to-sop*
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1240 `(or ,@(mapcar #'(lambda (x) `(not ,x))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1241 (cdadr expr)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1242 ((eq (caadr expr) 'or) (mh-mairix-convert-to-sop*
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1243 `(and ,@(mapcar #'(lambda (x) `(not ,x))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1244 (cdadr expr)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1245 (t (error "Unreachable: %s" expr))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1246
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1247 ;;; Namazu interface
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1248
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1249 (defvar mh-namazu-binary (executable-find "namazu"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1250 (defvar mh-namazu-directory ".namazu")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1251 (defvar mh-namazu-folder nil)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1252
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1253 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1254 (defun mh-namazu-execute-search (folder-path search-regexp)
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
1255 "Execute namazu.
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1256
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1257 In the examples below, replace \"/home/user/Mail\" with the path to
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1258 your MH directory.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1259
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1260 First create the directory \"/home/user/Mail/.namazu\". Then create
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1261 the file \"/home/user/Mail/.namazu/mknmzrc\" with the following
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1262 contents:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1263
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1264 package conf; # Don't remove this line!
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1265 $ADDRESS = 'user@localhost';
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1266 $ALLOW_FILE = \"[0-9]*\";
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1267 $EXCLUDE_PATH = \"^/home/user/Mail/(mhe-index|spam)\";
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1268
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1269 This configuration does not index the folders that hold the results of
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1270 your searches in \"+mhe-index\" since they tend to be ephemeral and
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1271 the original messages are indexed anyway.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1272
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1273 Use the following command line to generate the namazu index. Run this
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1274 daily from cron:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1275
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1276 mknmz -f /home/user/Mail/.namazu/mknmzrc -O /home/user/Mail/.namazu \\
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1277 /home/user/Mail
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1278
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1279 In a program, FOLDER-PATH is the directory in which SEARCH-REGEXP
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1280 is used to search."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1281 (let ((namazu-index-directory
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1282 (format "%s%s" mh-user-path mh-namazu-directory)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1283 (unless (file-exists-p namazu-index-directory)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1284 (error "Namazu directory %s not present" namazu-index-directory))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1285 (unless (executable-find mh-namazu-binary)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1286 (error "Set `mh-namazu-binary' appropriately"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1287 (set-buffer (get-buffer-create mh-temp-index-buffer))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1288 (erase-buffer)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1289 (call-process mh-namazu-binary nil '(t nil) nil
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1290 "-alR" search-regexp namazu-index-directory)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1291 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1292 (setq mh-namazu-folder
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1293 (let ((last (substring folder-path (1- (length folder-path)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1294 (if (equal last "/")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1295 folder-path
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1296 (format "%s/" folder-path))))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1297
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1298 (defun mh-namazu-next-result ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1299 "Get the next result from namazu output."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1300 (prog1
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1301 (block nil
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1302 (when (eobp) (return nil))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1303 (let ((file-name (buffer-substring-no-properties
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1304 (point) (line-end-position))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1305 (unless (equal (string-match mh-namazu-folder file-name) 0)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1306 (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1307 (unless (file-exists-p file-name)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1308 (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1309 (string-match mh-user-path file-name)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1310 (let* ((folder/msg (substring file-name (match-end 0)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1311 (mark (mh-search-from-end ?/ folder/msg)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1312 (unless mark (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1313 (list (format "+%s" (substring folder/msg 0 mark))
68212
0c77c0b9a620 * mh-comp.el (mh-show-buffer-message-number): Replace (car
Bill Wohler <wohler@newt.com>
parents: 68199
diff changeset
1314 (let ((n (ignore-errors (string-to-number
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1315 (substring folder/msg (1+ mark))))))
68212
0c77c0b9a620 * mh-comp.el (mh-show-buffer-message-number): Replace (car
Bill Wohler <wohler@newt.com>
parents: 68199
diff changeset
1316 (if n n (return 'error)))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1317 nil))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1318 (forward-line)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1319
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1320 ;;; Pick interface
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1321
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1322 (defvar mh-index-pick-folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1323 (defvar mh-pick-binary "pick")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1324 (defconst mh-pick-single-dash '(cc date from subject to)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1325 "Search components that are supported by single-dash option in pick.")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1326
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1327 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1328 (defun mh-pick-execute-search (folder-path search-regexp)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1329 "Execute pick.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1330
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
1331 Read \"pick(1)\" or the section Finding Messages with pick in the
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
1332 MH book to find out more about how to enter the criteria (see URL
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
1333 `http://www.ics.uci.edu/~mh/book/mh/finpic.htm').
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1334
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1335 In a program, FOLDER-PATH is the directory in which SEARCH-REGEXP
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1336 is used to search."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1337 (set-buffer (get-buffer-create mh-temp-index-buffer))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1338 (erase-buffer)
68188
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1339 (let ((folders
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1340 (mh-folder-list (substring folder-path (length mh-user-path)))))
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1341 (loop for folder in folders do
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1342 (setq folder (concat "+" folder))
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1343 (insert folder "\n")
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1344 (apply #'call-process (expand-file-name "pick" mh-progs)
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1345 nil '(t nil) nil folder "-list" search-regexp)))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1346 (goto-char (point-min)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1347
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1348 (defun mh-pick-next-result ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1349 "Return the next pick search result."
68188
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1350 (prog1
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1351 (block nil
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1352 (when (eobp) (return nil))
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1353 (when (search-forward-regexp "^\+" (line-end-position) t)
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1354 (setq mh-index-pick-folder
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1355 (buffer-substring-no-properties (line-beginning-position)
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1356 (line-end-position)))
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1357 (return 'error))
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1358 (unless (search-forward-regexp "^[1-9][0-9]*$" (line-end-position) t)
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1359 (return 'error))
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1360 (list mh-index-pick-folder
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1361 (string-to-number
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1362 (buffer-substring-no-properties (line-beginning-position)
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1363 (line-end-position)))
dcf226991252 * mh-search.el (mh-index-next-result-function): Add format to
Bill Wohler <wohler@newt.com>
parents: 68163
diff changeset
1364 nil))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1365 (forward-line)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1366
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1367 ;; All implementations of pick have special options -cc, -date, -from and
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1368 ;; -subject that allow to search for corresponding components. Any other
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1369 ;; component is searched using option --COMPNAME, for example: `pick
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1370 ;; --x-mailer mh-e'. Mailutils "pick" supports this option using a certain
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1371 ;; kludge, but it prefers the following syntax for this purpose:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1372 ;; "--component=COMPNAME --pattern=PATTERN".
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1373 ;; -- Sergey Poznyakoff, Aug 2003
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1374 (defun mh-pick-regexp-builder (pattern-list)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1375 "Generate pick search expression from PATTERN-LIST."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1376 (let ((result ()))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1377 (dolist (pattern pattern-list)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1378 (when (cdr pattern)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1379 (setq result `(,@result "-and" "-lbrace"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1380 ,@(mh-pick-construct-regexp
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1381 (if (and (mh-variant-p 'mu-mh) (car pattern))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1382 (format "--pattern=%s" (cdr pattern))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1383 (cdr pattern))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1384 (if (car pattern)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1385 (cond
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1386 ((mh-variant-p 'mu-mh)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1387 (format "--component=%s" (car pattern)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1388 ((member (car pattern) mh-pick-single-dash)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1389 (format "-%s" (car pattern)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1390 (t
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1391 (format "--%s" (car pattern))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1392 "-search"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1393 "-rbrace"))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1394 (cdr result)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1395
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1396 (defun mh-pick-construct-regexp (expr component)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1397 "Construct pick compatible expression corresponding to EXPR.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1398 COMPONENT is the component to search."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1399 (cond ((atom expr) (list component expr))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1400 ((eq (car expr) 'and)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1401 `("-lbrace" ,@(mh-pick-construct-regexp (cadr expr) component) "-and"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1402 ,@(mh-pick-construct-regexp (caddr expr) component) "-rbrace"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1403 ((eq (car expr) 'or)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1404 `("-lbrace" ,@(mh-pick-construct-regexp (cadr expr) component) "-or"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1405 ,@(mh-pick-construct-regexp (caddr expr) component) "-rbrace"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1406 ((eq (car expr) 'not)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1407 `("-lbrace" "-not" ,@(mh-pick-construct-regexp (cadr expr) component)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1408 "-rbrace"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1409 (t (error "Unknown operator %s seen" (car expr)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1410
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1411 ;;; Grep interface
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1412
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1413 (defvar mh-grep-binary (executable-find "grep"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1414
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1415 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1416 (defun mh-grep-execute-search (folder-path search-regexp)
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
1417 "Execute grep.
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
1418
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
1419 Unlike the other search methods, this method does not use the
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
1420 MH-Search buffer. Instead, you simply enter a regular expression
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
1421 in the minibuffer. For help in constructing regular expressions,
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
1422 see your man page for \"grep\".
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1423
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1424 In a program, FOLDER-PATH is the directory in which SEARCH-REGEXP
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1425 is used to search."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1426 (set-buffer (get-buffer-create mh-temp-index-buffer))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1427 (erase-buffer)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1428 (call-process mh-grep-binary nil '(t nil) nil
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1429 "-i" "-r" search-regexp folder-path)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1430 (goto-char (point-min)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1431
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1432 (defun mh-grep-next-result ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1433 "Read the next result.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1434 Parse it and return the message folder, message index and the
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1435 match. If no other matches left then return nil. If the current
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1436 record is invalid return 'error."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1437 (prog1
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1438 (block nil
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1439 (when (eobp)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1440 (return nil))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1441 (let ((eol-pos (line-end-position))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1442 (bol-pos (line-beginning-position))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1443 folder-start msg-end)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1444 (goto-char bol-pos)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1445 (unless (search-forward mh-user-path eol-pos t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1446 (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1447 (setq folder-start (point))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1448 (unless (search-forward ":" eol-pos t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1449 (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1450 (let ((match (buffer-substring-no-properties (point) eol-pos)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1451 (forward-char -1)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1452 (setq msg-end (point))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1453 (unless (search-backward "/" folder-start t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1454 (return 'error))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1455 (list (format "+%s" (buffer-substring-no-properties
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1456 folder-start (point)))
68212
0c77c0b9a620 * mh-comp.el (mh-show-buffer-message-number): Replace (car
Bill Wohler <wohler@newt.com>
parents: 68199
diff changeset
1457 (let ((n (ignore-errors (string-to-number
0c77c0b9a620 * mh-comp.el (mh-show-buffer-message-number): Replace (car
Bill Wohler <wohler@newt.com>
parents: 68199
diff changeset
1458 (buffer-substring-no-properties
0c77c0b9a620 * mh-comp.el (mh-show-buffer-message-number): Replace (car
Bill Wohler <wohler@newt.com>
parents: 68199
diff changeset
1459 (1+ (point)) msg-end)))))
0c77c0b9a620 * mh-comp.el (mh-show-buffer-message-number): Replace (car
Bill Wohler <wohler@newt.com>
parents: 68199
diff changeset
1460 (if n n (return 'error)))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1461 match))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1462 (forward-line)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1463
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1464
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1465
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1466 ;;; Folder support
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1467
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1468 (defun mh-index-generate-pretty-name (string)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1469 "Given STRING generate a name which is suitable for use as a folder name.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1470 White space from the beginning and end are removed. All spaces in
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1471 the name are replaced with underscores and all / are replaced
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1472 with $. If STRING is longer than 20 it is truncated too. STRING
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1473 could be a list of strings in which case they are concatenated to
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1474 construct the base name."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1475 (with-temp-buffer
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1476 (if (stringp string)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1477 (insert string)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1478 (when (car string) (insert (car string)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1479 (dolist (s (cdr string))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1480 (insert "_" s)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1481 (setq string (mh-replace-string "-lbrace" " "))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1482 (setq string (mh-replace-string "-rbrace" " "))
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
1483 (setq string (mh-replace-string "-search" " "))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1484 (subst-char-in-region (point-min) (point-max) ?( ? t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1485 (subst-char-in-region (point-min) (point-max) ?) ? t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1486 (subst-char-in-region (point-min) (point-max) ?- ? t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1487 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1488 (while (and (not (eobp)) (memq (char-after) '(? ?\t ?\n ?\r ?_)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1489 (delete-char 1))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1490 (goto-char (point-max))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1491 (while (and (not (bobp)) (memq (char-before) '(? ?\t ?\n ?\r ?_)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1492 (delete-backward-char 1))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1493 (subst-char-in-region (point-min) (point-max) ? ?_ t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1494 (subst-char-in-region (point-min) (point-max) ?\t ?_ t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1495 (subst-char-in-region (point-min) (point-max) ?\n ?_ t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1496 (subst-char-in-region (point-min) (point-max) ?\r ?_ t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1497 (subst-char-in-region (point-min) (point-max) ?/ ?$ t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1498 (let ((out (truncate-string-to-width (buffer-string) 20)))
68192
2cfa649fa39d * mh-customize.el (mh-index): Rename group to mh-search and sort group
Bill Wohler <wohler@newt.com>
parents: 68188
diff changeset
1499 (cond ((eq mh-searcher 'flists)
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1500 (format "%s/%s" mh-flists-results-folder mh-flists-sequence))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1501 ((equal out mh-flists-results-folder) (concat out "1"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1502 (t out)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1503
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1504 (defun mh-folder-exists-p (folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1505 "Check if FOLDER exists."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1506 (and (mh-folder-name-p folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1507 (save-excursion
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1508 (with-temp-buffer
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1509 (mh-exec-cmd-output "folder" nil "-fast" "-nocreate" folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1510 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1511 (not (eobp))))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1512
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1513 (defun mh-msg-exists-p (msg folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1514 "Check if MSG exists in FOLDER."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1515 (file-exists-p (format "%s%s/%s" mh-user-path (substring folder 1) msg)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1516
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1517 (defun mh-index-new-folder (name search-regexp)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1518 "Return a folder name based on NAME for search results of SEARCH-REGEXP.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1519
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1520 If folder NAME already exists and was generated for the same
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1521 SEARCH-REGEXP then it is reused.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1522
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1523 Otherwise if the folder NAME was generated from a different
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1524 search then check if NAME<2> can be used. Otherwise try NAME<3>.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1525 This is repeated till we find a new folder name.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1526
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1527 If the folder returned doesn't exist then it is created."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1528 (unless (mh-folder-name-p name)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1529 (error "The argument should be a valid MH folder name"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1530 (let ((chosen-name
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1531 (loop for i from 1
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1532 for candidate = (if (equal i 1) name (format "%s<%s>" name i))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1533 when (or (not (mh-folder-exists-p candidate))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1534 (equal (mh-index-folder-search-regexp candidate)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1535 search-regexp))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1536 return candidate)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1537 ;; Do pending refiles/deletes...
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1538 (when (get-buffer chosen-name)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1539 (mh-process-or-undo-commands chosen-name))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1540 ;; Recreate folder...
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1541 (save-excursion (mh-exec-cmd-quiet nil "rmf" chosen-name))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1542 (mh-exec-cmd-quiet nil "folder" "-create" "-fast" chosen-name)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1543 (mh-remove-from-sub-folders-cache chosen-name)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1544 (when (boundp 'mh-speed-folder-map)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1545 (mh-speed-add-folder chosen-name))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1546 chosen-name))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1547
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1548 (defun mh-index-folder-search-regexp (folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1549 "If FOLDER was created by a index search, return the search regexp.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1550 Return nil if FOLDER doesn't exist or the .mhe_index file is
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1551 garbled."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1552 (ignore-errors
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1553 (with-temp-buffer
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1554 (insert-file-contents
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1555 (format "%s%s/%s" mh-user-path (substring folder 1) mh-index-data-file))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1556 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1557 (forward-list 3)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1558 (cadr (read (current-buffer))))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1559
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1560
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1561
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1562 ;;; Sequence support
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1563
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1564 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1565 (defun mh-index-create-sequences ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1566 "Mirror sequences present in source folders in index folder."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1567 (let ((seq-hash (make-hash-table :test #'equal))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1568 (seq-list ()))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1569 (loop for folder being the hash-keys of mh-index-data
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1570 do (setf (gethash folder seq-hash)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1571 (mh-create-sequence-map
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1572 (mh-read-folder-sequences folder nil))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1573 (dolist (msg (mh-translate-range mh-current-folder "all"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1574 (let* ((checksum (gethash msg mh-index-msg-checksum-map))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1575 (pair (gethash checksum mh-index-checksum-origin-map))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1576 (ofolder (car pair))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1577 (omsg (cdr pair)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1578 (loop for seq in (ignore-errors
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1579 (gethash omsg (gethash ofolder seq-hash)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1580 do (if (assoc seq seq-list)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1581 (push msg (cdr (assoc seq seq-list)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1582 (push (list seq msg) seq-list)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1583 (loop for seq in seq-list
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1584 do (apply #'mh-exec-cmd "mark" mh-current-folder
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1585 "-sequence" (symbol-name (car seq)) "-add"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1586 (mapcar #'(lambda (x) (format "%s" x)) (cdr seq))))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1587
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1588 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1589 (defun mh-create-sequence-map (seq-list)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1590 "Return a map from msg number to list of sequences in which it is present.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1591 SEQ-LIST is an assoc list whose keys are sequence names and whose
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1592 cdr is the list of messages in that sequence."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1593 (loop with map = (make-hash-table)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1594 for seq in seq-list
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1595 when (and (not (memq (car seq) (mh-unpropagated-sequences)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1596 (mh-valid-seq-p (car seq)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1597 do (loop for msg in (cdr seq)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1598 do (push (car seq) (gethash msg map)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1599 finally return map))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1600
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1601 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1602 (defun mh-index-add-to-sequence (seq msgs)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1603 "Add to SEQ the messages in the list MSGS.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1604 This function updates the source folder sequences. Also makes an
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1605 attempt to update the source folder buffer if we have it open."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1606 ;; Don't need to do anything for cur
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1607 (save-excursion
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1608 (when (and (not (memq seq (mh-unpropagated-sequences)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1609 (mh-valid-seq-p seq))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1610 (let ((folders ())
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1611 (mh-speed-flists-inhibit-flag t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1612 (maphash (lambda (folder msgs)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1613 (push folder folders)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1614 ;; Add messages to sequence in source folder...
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1615 (apply #'mh-exec-cmd-quiet nil "mark" folder
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1616 "-add" "-nozero" "-sequence" (symbol-name seq)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1617 (mapcar (lambda (x) (format "%s" x))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1618 (mh-coalesce-msg-list msgs)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1619 ;; Update source folder buffer if we have it open...
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1620 (when (get-buffer folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1621 (save-excursion
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1622 (set-buffer folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1623 (mh-put-msg-in-seq msgs seq))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1624 (mh-index-matching-source-msgs msgs))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1625 folders))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1626
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1627 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1628 (defun mh-index-delete-from-sequence (seq msgs)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1629 "Delete from SEQ the messages in MSGS.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1630 This function updates the source folder sequences. Also makes an
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1631 attempt to update the source folder buffer if present."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1632 (save-excursion
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1633 (when (and (not (memq seq (mh-unpropagated-sequences)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1634 (mh-valid-seq-p seq))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1635 (let ((folders ())
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1636 (mh-speed-flists-inhibit-flag t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1637 (maphash (lambda (folder msgs)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1638 (push folder folders)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1639 ;; Remove messages from sequence in source folder...
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1640 (apply #'mh-exec-cmd-quiet nil "mark" folder
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1641 "-del" "-nozero" "-sequence" (symbol-name seq)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1642 (mapcar (lambda (x) (format "%s" x))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1643 (mh-coalesce-msg-list msgs)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1644 ;; Update source folder buffer if we have it open...
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1645 (when (get-buffer folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1646 (save-excursion
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1647 (set-buffer folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1648 (mh-delete-msg-from-seq msgs seq t))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1649 (mh-index-matching-source-msgs msgs))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1650 folders))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1651
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1652 (defvar mh-unpropagated-sequences '(cur range subject search)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1653 "List of sequences that aren't preserved.")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1654
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1655 (defun mh-unpropagated-sequences ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1656 "Return a list of sequences that aren't propagated to the source folders.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1657 It is just the sequences in the variable
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1658 `mh-unpropagated-sequences' in addition to the
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1659 Previous-Sequence (see mh-profile 5)."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1660 (if mh-previous-seq
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1661 (cons mh-previous-seq mh-unpropagated-sequences)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1662 mh-unpropagated-sequences))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1663
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1664 (defun mh-index-matching-source-msgs (msgs &optional delete-from-index-data)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1665 "Return a table of original messages and folders for messages in MSGS.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1666 If optional argument DELETE-FROM-INDEX-DATA is non-nil, then each
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1667 of the messages, whose counter-part is found in some source
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1668 folder, is removed from `mh-index-data'."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1669 (let ((table (make-hash-table :test #'equal)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1670 (dolist (msg msgs)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1671 (let* ((checksum (gethash msg mh-index-msg-checksum-map))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1672 (pair (gethash checksum mh-index-checksum-origin-map)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1673 (when (and checksum (car pair) (cdr pair)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1674 (mh-index-match-checksum (cdr pair) (car pair) checksum))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1675 (push (cdr pair) (gethash (car pair) table))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1676 (when delete-from-index-data
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1677 (remhash (cdr pair) (gethash (car pair) mh-index-data))))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1678 table))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1679
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1680 (defun mh-index-match-checksum (msg folder checksum)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1681 "Check if MSG in FOLDER has X-MHE-Checksum header value of CHECKSUM."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1682 (with-temp-buffer
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1683 (mh-exec-cmd-output mh-scan-prog nil "-width" "80"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1684 "-format" "%{x-mhe-checksum}\n" folder msg)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1685 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1686 (string-equal (buffer-substring-no-properties (point) (line-end-position))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1687 checksum)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1688
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1689
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1690
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1691 ;;; Serialization of index data
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1692
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1693 (defun mh-index-write-data ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1694 "Write index data to file."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1695 (ignore-errors
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1696 (unless (eq major-mode 'mh-folder-mode)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1697 (error "Can't be called from folder in \"%s\"" major-mode))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1698 (let ((data mh-index-data)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1699 (msg-checksum-map mh-index-msg-checksum-map)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1700 (checksum-origin-map mh-index-checksum-origin-map)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1701 (previous-search mh-index-previous-search)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1702 (sequence-search-flag mh-index-sequence-search-flag)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1703 (outfile (concat buffer-file-name mh-index-data-file))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1704 (print-length nil)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1705 (print-level nil))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1706 (with-temp-file outfile
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1707 (mh-index-write-hashtable
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1708 data (lambda (x) (loop for y being the hash-keys of x collect y)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1709 (mh-index-write-hashtable msg-checksum-map #'identity)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1710 (mh-index-write-hashtable checksum-origin-map #'identity)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1711 (pp previous-search (current-buffer)) (insert "\n")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1712 (pp sequence-search-flag (current-buffer)) (insert "\n")))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1713
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1714 (defun mh-index-write-hashtable (table proc)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1715 "Write TABLE to `current-buffer'.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1716 PROC is used to serialize the values corresponding to the hash
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1717 table keys."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1718 (pp (loop for x being the hash-keys of table
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1719 collect (cons x (funcall proc (gethash x table))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1720 (current-buffer))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1721 (insert "\n"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1722
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1723 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1724 (defun mh-index-read-data ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1725 "Read index data from file."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1726 (ignore-errors
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1727 (unless (eq major-mode 'mh-folder-mode)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1728 (error "Can't be called from folder in \"%s\"" major-mode))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1729 (let ((infile (concat buffer-file-name mh-index-data-file))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1730 t1 t2 t3 t4 t5)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1731 (with-temp-buffer
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1732 (insert-file-contents-literally infile)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1733 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1734 (setq t1 (mh-index-read-hashtable
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1735 (lambda (data)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1736 (loop with table = (make-hash-table :test #'equal)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1737 for x in data do (setf (gethash x table) t)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1738 finally return table)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1739 t2 (mh-index-read-hashtable #'identity)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1740 t3 (mh-index-read-hashtable #'identity)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1741 t4 (read (current-buffer))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1742 t5 (read (current-buffer))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1743 (setq mh-index-data t1
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1744 mh-index-msg-checksum-map t2
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1745 mh-index-checksum-origin-map t3
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1746 mh-index-previous-search t4
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1747 mh-index-sequence-search-flag t5))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1748
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1749 (defun mh-index-read-hashtable (proc)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1750 "From BUFFER read a hash table serialized as a list.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1751 PROC is used to convert the value to actual data."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1752 (loop with table = (make-hash-table :test #'equal)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1753 for pair in (read (current-buffer))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1754 do (setf (gethash (car pair) table) (funcall proc (cdr pair)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1755 finally return table))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1756
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1757
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1758
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1759 ;;; Checksum routines
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1760
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1761 ;; A few different checksum programs are supported. The supported programs
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1762 ;; are:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1763 ;;
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1764 ;; 1. md5sum
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1765 ;; 2. md5
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1766 ;; 3. openssl
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1767 ;;
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1768 ;; To add support for your favorite checksum program add a clause to the cond
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1769 ;; statement in mh-checksum-choose. This should set the variable
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1770 ;; mh-checksum-cmd to the command line needed to run the checsum program and
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1771 ;; should set mh-checksum-parser to a function which returns a cons cell
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1772 ;; containing the message number and checksum string.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1773
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1774 (defvar mh-checksum-cmd)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1775 (defvar mh-checksum-parser)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1776
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1777 (defun mh-checksum-choose ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1778 "Check if a program to create a checksum is present."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1779 (unless (boundp 'mh-checksum-cmd)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1780 (let ((exec-path (append '("/sbin" "/usr/sbin") exec-path)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1781 (cond ((executable-find "md5sum")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1782 (setq mh-checksum-cmd (list (executable-find "md5sum")))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1783 (setq mh-checksum-parser #'mh-md5sum-parser))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1784 ((executable-find "openssl")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1785 (setq mh-checksum-cmd (list (executable-find "openssl") "md5"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1786 (setq mh-checksum-parser #'mh-openssl-parser))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1787 ((executable-find "md5")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1788 (setq mh-checksum-cmd (list (executable-find "md5")))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1789 (setq mh-checksum-parser #'mh-md5-parser))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1790 (t (error "No suitable checksum program"))))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1791
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1792 (defun mh-md5sum-parser ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1793 "Parse md5sum output."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1794 (let ((begin (line-beginning-position))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1795 (end (line-end-position))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1796 first-space last-slash)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1797 (setq first-space (search-forward " " end t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1798 (goto-char end)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1799 (setq last-slash (search-backward "/" begin t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1800 (cond ((and first-space last-slash)
68212
0c77c0b9a620 * mh-comp.el (mh-show-buffer-message-number): Replace (car
Bill Wohler <wohler@newt.com>
parents: 68199
diff changeset
1801 (cons (string-to-number (buffer-substring-no-properties
0c77c0b9a620 * mh-comp.el (mh-show-buffer-message-number): Replace (car
Bill Wohler <wohler@newt.com>
parents: 68199
diff changeset
1802 (1+ last-slash) end))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1803 (buffer-substring-no-properties begin (1- first-space))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1804 (t (cons nil nil)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1805
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1806 (defun mh-openssl-parser ()
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1807 "Parse openssl output."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1808 (let ((begin (line-beginning-position))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1809 (end (line-end-position))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1810 last-space last-slash)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1811 (goto-char end)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1812 (setq last-space (search-backward " " begin t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1813 (setq last-slash (search-backward "/" begin t))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1814 (cond ((and last-slash last-space)
68212
0c77c0b9a620 * mh-comp.el (mh-show-buffer-message-number): Replace (car
Bill Wohler <wohler@newt.com>
parents: 68199
diff changeset
1815 (cons (string-to-number (buffer-substring-no-properties
0c77c0b9a620 * mh-comp.el (mh-show-buffer-message-number): Replace (car
Bill Wohler <wohler@newt.com>
parents: 68199
diff changeset
1816 (1+ last-slash) (1- last-space)))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1817 (buffer-substring-no-properties (1+ last-space) end))))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1818
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1819 (defalias 'mh-md5-parser 'mh-openssl-parser)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1820
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1821 ;;;###mh-autoload
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1822 (defun mh-index-update-maps (folder &optional origin-map)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1823 "Annotate all as yet unannotated messages in FOLDER with their MD5 hash.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1824 As a side effect msg -> checksum map is updated. Optional
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1825 argument ORIGIN-MAP is a hashtable which maps each message in the
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1826 index folder to the original folder and message from whence it
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1827 was copied. If present the checksum -> (origin-folder,
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1828 origin-index) map is updated too."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1829 (clrhash mh-index-msg-checksum-map)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1830 (save-excursion
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1831 ;; Clear temp buffer
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1832 (set-buffer (get-buffer-create mh-temp-checksum-buffer))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1833 (erase-buffer)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1834 ;; Run scan to check if any messages needs MD5 annotations at all
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1835 (with-temp-buffer
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1836 (mh-exec-cmd-output mh-scan-prog nil "-width" "80"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1837 "-format" "%(msg)\n%{x-mhe-checksum}\n"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1838 folder "all")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1839 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1840 (let (msg checksum)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1841 (while (not (eobp))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1842 (setq msg (buffer-substring-no-properties
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1843 (point) (line-end-position)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1844 (forward-line)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1845 (save-excursion
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1846 (cond ((not (string-match "^[0-9]*$" msg)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1847 ((eolp)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1848 ;; need to compute checksum
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1849 (set-buffer mh-temp-checksum-buffer)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1850 (insert mh-user-path (substring folder 1) "/" msg "\n"))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1851 (t
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1852 ;; update maps
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1853 (setq checksum (buffer-substring-no-properties
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1854 (point) (line-end-position)))
68212
0c77c0b9a620 * mh-comp.el (mh-show-buffer-message-number): Replace (car
Bill Wohler <wohler@newt.com>
parents: 68199
diff changeset
1855 (let ((msg (string-to-number msg)))
68163
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1856 (set-buffer folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1857 (mh-index-update-single-msg msg checksum origin-map)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1858 (forward-line))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1859 ;; Run checksum program if needed
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1860 (unless (and (eobp) (bobp))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1861 (apply #'mh-xargs mh-checksum-cmd)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1862 (goto-char (point-min))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1863 (while (not (eobp))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1864 (let* ((intermediate (funcall mh-checksum-parser))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1865 (msg (car intermediate))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1866 (checksum (cdr intermediate)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1867 (when msg
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1868 ;; annotate
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1869 (mh-exec-cmd "anno" folder msg "-component" "X-MHE-Checksum"
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1870 "-nodate" "-text" checksum "-inplace")
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1871 ;; update maps
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1872 (save-excursion
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1873 (set-buffer folder)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1874 (mh-index-update-single-msg msg checksum origin-map)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1875 (forward-line)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1876 (mh-index-write-data))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1877
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1878 (defun mh-index-update-single-msg (msg checksum origin-map)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1879 "Update various maps for one message.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1880 MSG is a index folder message, CHECKSUM its MD5 hash and
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1881 ORIGIN-MAP, if non-nil, a hashtable containing which maps each
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1882 message in the index folder to the folder and message that it was
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1883 copied from. The function updates the hash tables
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1884 `mh-index-msg-checksum-map' and `mh-index-checksum-origin-map'.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1885
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1886 This function should only be called in the appropriate index
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1887 folder buffer."
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1888 (cond ((and origin-map (gethash checksum mh-index-checksum-origin-map))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1889 (let* ((intermediate (gethash msg origin-map))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1890 (ofolder (car intermediate))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1891 (omsg (cdr intermediate)))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1892 ;; This is most probably a duplicate. So eliminate it.
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1893 (call-process "rm" nil nil nil
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1894 (format "%s%s/%s" mh-user-path
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1895 (substring mh-current-folder 1) msg))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1896 (when (gethash ofolder mh-index-data)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1897 (remhash omsg (gethash ofolder mh-index-data)))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1898 (t
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1899 (setf (gethash msg mh-index-msg-checksum-map) checksum)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1900 (when origin-map
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1901 (setf (gethash checksum mh-index-checksum-origin-map)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1902 (gethash msg origin-map))))))
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1903
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1904 (provide 'mh-search)
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1905
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1906 ;; Local Variables:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1907 ;; indent-tabs-mode: nil
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1908 ;; sentence-end-double-space: nil
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1909 ;; End:
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1910
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1911 ;; arch-tag: 607762ad-0dff-4fe1-a27e-6c0dde0dcc47
3b7532a82079 * mh-search.el: New file containing contents of mh-index.el and
Bill Wohler <wohler@newt.com>
parents:
diff changeset
1912 ;;; mh-search ends here