annotate lisp/mail/mh-utils.el @ 16884:36babc489b0c

Change all uses of win95, winnt, and win32 into Windows 95, Windows NT, and W32, respectively. Expand "win" substring in variables referring to Microsoft Windows constructs into "windows". Canonicalize header comments to use same terminology.
author Geoff Voelker <voelker@cs.washington.edu>
date Mon, 20 Jan 1997 00:38:22 +0000
parents 84b8ad02c07c
children 46ee9938fec6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 ;;; mh-utils.el --- mh-e code needed for both sending and reading
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
2 ;; Time-stamp: <95/10/22 17:58:16 gildea>
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
4 ;; Copyright (C) 1993, 1995 Free Software Foundation, Inc.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
6 ;; This file is part of mh-e, part of GNU Emacs.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7
11333
53174cfc29fa Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 11331
diff changeset
8 ;; GNU Emacs is free software; you can redistribute it and/or modify
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 ;; it under the terms of the GNU General Public License as published by
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; the Free Software Foundation; either version 2, or (at your option)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; any later version.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12
11333
53174cfc29fa Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 11331
diff changeset
13 ;; GNU Emacs is distributed in the hope that it will be useful,
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; GNU General Public License for more details.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14118
diff changeset
19 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14118
diff changeset
20 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14118
diff changeset
21 ;; Boston, MA 02111-1307, USA.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;;; Commentary:
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;; Internal support for mh-e package.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
27 ;;; Change Log:
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
28
15531
84b8ad02c07c (mail-user-agent): Replaces mua-paradigm.
Richard M. Stallman <rms@gnu.org>
parents: 14426
diff changeset
29 ;; $Id: mh-utils.el,v 1.9 1996/01/29 23:17:16 kwzh Exp rms $
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
30
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;;; Code:
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32
6856
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
33 ;;; Set for local environment:
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
34 ;;; mh-progs and mh-lib used to be set in paths.el, which tried to
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
35 ;;; figure out at build time which of several possible directories MH
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
36 ;;; was installed into. But if you installed MH after building Emacs,
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
37 ;;; this would almost certainly be wrong, so now we do it at run time.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38
6856
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
39 (defvar mh-progs nil
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
40 "Directory containing MH commands, such as inc, repl, and rmm.")
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41
6856
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
42 (defvar mh-lib nil
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
43 "Directory containing the MH library.
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
44 This directory contains, among other things,
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
45 the mhl program and the components file.")
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
47 ;;;###autoload
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
48 (put 'mh-progs 'risky-local-variable t)
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
49 ;;;###autoload
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
50 (put 'mh-lib 'risky-local-variable t)
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
51
6856
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
52 ;;; User preferences:
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 (defvar mh-auto-folder-collect t
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 "*Whether to start collecting MH folder names immediately in the background.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 Non-nil means start a background process collecting the names of all
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 folders as soon as mh-e is loaded.")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 (defvar mh-recursive-folders nil
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 "*If non-nil, then commands which operate on folders do so recursively.")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 (defvar mh-clean-message-header nil
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 "*Non-nil means clean headers of messages that are displayed or inserted.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 The variables `mh-visible-headers' and `mh-invisible-headers' control what
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 is removed.")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 (defvar mh-visible-headers nil
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 "*If non-nil, contains a regexp specifying the headers to keep when cleaning.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 Only used if `mh-clean-message-header' is non-nil. Setting this variable
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 overrides `mh-invisible-headers'.")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 (defvar mh-invisible-headers
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
73 "^Received: \\|^Message-Id: \\|^Remailed-\\|^Via: \\|^Mail-from: \\|^Return-Path: \\|^Delivery-Date: \\|^In-Reply-To: \\|^Resent-"
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 "Regexp matching lines in a message header that are not to be shown.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 If `mh-visible-headers' is non-nil, it is used instead to specify what
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 to keep.")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 (defvar mh-bury-show-buffer t
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 "*Non-nil means that the displayed show buffer for a folder is buried.")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 (defvar mh-summary-height 4
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 "*Number of lines in MH-Folder window (including the mode line).")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 (defvar mh-msg-number-regexp "^ *\\([0-9]+\\)"
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 "Regexp to find the number of a message in a scan line.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 The message's number must be surrounded with \\( \\)")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 (defvar mh-msg-search-regexp "^[^0-9]*%d[^0-9]"
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 "Format string containing a regexp matching the scan listing for a message.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 The desired message's number will be an argument to format.")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 (defvar mhl-formfile nil
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 "*Name of format file to be used by mhl to show and print messages.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 A value of T means use the default format file.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 Nil means don't use mhl to format messages when showing; mhl is still used,
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 with the default format file, to format messages when printing them.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 The format used should specify a non-zero value for overflowoffset so
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 the message continues to conform to RFC 822 and mh-e can parse the headers.")
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
99 (put 'mhl-formfile 'info-file "mh-e")
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
101 (defvar mh-default-folder-for-message-function nil
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
102 "Function to select a default folder for refiling or Fcc.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
103 If set to a function, that function is called with no arguments by
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
104 `\\[mh-refile-msg]' and `\\[mh-to-fcc]' to get a default when
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
105 prompting the user for a folder. The function is called from within a
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
106 save-excursion, with point at the start of the message. It should
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
107 return the folder to offer as the refile or Fcc folder, as a string
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
108 with a leading `+' sign. It can also return an empty string to use no
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
109 default, or NIL to calculate the default the usual way.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
110 NOTE: This variable is not an ordinary hook;
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
111 It may not be a list of functions.")
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
113 (defvar mh-find-path-hook nil
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
114 "Invoked by mh-find-path while reading the user's MH profile.")
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
115
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
116 (defvar mh-folder-list-change-hook nil
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
117 "Invoked whenever the cached folder list `mh-folder-list' is changed.")
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
118
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
119 (defvar mh-show-buffer-mode-line-buffer-id "{show-%s} %d"
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
120 "Format string to produce `mode-line-buffer-identification' for show buffers.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
121 First argument is folder name. Second is message number.")
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 (defvar mh-cmd-note 4
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 "Offset to insert notation.")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
126 (defvar mh-note-seq "%"
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
127 "String whose first character is used to notate messages in a sequence.")
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
128
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
129 ;;; Internal bookkeeping variables:
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
131 ;; The value of `mh-folder-list-change-hook' is called whenever
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
132 ;; mh-folder-list variable is set.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
133 (defvar mh-folder-list nil) ;List of folder names for completion.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
134
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
135 ;; Cached value of the `Path:' component in the user's MH profile.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
136 (defvar mh-user-path nil) ;User's mail folder directory.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
138 ;; An mh-draft-folder of NIL means do not use a draft folder.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
139 ;; Cached value of the `Draft-Folder:' component in the user's MH profile.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
140 (defvar mh-draft-folder nil) ;Name of folder containing draft messages.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
141
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
142 ;; Cached value of the `Unseen-Sequence:' component in the user's MH profile.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
143 (defvar mh-unseen-seq nil) ;Name of the Unseen sequence.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
145 ;; Cached value of the `Previous-Sequence:' component in the user's MH profile.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
146 (defvar mh-previous-seq nil) ;Name of the Previous sequence.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
148 ;; Cached value of the `Inbox:' component in the user's MH profile,
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
149 ;; or "+inbox" if no such component.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
150 (defvar mh-inbox nil) ;Name of the Inbox folder.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
152 (defconst mh-temp-buffer " *mh-temp*") ;Name of mh-e scratch buffer.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
153
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
154 (defvar mh-previous-window-config nil) ;Window configuration before mh-e command.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
155
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
156 ;;; Internal variables local to a folder.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
158 (defvar mh-current-folder nil) ;Name of current folder, a string.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
159
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
160 (defvar mh-show-buffer nil) ;Buffer that displays message for this folder.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
162 (defvar mh-folder-filename nil) ;Full path of directory for this folder.
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
163
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
164 (defvar mh-msg-count nil) ;Number of msgs in buffer.
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
165
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
166 (defvar mh-showing nil) ;If non-nil, show the message in a separate window.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
168 ;;; This holds a documentation string used by describe-mode.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
169 (defun mh-showing ()
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
170 "When moving to a new message in the Folder window,
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
171 also show it in a separate Show window."
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
172 nil)
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
174 (defvar mh-seq-list nil) ;The sequences of this folder. An alist of (seq . msgs).
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
175
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
176 (defvar mh-seen-list nil) ;List of displayed messages to be removed from the Unseen sequence.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
178 ;; If non-nil, show buffer contains message with all headers.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
179 ;; If nil, show buffer contains message processed normally.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
180 (defvar mh-showing-with-headers nil) ;Showing message with headers or normally.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182
6856
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
183 ;;; mh-e macros
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
184
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
185 (defmacro with-mh-folder-updating (save-modification-flag-p &rest body)
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
186 ;; Format is (with-mh-folder-updating (SAVE-MODIFICATION-FLAG-P) &body BODY).
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
187 ;; Execute BODY, which can modify the folder buffer without having to
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
188 ;; worry about file locking or the read-only flag, and return its result.
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
189 ;; If SAVE-MODIFICATION-FLAG-P is non-nil, the buffer's modification
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
190 ;; flag is unchanged, otherwise it is cleared.
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
191 (setq save-modification-flag-p (car save-modification-flag-p)) ; CL style
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
192 (` (prog1
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
193 (let ((mh-folder-updating-mod-flag (buffer-modified-p))
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
194 (buffer-read-only nil)
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
195 (buffer-file-name nil)) ;don't let the buffer get locked
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
196 (prog1
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
197 (progn
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
198 (,@ body))
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
199 (mh-set-folder-modified-p mh-folder-updating-mod-flag)))
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
200 (,@ (if (not save-modification-flag-p)
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
201 '((mh-set-folder-modified-p nil)))))))
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
202
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
203 (put 'with-mh-folder-updating 'lisp-indent-hook 1)
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
204
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
205 (defmacro mh-in-show-buffer (show-buffer &rest body)
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
206 ;; Format is (mh-in-show-buffer (SHOW-BUFFER) &body BODY).
6856
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
207 ;; Display buffer SHOW-BUFFER in other window and execute BODY in it.
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
208 ;; Stronger than save-excursion, weaker than save-window-excursion.
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
209 (setq show-buffer (car show-buffer)) ; CL style
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
210 (` (let ((mh-in-show-buffer-saved-window (selected-window)))
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
211 (switch-to-buffer-other-window (, show-buffer))
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
212 (if mh-bury-show-buffer (bury-buffer (current-buffer)))
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
213 (unwind-protect
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
214 (progn
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
215 (,@ body))
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
216 (select-window mh-in-show-buffer-saved-window)))))
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
217
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
218 (put 'mh-in-show-buffer 'lisp-indent-hook 1)
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
219
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
220 (defmacro mh-make-seq (name msgs) (list 'cons name msgs))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
221
6856
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
222 (defmacro mh-seq-name (pair) (list 'car pair))
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
223
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
224 (defmacro mh-seq-msgs (pair) (list 'cdr pair))
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
225
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
226
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 ;;; Ensure new buffers won't get this mode if default-major-mode is nil.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 (put 'mh-show-mode 'mode-class 'special)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 (defun mh-show-mode ()
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 "Major mode for showing messages in mh-e.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 The value of mh-show-mode-hook is called when a new message is displayed."
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 (kill-all-local-variables)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 (setq major-mode 'mh-show-mode)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 (mh-set-mode-name "MH-Show")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 (run-hooks 'mh-show-mode-hook))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 (defun mh-maybe-show (&optional msg)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 ;; If in showing mode, then display the message pointed to by the cursor.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 (if mh-showing (mh-show msg)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
243 (defun mh-show (&optional message)
6856
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
244 "Show MESSAGE (default: message at cursor).
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
245 Force a two-window display with the folder window on top (size
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 mh-summary-height) and the show buffer below it.
6856
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
247 If the message is already visible, display the start of the message.
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
248
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
249 Display of the message is controlled by setting the variables
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
250 `mh-clean-message-header' and `mhl-formfile'. The default behavior is
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
251 to scroll uninteresting headers off the top of the window.
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
252 Type \"\\[mh-header-display]\" to see the message with all its headers."
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 (interactive)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 (and mh-showing-with-headers
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 (or mhl-formfile mh-clean-message-header)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 (mh-invalidate-show-buffer))
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
257 (mh-show-msg message))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 (defun mh-show-msg (msg)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 (if (not msg)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 (setq msg (mh-get-msg-num t)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 (setq mh-showing t)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 (let ((folder mh-current-folder)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 (clean-message-header mh-clean-message-header)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 (show-window (get-buffer-window mh-show-buffer)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 (if (not (eql (next-window (minibuffer-window)) (selected-window)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 (delete-other-windows)) ; force ourself to the top window
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 (mh-in-show-buffer (mh-show-buffer)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 (if (and show-window
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 (equal (mh-msg-filename msg folder) buffer-file-name))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 (progn ;just back up to start
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 (goto-char (point-min))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 (if (not clean-message-header)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 (mh-start-of-uncleaned-message)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 (mh-display-msg msg folder))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 (if (not (= (1+ (window-height)) (screen-height))) ;not horizontally split
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 (shrink-window (- (window-height) mh-summary-height)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 (mh-recenter nil)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 (if (not (memq msg mh-seen-list)) (setq mh-seen-list (cons msg mh-seen-list)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 (run-hooks 'mh-show-hook))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 (defun mh-display-msg (msg-num folder)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 ;; Display message NUMBER of FOLDER.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 ;; Sets the current buffer to the show buffer.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 (set-buffer folder)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 ;; Bind variables in folder buffer in case they are local
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 (let ((formfile mhl-formfile)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 (clean-message-header mh-clean-message-header)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 (invisible-headers mh-invisible-headers)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 (visible-headers mh-visible-headers)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 (msg-filename (mh-msg-filename msg-num))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 (show-buffer mh-show-buffer))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 (if (not (file-exists-p msg-filename))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 (error "Message %d does not exist" msg-num))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 (set-buffer show-buffer)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 (cond ((not (equal msg-filename buffer-file-name))
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
299 (mh-unvisit-file)
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 (erase-buffer)
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
301 ;; Changing contents, so this hook needs to be reinitialized.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
302 ;; pgp.el uses this.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
303 (if (boundp 'write-contents-hooks) ;Emacs 19
14118
e7809b53da4d (mh-display-msg): Use kill-local-variable
Karl Heuer <kwzh@gnu.org>
parents: 13386
diff changeset
304 (kill-local-variable 'write-contents-hooks))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 (if formfile
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 (mh-exec-lib-cmd-output "mhl" "-nobell" "-noclear"
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 (if (stringp formfile)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 (list "-form" formfile))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 msg-filename)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 (insert-file-contents msg-filename))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 (goto-char (point-min))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 (cond (clean-message-header
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 (mh-clean-msg-header (point-min)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 invisible-headers
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 visible-headers)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 (goto-char (point-min)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 (t
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 (mh-start-of-uncleaned-message)))
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
319 ;; the parts of visiting we want to do (no locking)
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 (or (eq buffer-undo-list t) ;don't save undo info for prev msgs
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 (setq buffer-undo-list nil))
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
322 (set-buffer-modified-p nil)
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
323 (set-buffer-auto-saved)
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
324 ;; the parts of set-visited-file-name we want to do (no locking)
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 (setq buffer-file-name msg-filename)
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
326 (setq buffer-backed-up nil)
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
327 (auto-save-mode 1)
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 (set-mark nil)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 (mh-show-mode)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 (setq mode-line-buffer-identification
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 (list (format mh-show-buffer-mode-line-buffer-id
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 folder msg-num)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 (set-buffer folder)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 (setq mh-showing-with-headers nil)))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 (defun mh-start-of-uncleaned-message ()
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 ;; position uninteresting headers off the top of the window
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 (let ((case-fold-search t))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 (re-search-forward
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
340 "^To:\\|^Cc:\\|^From:\\|^Subject:\\|^Date:" nil t)
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 (beginning-of-line)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 (mh-recenter 0)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 (defun mh-invalidate-show-buffer ()
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 ;; Invalidate the show buffer so we must update it to use it.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 (if (get-buffer mh-show-buffer)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 (save-excursion
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 (set-buffer mh-show-buffer)
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
350 (mh-unvisit-file))))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
353 (defun mh-unvisit-file ()
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
354 ;; Separate current buffer from the message file it was visiting.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
355 (or (not (buffer-modified-p))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
356 (null buffer-file-name) ;we've been here before
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
357 (yes-or-no-p (format "Message %s modified; flush changes? "
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
358 (file-name-nondirectory buffer-file-name)))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
359 (error "Flushing changes not confirmed"))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
360 (clear-visited-file-modtime)
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
361 (unlock-buffer)
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
362 (setq buffer-file-name nil))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
363
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
364
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 (defun mh-get-msg-num (error-if-no-message)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 ;; Return the message number of the displayed message. If the argument
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 ;; ERROR-IF-NO-MESSAGE is non-nil, then complain if the cursor is not
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 ;; pointing to a message.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 (save-excursion
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 (beginning-of-line)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 (cond ((looking-at mh-msg-number-regexp)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 (string-to-int (buffer-substring (match-beginning 1)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 (match-end 1))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 (error-if-no-message
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 (error "Cursor not pointing to message"))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 (t nil))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 (defun mh-msg-filename (msg &optional folder)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 ;; Return the file name of MESSAGE in FOLDER (default current folder).
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 (expand-file-name (int-to-string msg)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 (if folder
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 (mh-expand-file-name folder)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 mh-folder-filename)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 (defun mh-clean-msg-header (start invisible-headers visible-headers)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 ;; Flush extraneous lines in a message header, from the given POINT to the
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 ;; end of the message header. If VISIBLE-HEADERS is non-nil, it contains a
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 ;; regular expression specifying the lines to display, otherwise
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 ;; INVISIBLE-HEADERS contains a regular expression specifying lines to
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 ;; delete from the header.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 (let ((case-fold-search t))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 (save-restriction
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 (goto-char start)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 (if (search-forward "\n\n" nil 'move)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 (backward-char 1))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 (narrow-to-region start (point))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 (goto-char (point-min))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 (if visible-headers
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 (while (< (point) (point-max))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 (cond ((looking-at visible-headers)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 (forward-line 1)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 (while (looking-at "[ \t]") (forward-line 1)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 (t
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 (mh-delete-line 1)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 (while (looking-at "[ \t]")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 (mh-delete-line 1)))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 (while (re-search-forward invisible-headers nil t)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 (beginning-of-line)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 (mh-delete-line 1)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 (while (looking-at "[ \t]")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 (mh-delete-line 1))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 (unlock-buffer))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 (defun mh-recenter (arg)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 ;; Like recenter but with two improvements: nil arg means recenter,
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 ;; and only does anything if the current buffer is in the selected
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 ;; window. (Commands like save-some-buffers can make this false.)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 (if (eql (get-buffer-window (current-buffer))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 (selected-window))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 (recenter (if arg arg '(t)))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 (defun mh-delete-line (lines)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 ;; Delete version of kill-line.
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
428 (delete-region (point) (progn (forward-line lines) (point))))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 (defun mh-notate (msg notation offset)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 ;; Marks MESSAGE with the character NOTATION at position OFFSET.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 ;; Null MESSAGE means the message that the cursor points to.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 (save-excursion
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 (if (or (null msg)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 (mh-goto-msg msg t t))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 (with-mh-folder-updating (t)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 (beginning-of-line)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 (forward-char offset)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 (delete-char 1)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 (insert notation)))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
444 (defun mh-find-msg-get-num (step)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
445 ;; Return the message number of the message on the current scan line
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
446 ;; or one nearby. Jumps over non-message lines, such as inc errors.
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
447 ;; STEP tells whether to search forward or backward if we have to search.
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
448 (or (mh-get-msg-num nil)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
449 (let ((msg-num nil)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
450 (nreverses 0))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
451 (while (and (not msg-num)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
452 (< nreverses 2))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
453 (cond ((eobp)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
454 (setq step -1)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
455 (setq nreverses (1+ nreverses)))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
456 ((bobp)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
457 (setq step 1)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
458 (setq nreverses (1+ nreverses))))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
459 (forward-line step)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
460 (setq msg-num (mh-get-msg-num nil)))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
461 msg-num)))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
462
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 (defun mh-goto-msg (number &optional no-error-if-no-message dont-show)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 "Position the cursor at message NUMBER.
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
465 Optional non-nil second argument means return nil instead of
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
466 signaling an error if message does not exist; in this case,
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
467 the cursor is positioned near where the message would have been.
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
468 Non-nil third argument means not to show the message."
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
469 (interactive "NGo to message: ")
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
470 (setq number (prefix-numeric-value number)) ;Emacs 19
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
471 ;; This basic routine tries to be as fast as possible,
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
472 ;; using a binary search and minimal regexps.
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
473 (let ((cur-msg (mh-find-msg-get-num -1))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
474 (jump-size mh-msg-count))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
475 (while (and (> jump-size 1)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
476 cur-msg
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
477 (not (eq cur-msg number)))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
478 (cond ((< cur-msg number)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
479 (setq jump-size (min (- number cur-msg)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
480 (ash (1+ jump-size) -1)))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
481 (forward-line jump-size)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
482 (setq cur-msg (mh-find-msg-get-num 1)))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
483 (t
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
484 (setq jump-size (min (- cur-msg number)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
485 (ash (1+ jump-size) -1)))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
486 (forward-line (- jump-size))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
487 (setq cur-msg (mh-find-msg-get-num -1)))))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
488 (if (eq cur-msg number)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
489 (progn
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
490 (beginning-of-line)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
491 (or dont-show
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
492 (mh-maybe-show number)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
493 t))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
494 (if (not no-error-if-no-message)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
495 (error "No message %d" number)))))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
496
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 (defun mh-msg-search-pat (n)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 ;; Return a search pattern for message N in the scan listing.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 (format mh-msg-search-regexp n))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
503 (defun mh-get-profile-field (field)
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
504 ;; Find and return the value of FIELD in the current buffer.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
505 ;; Returns NIL if the field is not in the buffer.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
506 (let ((case-fold-search t))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
507 (goto-char (point-min))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
508 (cond ((not (re-search-forward (format "^%s" field) nil t)) nil)
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
509 ((looking-at "[\t ]*$") nil)
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
510 (t
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
511 (re-search-forward "[\t ]*\\([^\t \n].*\\)$" nil t)
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
512 (let ((start (match-beginning 1)))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
513 (end-of-line)
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
514 (buffer-substring start (point)))))))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
515
15531
84b8ad02c07c (mail-user-agent): Replaces mua-paradigm.
Richard M. Stallman <rms@gnu.org>
parents: 14426
diff changeset
516 (defvar mail-user-agent 'mh-e-user-agent) ;from reporter.el 3.2
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
517
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 (defun mh-find-path ()
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 ;; Set mh-progs and mh-lib.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 ;; (This step is necessary if MH was installed after this Emacs was dumped.)
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
521 ;; From profile file, set mh-user-path, mh-draft-folder,
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
522 ;; mh-unseen-seq, mh-previous-seq, mh-inbox.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 (mh-find-progs)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 (save-excursion
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 ;; Be sure profile is fully expanded before switching buffers
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 (let ((profile (expand-file-name (or (getenv "MH") "~/.mh_profile"))))
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
527 (set-buffer (get-buffer-create mh-temp-buffer))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 (setq buffer-offer-save nil) ;for people who set default to t
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 (erase-buffer)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 (condition-case err
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 (insert-file-contents profile)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 (file-error
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 (mh-install profile err)))
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
534 (setq mh-user-path (mh-get-profile-field "Path:"))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
535 (if (not mh-user-path)
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 (setq mh-user-path "Mail"))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 (setq mh-user-path
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 (file-name-as-directory
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 (expand-file-name mh-user-path (expand-file-name "~"))))
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
540 (setq mh-draft-folder (mh-get-profile-field "Draft-Folder:"))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
541 (if mh-draft-folder
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
542 (progn
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
543 (if (not (mh-folder-name-p mh-draft-folder))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
544 (setq mh-draft-folder (format "+%s" mh-draft-folder)))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
545 (if (not (file-exists-p (mh-expand-file-name mh-draft-folder)))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
546 (error "Draft folder \"%s\" not found. Create it and try again."
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
547 (mh-expand-file-name mh-draft-folder)))))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
548 (setq mh-inbox (mh-get-profile-field "Inbox:"))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
549 (cond ((not mh-inbox)
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
550 (setq mh-inbox "+inbox"))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
551 ((not (mh-folder-name-p mh-inbox))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
552 (setq mh-inbox (format "+%s" mh-inbox))))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
553 (setq mh-unseen-seq (mh-get-profile-field "Unseen-Sequence:"))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
554 (if mh-unseen-seq
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
555 (setq mh-unseen-seq (intern mh-unseen-seq))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
556 (setq mh-unseen-seq 'unseen)) ;old MH default?
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
557 (setq mh-previous-seq (mh-get-profile-field "Previous-Sequence:"))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
558 (if mh-previous-seq
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
559 (setq mh-previous-seq (intern mh-previous-seq)))
15531
84b8ad02c07c (mail-user-agent): Replaces mua-paradigm.
Richard M. Stallman <rms@gnu.org>
parents: 14426
diff changeset
560 (setq mail-user-agent 'mh-e-user-agent)
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
561 (run-hooks 'mh-find-path-hook))))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 (defun mh-find-progs ()
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 (or (file-exists-p (expand-file-name "inc" mh-progs))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 (setq mh-progs
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 (or (mh-path-search exec-path "inc")
6856
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
567 (mh-path-search '("/usr/local/bin/mh/"
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
568 "/usr/local/mh/"
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
569 "/usr/bin/mh/" ;Ultrix 4.2
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 "/usr/new/mh/" ;Ultrix <4.2
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
571 "/usr/contrib/mh/bin/" ;BSDI
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
572 "/usr/local/bin/"
6856
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
573 )
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 "inc")
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
575 mh-progs
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 "/usr/local/bin/")))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 (or (file-exists-p (expand-file-name "mhl" mh-lib))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 (setq mh-lib
6856
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
579 (or (mh-path-search '("/usr/local/lib/mh/"
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
580 "/usr/local/mh/lib/"
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
581 "/usr/local/bin/mh/"
6856
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
582 "/usr/lib/mh/" ;Ultrix 4.2
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 "/usr/new/lib/mh/" ;Ultrix <4.2
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
584 "/usr/contrib/mh/lib/" ;BSDI
6856
396254137b30 (mh-progs, mh-lib): Move from mh-e.el
Richard M. Stallman <rms@gnu.org>
parents: 6365
diff changeset
585 )
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 "mhl")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 (mh-path-search exec-path "mhl") ;unlikely
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
588 mh-lib
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
589 "/usr/local/lib/mh/"))))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 (defun mh-path-search (path file)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 ;; Search PATH, a list of directory names, for FILE.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 ;; Returns the element of PATH that contains FILE, or nil if not found.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 (while (and path
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 (not (file-exists-p (expand-file-name file (car path)))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 (setq path (cdr path)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 (car path))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
599 (defvar mh-no-install nil) ;do not run install-mh
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
600
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 (defun mh-install (profile error-val)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 ;; Called to do error recovery if we fail to read the profile file.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 ;; If possible, initialize the MH environment.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 (if (or (getenv "MH")
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
605 (file-exists-p profile)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
606 mh-no-install)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
607 (signal (car error-val)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
608 (list (format "Cannot read MH profile \"%s\"" profile)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
609 (car (cdr (cdr error-val))))))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 ;; The "install-mh" command will output a short note which
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 ;; mh-exec-cmd will display to the user.
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
612 ;; The MH 5 version of install-mh might try prompt the user
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
613 ;; for information, which would fail here.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 (mh-exec-cmd (expand-file-name "install-mh" mh-lib) "-auto")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 ;; now try again to read the profile file
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 (erase-buffer)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 (condition-case err
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 (insert-file-contents profile)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 (file-error
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
620 (signal (car err) ;re-signal with more specific msg
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
621 (list (format "Cannot read MH profile \"%s\"" profile)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
622 (car (cdr (cdr err))))))))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 (defun mh-set-folder-modified-p (flag)
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
626 ;; Mark current folder as modified or unmodified according to FLAG.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 (set-buffer-modified-p flag))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 (defun mh-find-seq (name) (assoc name mh-seq-list))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 (defun mh-seq-to-msgs (seq)
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
633 ;; Return a list of the messages in SEQUENCE.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 (mh-seq-msgs (mh-find-seq seq)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 (defun mh-add-msgs-to-seq (msgs seq &optional internal-flag)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 ;; Add MESSAGE(s) to the SEQUENCE. If optional FLAG is non-nil, do not mark
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 ;; the message in the scan listing or inform MH of the addition.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 (let ((entry (mh-find-seq seq)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 (if (and msgs (atom msgs)) (setq msgs (list msgs)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 (if (null entry)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 (setq mh-seq-list (cons (mh-make-seq seq msgs) mh-seq-list))
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
644 (if msgs (setcdr entry (append msgs (mh-seq-msgs entry)))))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 (cond ((not internal-flag)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 (mh-add-to-sequence seq msgs)
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
647 (mh-notate-seq seq mh-note-seq (1+ mh-cmd-note))))))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 (autoload 'mh-add-to-sequence "mh-seq")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 (autoload 'mh-notate-seq "mh-seq")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 (autoload 'mh-read-seq-default "mh-seq")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 (autoload 'mh-map-to-seq-msgs "mh-seq")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 (defun mh-set-mode-name (mode-name-string)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 ;; Set the mode-name and ensure that the mode line is updated.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 (setq mode-name mode-name-string)
11576
f0906608aa63 (mh-set-mode-name): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents: 11333
diff changeset
658 (force-mode-line-update t))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 (defun mh-prompt-for-folder (prompt default can-create)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 ;; Prompt for a folder name with PROMPT. Returns the folder's name as a
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 ;; string. DEFAULT is used if the folder exists and the user types return.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 ;; If the CAN-CREATE flag is t, then a non-existent folder is made.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 (if (null default)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 (setq default ""))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 (let* ((prompt (format "%s folder%s" prompt
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 (if (equal "" default)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 "? "
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 (format " [%s]? " default))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 read-name folder-name)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 (if (null mh-folder-list)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 (mh-set-folder-list))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 (while (and (setq read-name (completing-read prompt mh-folder-list
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 nil nil "+"))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 (equal read-name "")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 (equal default "")))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 (cond ((or (equal read-name "") (equal read-name "+"))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 (setq read-name default))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 ((not (mh-folder-name-p read-name))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 (setq read-name (format "+%s" read-name))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 (setq folder-name read-name)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 (cond ((and (> (length folder-name) 0)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 (eql (aref folder-name (1- (length folder-name))) ?/))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 (setq folder-name (substring folder-name 0 -1))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 (let ((new-file-p (not (file-exists-p (mh-expand-file-name folder-name)))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 (cond ((and new-file-p
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 (y-or-n-p
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 (format "Folder %s does not exist. Create it? " folder-name)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 (message "Creating %s" folder-name)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 (call-process "mkdir" nil nil nil (mh-expand-file-name folder-name))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 (message "Creating %s...done" folder-name)
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
693 (setq mh-folder-list (cons (list read-name) mh-folder-list))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
694 (run-hooks 'mh-folder-list-change-hook))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695 (new-file-p
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 (error "Folder %s is not created" folder-name))
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
697 ((not (file-directory-p (mh-expand-file-name folder-name)))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
698 (error "\"%s\" is not a directory"
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
699 (mh-expand-file-name folder-name)))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 ((and (null (assoc read-name mh-folder-list))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 (null (assoc (concat read-name "/") mh-folder-list)))
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
702 (setq mh-folder-list (cons (list read-name) mh-folder-list))
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
703 (run-hooks 'mh-folder-list-change-hook))))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 folder-name))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
707 (defvar mh-make-folder-list-process nil) ;The background process collecting the folder list.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
709 (defvar mh-folder-list-temp nil) ;mh-folder-list as it is being built.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
711 (defvar mh-folder-list-partial-line "") ;Start of last incomplete line from folder process.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 (defun mh-set-folder-list ()
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
714 ;; Sets mh-folder-list correctly.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
715 ;; A useful function for the command line or for when you need to
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
716 ;; sync by hand. Format is in a form suitable for completing read.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 (message "Collecting folder names...")
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 (if (not mh-make-folder-list-process)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 (mh-make-folder-list-background))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 (while (eq (process-status mh-make-folder-list-process) 'run)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 (accept-process-output mh-make-folder-list-process))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 (setq mh-folder-list mh-folder-list-temp)
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
723 (run-hooks 'mh-folder-list-change-hook)
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 (setq mh-folder-list-temp nil)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 (delete-process mh-make-folder-list-process)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 (setq mh-make-folder-list-process nil)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 (message "Collecting folder names...done"))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 (defun mh-make-folder-list-background ()
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
730 ;; Start a background process to compute a list of the user's folders.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
731 ;; Call mh-set-folder-list to wait for the result.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 (cond
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 ((not mh-make-folder-list-process)
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
734 (mh-find-path)
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 (let ((process-connection-type nil))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 (setq mh-make-folder-list-process
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 (start-process "folders" nil (expand-file-name "folders" mh-progs)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 "-fast"
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 (if mh-recursive-folders
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 "-recurse"
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 "-norecurse")))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 (set-process-filter mh-make-folder-list-process
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 'mh-make-folder-list-filter)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 (process-kill-without-query mh-make-folder-list-process)))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 (defun mh-make-folder-list-filter (process output)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747 ;; parse output from "folders -fast"
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 (let ((position 0)
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
749 line-end
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
750 new-folder
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
751 (prevailing-match-data (match-data)))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
752 (unwind-protect
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
753 ;; make sure got complete line
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
754 (while (setq line-end (string-match "\n" output position))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
755 (setq new-folder (format "+%s%s"
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
756 mh-folder-list-partial-line
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
757 (substring output position line-end)))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
758 (setq mh-folder-list-partial-line "")
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
759 ;; is new folder a subfolder of previous?
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
760 (if (and mh-folder-list-temp
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
761 (string-match
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
762 (regexp-quote
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
763 (concat (car (car mh-folder-list-temp)) "/"))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
764 new-folder))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
765 ;; append slash to parent folder for better completion
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
766 ;; (undone by mh-prompt-for-folder)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
767 (setq mh-folder-list-temp
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
768 (cons
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
769 (list new-folder)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
770 (cons
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
771 (list (concat (car (car mh-folder-list-temp)) "/"))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
772 (cdr mh-folder-list-temp))))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773 (setq mh-folder-list-temp
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 (cons (list new-folder)
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
775 mh-folder-list-temp)))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
776 (setq position (1+ line-end)))
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
777 (store-match-data prevailing-match-data))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778 (setq mh-folder-list-partial-line (substring output position))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781 (defun mh-folder-name-p (name)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782 ;; Return non-NIL if NAME is possibly the name of a folder.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 ;; A name (a string or symbol) can be a folder name if it begins with "+".
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 (if (symbolp name)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 (eql (aref (symbol-name name) 0) ?+)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 (and (> (length name) 0)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 (eql (aref name 0) ?+))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 ;;; Issue commands to MH.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 (defun mh-exec-cmd (command &rest args)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 ;; Execute mh-command COMMAND with ARGS.
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
795 ;; The side effects are what is desired.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796 ;; Any output is assumed to be an error and is shown to the user.
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
797 ;; The output is not read or parsed by mh-e.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 (save-excursion
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
799 (set-buffer (get-buffer-create mh-temp-buffer))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 (erase-buffer)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 (apply 'call-process
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 (expand-file-name command mh-progs) nil t nil
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 (mh-list-to-string args))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 (if (> (buffer-size) 0)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805 (save-window-excursion
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
806 (switch-to-buffer-other-window mh-temp-buffer)
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 (sit-for 5)))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810 (defun mh-exec-cmd-error (env command &rest args)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811 ;; In environment ENV, execute mh-command COMMAND with args ARGS.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 ;; ENV is nil or a string of space-separated "var=value" elements.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
813 ;; Signals an error if process does not complete successfully.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814 (save-excursion
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
815 (set-buffer (get-buffer-create mh-temp-buffer))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 (erase-buffer)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 (let ((status
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818 (if env
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819 ;; the shell hacks necessary here shows just how broken Unix is
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820 (apply 'call-process "/bin/sh" nil t nil "-c"
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 (format "%s %s ${1+\"$@\"}"
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822 env
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823 (expand-file-name command mh-progs))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824 command
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825 (mh-list-to-string args))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826 (apply 'call-process
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
827 (expand-file-name command mh-progs) nil t nil
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 (mh-list-to-string args)))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829 (mh-handle-process-error command status))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832 (defun mh-exec-cmd-daemon (command &rest args)
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
833 ;; Execute MH command COMMAND with ARGS in the background.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
834 ;; Any output from command is displayed in an asynchronous pop-up window.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 (save-excursion
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
836 (set-buffer (get-buffer-create mh-temp-buffer))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837 (erase-buffer))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 (let* ((process-connection-type nil)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 (process (apply 'start-process
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 command nil
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 (expand-file-name command mh-progs)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 (mh-list-to-string args))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 (set-process-filter process 'mh-process-daemon)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 (defun mh-process-daemon (process output)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 ;; Process daemon that puts output into a temporary buffer.
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
847 (set-buffer (get-buffer-create mh-temp-buffer))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 (insert-before-markers output)
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
849 (display-buffer mh-temp-buffer))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 (defun mh-exec-cmd-quiet (raise-error command &rest args)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 ;; Args are RAISE-ERROR, COMMANDS, ARGS....
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 ;; Execute MH command COMMAND with ARGS. ARGS is a list of strings.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855 ;; Return at start of mh-temp buffer, where output can be parsed and used.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 ;; Returns value of call-process, which is 0 for success,
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 ;; unless RAISE-ERROR is non-nil, in which case an error is signaled
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 ;; if call-process returns non-0.
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
859 (set-buffer (get-buffer-create mh-temp-buffer))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 (erase-buffer)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 (let ((value
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 (apply 'call-process
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 (expand-file-name command mh-progs) nil t nil
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 args)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 (goto-char (point-min))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 (if raise-error
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 (mh-handle-process-error command value)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 value)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
871 (defun mh-exec-cmd-output (command display &rest args)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872 ;; Execute MH command COMMAND with DISPLAY flag and ARGS.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873 ;; Put the output into buffer after point. Set mark after inserted text.
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
874 ;; Output is expected to be shown to user, not parsed by mh-e.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
875 (push-mark (point) t)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876 (apply 'call-process
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877 (expand-file-name command mh-progs) nil t display
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
878 (mh-list-to-string args))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879 (exchange-point-and-mark))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
882 (defun mh-exec-lib-cmd-output (command &rest args)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883 ;; Execute MH library command COMMAND with ARGS.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 ;; Put the output into buffer after point. Set mark after inserted text.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 (apply 'mh-exec-cmd-output (expand-file-name command mh-lib) nil args))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 (defun mh-handle-process-error (command status)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 ;; Raise error if COMMAND returned non-0 STATUS, otherwise return STATUS.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 ;; STATUS is return value from call-process.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 ;; Program output is in current buffer.
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
892 ;; If output is too long to include in error message, display the buffer.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893 (cond ((eql status 0) ;success
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 status)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 ((stringp status) ;kill string
14426
9f18c1b097ce (mh-handle-process-error): Fix error format string.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
896 (error "%s: %s" command status))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 (t ;exit code
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898 (cond
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899 ((= (buffer-size) 0) ;program produced no error message
14426
9f18c1b097ce (mh-handle-process-error): Fix error format string.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
900 (error "%s: exit code %d" command status))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 (t
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902 ;; will error message fit on one line?
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 (goto-line 2)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904 (if (and (< (buffer-size) (screen-width))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 (eobp))
14426
9f18c1b097ce (mh-handle-process-error): Fix error format string.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
906 (error "%s"
9f18c1b097ce (mh-handle-process-error): Fix error format string.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
907 (buffer-substring 1 (progn (goto-char 1)
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 (end-of-line)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 (point))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 (display-buffer (current-buffer))
14426
9f18c1b097ce (mh-handle-process-error): Fix error format string.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
911 (error "%s failed with status %d. See error message in other window."
9f18c1b097ce (mh-handle-process-error): Fix error format string.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
912 command status)))))))
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 (defun mh-expand-file-name (filename &optional default)
11331
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
916 ;; Just like `expand-file-name', but also handles MH folder names.
730a7c669a73 New version from author
Karl Heuer <kwzh@gnu.org>
parents: 6856
diff changeset
917 ;; Assumes that any filename that starts with '+' is a folder name.
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 (if (mh-folder-name-p filename)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919 (expand-file-name (substring filename 1) mh-user-path)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 (expand-file-name filename default)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 (defun mh-list-to-string (l)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924 ;; Flattens the list L and makes every element of the new list into a string.
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 (nreverse (mh-list-to-string-1 l)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 (defun mh-list-to-string-1 (l)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 (let ((new-list nil))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 (while l
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 (cond ((null (car l)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 ((symbolp (car l))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 (setq new-list (cons (symbol-name (car l)) new-list)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 ((numberp (car l))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 (setq new-list (cons (int-to-string (car l)) new-list)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 ((equal (car l) ""))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 ((stringp (car l)) (setq new-list (cons (car l) new-list)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 ((listp (car l))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 (setq new-list (nconc (mh-list-to-string-1 (car l))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939 new-list)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 (t (error "Bad element in mh-list-to-string: %s" (car l))))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 (setq l (cdr l)))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 new-list))
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 (provide 'mh-utils)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 (and (not noninteractive)
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947 mh-auto-folder-collect
13386
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
948 (let ((mh-no-install t)) ;only get folders if MH installed
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
949 (condition-case err
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
950 (mh-make-folder-list-background)
78c7ebcbd9fe (mh-goto-msg): binary search (much faster!).
Karl Heuer <kwzh@gnu.org>
parents: 11576
diff changeset
951 (file-error)))) ;so don't complain if not installed
6365
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952
a1b8926f7ece entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953 ;;; mh-utils.el ends here