annotate lisp/mh-e/mh-acros.el @ 106796:9479a9da9b8c

(imenu-default-create-index-function): Detect infinite loops caused by imenu-prev-index-position-function.
author Sam Steingold <sds@gnu.org>
date Mon, 11 Jan 2010 15:53:23 -0500
parents eadef31351e4
children 1d1d5d9bd884
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
1 ;;; mh-acros.el --- macros used in MH-E
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
2
101465
eadef31351e4 Follow Glenn's lead and update format of Copyright.
Bill Wohler <wohler@newt.com>
parents: 100908
diff changeset
3 ;; Copyright (C) 2004, 2006, 2007, 2008, 2009
eadef31351e4 Follow Glenn's lead and update format of Copyright.
Bill Wohler <wohler@newt.com>
parents: 100908
diff changeset
4 ;; Free Software Foundation, Inc.
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
5
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
6 ;; Author: Satyaki Das <satyaki@theforce.stanford.edu>
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
7 ;; Maintainer: Bill Wohler <wohler@newt.com>
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
8 ;; Keywords: mail
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
9 ;; See: mh-e.el
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
10
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
12
94663
90c9ebd43589 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 80067
diff changeset
13 ;; GNU Emacs is free software: you can redistribute it and/or modify
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
94663
90c9ebd43589 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 80067
diff changeset
15 ;; the Free Software Foundation, either version 3 of the License, or
90c9ebd43589 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 80067
diff changeset
16 ;; (at your option) any later version.
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
17
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
21 ;; GNU General Public License for more details.
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
22
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
94663
90c9ebd43589 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 80067
diff changeset
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
25
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
26 ;;; Commentary:
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
27
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
28 ;; This file contains all macros that are used in more than one file.
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
29 ;; If you run "make recompile" in CVS Emacs and see the message
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
30 ;; "Source is newer than compiled," it is a sign that macro probably
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
31 ;; needs to be moved here.
68213
a08b47775f9b * mh-acros.el (require): Remove defadvice of require as defadvice is
Bill Wohler <wohler@newt.com>
parents: 68189
diff changeset
32
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
33 ;; Historically, it was so named with a silent "m" so that it would be
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
34 ;; compiled first. Otherwise, "make recompile" in CVS Emacs would use
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
35 ;; compiled files with stale macro definitions. Later, no-byte-compile
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
36 ;; was added to the Local Variables section to avoid this problem and
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
37 ;; because it's pointless to compile a file full of macros. But we
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
38 ;; kept the name.
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
39
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
40 ;;; Change Log:
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
41
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
42 ;;; Code:
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
43
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
44 (require 'cl)
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
45
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
46
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
47
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
48 ;;; Compatibility
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
49
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
50 ;;;###mh-autoload
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
51 (defmacro mh-require-cl ()
67760
9c3504ae6060 Follow MH-E Developers Guide conventions. Use `' quotes for Help
Bill Wohler <wohler@newt.com>
parents: 67758
diff changeset
52 "Macro to load \"cl\" if needed.
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
53
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
54 Emacs coding conventions require that the \"cl\" package not be
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
55 required at runtime. However, the \"cl\" package in Emacs 21.4
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
56 and earlier left \"cl\" routines in their macro expansions. In
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
57 particular, the expansion of (setf (gethash ...) ...) used
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
58 functions in \"cl\" at run time. This macro recognizes that and
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
59 loads \"cl\" appropriately."
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
60 (if (eq (car (macroexpand '(setf (gethash foo bar) baz))) 'cl-puthash)
56787
25da1d331c99 Upgraded to MH-E version 7.82.
Bill Wohler <wohler@newt.com>
parents: 56751
diff changeset
61 `(require 'cl)
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
62 `(eval-when-compile (require 'cl))))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
63
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
64 ;;;###mh-autoload
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
65 (defmacro mh-do-in-gnu-emacs (&rest body)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
66 "Execute BODY if in GNU Emacs."
80067
0f7d101ad47f (mh-do-in-gnu-emacs, mh-do-in-xemacs)
Richard M. Stallman <rms@gnu.org>
parents: 79713
diff changeset
67 (declare (debug t))
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
68 (unless (featurep 'xemacs) `(progn ,@body)))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
69 (put 'mh-do-in-gnu-emacs 'lisp-indent-hook 'defun)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
70
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
71 ;;;###mh-autoload
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
72 (defmacro mh-do-in-xemacs (&rest body)
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
73 "Execute BODY if in XEmacs."
80067
0f7d101ad47f (mh-do-in-gnu-emacs, mh-do-in-xemacs)
Richard M. Stallman <rms@gnu.org>
parents: 79713
diff changeset
74 (declare (debug t))
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
75 (when (featurep 'xemacs) `(progn ,@body)))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
76 (put 'mh-do-in-xemacs 'lisp-indent-hook 'defun)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
77
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
78 ;;;###mh-autoload
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
79 (defmacro mh-funcall-if-exists (function &rest args)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
80 "Call FUNCTION with ARGS as parameters if it exists."
62847
aa8c2e12ee24 Upgraded to MH-E version 7.84.
Bill Wohler <wohler@newt.com>
parents: 62465
diff changeset
81 (when (fboundp function)
aa8c2e12ee24 Upgraded to MH-E version 7.84.
Bill Wohler <wohler@newt.com>
parents: 62465
diff changeset
82 `(when (fboundp ',function)
aa8c2e12ee24 Upgraded to MH-E version 7.84.
Bill Wohler <wohler@newt.com>
parents: 62465
diff changeset
83 (funcall ',function ,@args))))
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
84
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
85 ;;;###mh-autoload
70061
b3ab71ac7f4e * mh-acros.el (mh-defun-compat): Rename to defun-mh in order that
Bill Wohler <wohler@newt.com>
parents: 70028
diff changeset
86 (defmacro defun-mh (name function arg-list &rest body)
68520
6a7173abcf59 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
parents: 68465
diff changeset
87 "Create function NAME.
6a7173abcf59 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
parents: 68465
diff changeset
88 If FUNCTION exists, then NAME becomes an alias for FUNCTION.
6a7173abcf59 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
parents: 68465
diff changeset
89 Otherwise, create function NAME with ARG-LIST and BODY."
68137
ec4727559827 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Move here from
Bill Wohler <wohler@newt.com>
parents: 67760
diff changeset
90 (let ((defined-p (fboundp function)))
68520
6a7173abcf59 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
parents: 68465
diff changeset
91 (if defined-p
6a7173abcf59 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
parents: 68465
diff changeset
92 `(defalias ',name ',function)
6a7173abcf59 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
parents: 68465
diff changeset
93 `(defun ,name ,arg-list ,@body))))
70061
b3ab71ac7f4e * mh-acros.el (mh-defun-compat): Rename to defun-mh in order that
Bill Wohler <wohler@newt.com>
parents: 70028
diff changeset
94 (put 'defun-mh 'lisp-indent-function 'defun)
95688
33aa6dc538c6 (toplevel): Put `doc-string-elt' properties on `defun-mh'
John Paul Wallington <jpw@pobox.com>
parents: 94663
diff changeset
95 (put 'defun-mh 'doc-string-elt 4)
68137
ec4727559827 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Move here from
Bill Wohler <wohler@newt.com>
parents: 67760
diff changeset
96
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
97 ;;;###mh-autoload
70061
b3ab71ac7f4e * mh-acros.el (mh-defun-compat): Rename to defun-mh in order that
Bill Wohler <wohler@newt.com>
parents: 70028
diff changeset
98 (defmacro defmacro-mh (name macro arg-list &rest body)
68520
6a7173abcf59 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
parents: 68465
diff changeset
99 "Create macro NAME.
6a7173abcf59 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
parents: 68465
diff changeset
100 If MACRO exists, then NAME becomes an alias for MACRO.
6a7173abcf59 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
parents: 68465
diff changeset
101 Otherwise, create macro NAME with ARG-LIST and BODY."
6a7173abcf59 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
parents: 68465
diff changeset
102 (let ((defined-p (fboundp macro)))
6a7173abcf59 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
parents: 68465
diff changeset
103 (if defined-p
6a7173abcf59 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
parents: 68465
diff changeset
104 `(defalias ',name ',macro)
6a7173abcf59 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
parents: 68465
diff changeset
105 `(defmacro ,name ,arg-list ,@body))))
70061
b3ab71ac7f4e * mh-acros.el (mh-defun-compat): Rename to defun-mh in order that
Bill Wohler <wohler@newt.com>
parents: 70028
diff changeset
106 (put 'defmacro-mh 'lisp-indent-function 'defun)
95688
33aa6dc538c6 (toplevel): Put `doc-string-elt' properties on `defun-mh'
John Paul Wallington <jpw@pobox.com>
parents: 94663
diff changeset
107 (put 'defmacro-mh 'doc-string-elt 4)
68137
ec4727559827 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Move here from
Bill Wohler <wohler@newt.com>
parents: 67760
diff changeset
108
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
109
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
110
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
111 ;;; Miscellaneous
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
112
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
113 ;;;###mh-autoload
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
114 (defmacro mh-make-local-hook (hook)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
115 "Make HOOK local if needed.
67758
6b063593fdad Follow Emacs coding conventions. Use default setting of
Bill Wohler <wohler@newt.com>
parents: 67681
diff changeset
116 XEmacs and versions of GNU Emacs before 21.1 require
6b063593fdad Follow Emacs coding conventions. Use default setting of
Bill Wohler <wohler@newt.com>
parents: 67681
diff changeset
117 `make-local-hook' to be called."
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
118 (when (and (fboundp 'make-local-hook)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
119 (not (get 'make-local-hook 'byte-obsolete-info)))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
120 `(make-local-hook ,hook)))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
121
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
122 ;;;###mh-autoload
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
123 (defmacro mh-mark-active-p (check-transient-mark-mode-flag)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
124 "A macro that expands into appropriate code in XEmacs and nil in GNU Emacs.
67758
6b063593fdad Follow Emacs coding conventions. Use default setting of
Bill Wohler <wohler@newt.com>
parents: 67681
diff changeset
125 In GNU Emacs if CHECK-TRANSIENT-MARK-MODE-FLAG is non-nil then
6b063593fdad Follow Emacs coding conventions. Use default setting of
Bill Wohler <wohler@newt.com>
parents: 67681
diff changeset
126 check if variable `transient-mark-mode' is active."
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
127 (cond ((featurep 'xemacs) ;XEmacs
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
128 `(and (boundp 'zmacs-regions) zmacs-regions (region-active-p)))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
129 ((not check-transient-mark-mode-flag) ;GNU Emacs
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
130 `(and (boundp 'mark-active) mark-active))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
131 (t ;GNU Emacs
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
132 `(and (boundp 'transient-mark-mode) transient-mark-mode
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
133 (boundp 'mark-active) mark-active))))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
134
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
135 ;; Shush compiler.
70028
d81780942bb8 * mh-acros.el (struct, x, y): No need to wrap defvar with
Bill Wohler <wohler@newt.com>
parents: 68520
diff changeset
136 (defvar struct) ; XEmacs
d81780942bb8 * mh-acros.el (struct, x, y): No need to wrap defvar with
Bill Wohler <wohler@newt.com>
parents: 68520
diff changeset
137 (defvar x) ; XEmacs
d81780942bb8 * mh-acros.el (struct, x, y): No need to wrap defvar with
Bill Wohler <wohler@newt.com>
parents: 68520
diff changeset
138 (defvar y) ; XEmacs
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
139
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
140 ;;;###mh-autoload
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
141 (defmacro mh-defstruct (name-spec &rest fields)
67760
9c3504ae6060 Follow MH-E Developers Guide conventions. Use `' quotes for Help
Bill Wohler <wohler@newt.com>
parents: 67758
diff changeset
142 "Replacement for `defstruct' from the \"cl\" package.
9c3504ae6060 Follow MH-E Developers Guide conventions. Use `' quotes for Help
Bill Wohler <wohler@newt.com>
parents: 67758
diff changeset
143 The `defstruct' in the \"cl\" library produces compiler warnings,
9c3504ae6060 Follow MH-E Developers Guide conventions. Use `' quotes for Help
Bill Wohler <wohler@newt.com>
parents: 67758
diff changeset
144 and generates code that uses functions present in \"cl\" at
67758
6b063593fdad Follow Emacs coding conventions. Use default setting of
Bill Wohler <wohler@newt.com>
parents: 67681
diff changeset
145 run-time. This is a partial replacement, that avoids these
6b063593fdad Follow Emacs coding conventions. Use default setting of
Bill Wohler <wohler@newt.com>
parents: 67681
diff changeset
146 issues.
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
147
67758
6b063593fdad Follow Emacs coding conventions. Use default setting of
Bill Wohler <wohler@newt.com>
parents: 67681
diff changeset
148 NAME-SPEC declares the name of the structure, while FIELDS
6b063593fdad Follow Emacs coding conventions. Use default setting of
Bill Wohler <wohler@newt.com>
parents: 67681
diff changeset
149 describes the various structure fields. Lookup `defstruct' for
6b063593fdad Follow Emacs coding conventions. Use default setting of
Bill Wohler <wohler@newt.com>
parents: 67681
diff changeset
150 more details."
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
151 (let* ((struct-name (if (atom name-spec) name-spec (car name-spec)))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
152 (conc-name (or (and (consp name-spec)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
153 (cadr (assoc :conc-name (cdr name-spec))))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
154 (format "%s-" struct-name)))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
155 (predicate (intern (format "%s-p" struct-name)))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
156 (constructor (or (and (consp name-spec)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
157 (cadr (assoc :constructor (cdr name-spec))))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
158 (intern (format "make-%s" struct-name))))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
159 (field-names (mapcar #'(lambda (x) (if (atom x) x (car x))) fields))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
160 (field-init-forms (mapcar #'(lambda (x) (and (consp x) (cadr x)))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
161 fields))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
162 (struct (gensym "S"))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
163 (x (gensym "X"))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
164 (y (gensym "Y")))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
165 `(progn
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
166 (defun* ,constructor (&key ,@(mapcar* #'(lambda (x y) (list x y))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
167 field-names field-init-forms))
56751
72a02133177e Upgraded to MH-E version 7.81.
Bill Wohler <wohler@newt.com>
parents: 56677
diff changeset
168 (list (quote ,struct-name) ,@field-names))
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
169 (defun ,predicate (arg)
56751
72a02133177e Upgraded to MH-E version 7.81.
Bill Wohler <wohler@newt.com>
parents: 56677
diff changeset
170 (and (consp arg) (eq (car arg) (quote ,struct-name))))
72a02133177e Upgraded to MH-E version 7.81.
Bill Wohler <wohler@newt.com>
parents: 56677
diff changeset
171 ,@(loop for x from 1
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
172 for y in field-names
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
173 collect `(defmacro ,(intern (format "%s%s" conc-name y)) (z)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
174 (list 'nth ,x z)))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
175 (quote ,struct-name))))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
176
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
177 ;;;###mh-autoload
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
178 (defmacro with-mh-folder-updating (save-modification-flag &rest body)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
179 "Format is (with-mh-folder-updating (SAVE-MODIFICATION-FLAG) &body BODY).
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
180 Execute BODY, which can modify the folder buffer without having to
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
181 worry about file locking or the read-only flag, and return its result.
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
182 If SAVE-MODIFICATION-FLAG is non-nil, the buffer's modification flag
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
183 is unchanged, otherwise it is cleared."
80067
0f7d101ad47f (mh-do-in-gnu-emacs, mh-do-in-xemacs)
Richard M. Stallman <rms@gnu.org>
parents: 79713
diff changeset
184 (declare (debug t))
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
185 (setq save-modification-flag (car save-modification-flag)) ; CL style
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
186 `(prog1
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
187 (let ((mh-folder-updating-mod-flag (buffer-modified-p))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
188 (buffer-read-only nil)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
189 (buffer-file-name nil)) ;don't let the buffer get locked
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
190 (prog1
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
191 (progn
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
192 ,@body)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
193 (mh-set-folder-modified-p mh-folder-updating-mod-flag)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
194 ,@(if (not save-modification-flag)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
195 '((mh-set-folder-modified-p nil)))))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
196 (put 'with-mh-folder-updating 'lisp-indent-hook 'defun)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
197
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
198 ;;;###mh-autoload
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
199 (defmacro mh-in-show-buffer (show-buffer &rest body)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
200 "Format is (mh-in-show-buffer (SHOW-BUFFER) &body BODY).
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
201 Display buffer SHOW-BUFFER in other window and execute BODY in it.
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
202 Stronger than `save-excursion', weaker than `save-window-excursion'."
80067
0f7d101ad47f (mh-do-in-gnu-emacs, mh-do-in-xemacs)
Richard M. Stallman <rms@gnu.org>
parents: 79713
diff changeset
203 (declare (debug t))
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
204 (setq show-buffer (car show-buffer)) ; CL style
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
205 `(let ((mh-in-show-buffer-saved-window (selected-window)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
206 (switch-to-buffer-other-window ,show-buffer)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
207 (if mh-bury-show-buffer-flag (bury-buffer (current-buffer)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
208 (unwind-protect
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
209 (progn
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
210 ,@body)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
211 (select-window mh-in-show-buffer-saved-window))))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
212 (put 'mh-in-show-buffer 'lisp-indent-hook 'defun)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
213
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
214 ;;;###mh-autoload
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
215 (defmacro mh-do-at-event-location (event &rest body)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
216 "Switch to the location of EVENT and execute BODY.
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
217 After BODY has been executed return to original window. The
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
218 modification flag of the buffer in the event window is
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
219 preserved."
80067
0f7d101ad47f (mh-do-in-gnu-emacs, mh-do-in-xemacs)
Richard M. Stallman <rms@gnu.org>
parents: 79713
diff changeset
220 (declare (debug t))
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
221 (let ((event-window (make-symbol "event-window"))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
222 (event-position (make-symbol "event-position"))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
223 (original-window (make-symbol "original-window"))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
224 (original-position (make-symbol "original-position"))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
225 (modified-flag (make-symbol "modified-flag")))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
226 `(save-excursion
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
227 (let* ((,event-window
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
228 (or (mh-funcall-if-exists posn-window (event-start ,event))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
229 (mh-funcall-if-exists event-window ,event)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
230 (,event-position
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
231 (or (mh-funcall-if-exists posn-point (event-start ,event))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
232 (mh-funcall-if-exists event-closest-point ,event)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
233 (,original-window (selected-window))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
234 (,original-position (progn
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
235 (set-buffer (window-buffer ,event-window))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
236 (set-marker (make-marker) (point))))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
237 (,modified-flag (buffer-modified-p))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
238 (buffer-read-only nil))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
239 (unwind-protect (progn
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
240 (select-window ,event-window)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
241 (goto-char ,event-position)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
242 ,@body)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
243 (set-buffer-modified-p ,modified-flag)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
244 (goto-char ,original-position)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
245 (set-marker ,original-position nil)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
246 (select-window ,original-window))))))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
247 (put 'mh-do-at-event-location 'lisp-indent-hook 'defun)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
248
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
249
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
250
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
251 ;;; Sequences and Ranges
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
252
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
253 ;;;###mh-autoload
80067
0f7d101ad47f (mh-do-in-gnu-emacs, mh-do-in-xemacs)
Richard M. Stallman <rms@gnu.org>
parents: 79713
diff changeset
254 (defsubst mh-seq-msgs (sequence)
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
255 "Extract messages from the given SEQUENCE."
80067
0f7d101ad47f (mh-do-in-gnu-emacs, mh-do-in-xemacs)
Richard M. Stallman <rms@gnu.org>
parents: 79713
diff changeset
256 (cdr sequence))
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
257
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
258 ;;;###mh-autoload
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
259 (defmacro mh-iterate-on-messages-in-region (var begin end &rest body)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
260 "Iterate over region.
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
261
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
262 VAR is bound to the message on the current line as we loop
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
263 starting from BEGIN till END. In each step BODY is executed.
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
264
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
265 If VAR is nil then the loop is executed without any binding."
80067
0f7d101ad47f (mh-do-in-gnu-emacs, mh-do-in-xemacs)
Richard M. Stallman <rms@gnu.org>
parents: 79713
diff changeset
266 (declare (debug (symbolp body)))
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
267 (unless (symbolp var)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
268 (error "Can not bind the non-symbol %s" var))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
269 (let ((binding-needed-flag var))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
270 `(save-excursion
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
271 (goto-char ,begin)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
272 (beginning-of-line)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
273 (while (and (<= (point) ,end) (not (eobp)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
274 (when (looking-at mh-scan-valid-regexp)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
275 (let ,(if binding-needed-flag `((,var (mh-get-msg-num t))) ())
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
276 ,@body))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
277 (forward-line 1)))))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
278 (put 'mh-iterate-on-messages-in-region 'lisp-indent-hook 'defun)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
279
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
280 ;;;###mh-autoload
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
281 (defmacro mh-iterate-on-range (var range &rest body)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
282 "Iterate an operation over a region or sequence.
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
283
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
284 VAR is bound to each message in turn in a loop over RANGE, which
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
285 can be a message number, a list of message numbers, a sequence, a
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
286 region in a cons cell, or a MH range (something like last:20) in
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
287 a string. In each iteration, BODY is executed.
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
288
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
289 The parameter RANGE is usually created with
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
290 `mh-interactive-range' in order to provide a uniform interface to
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
291 MH-E functions."
80067
0f7d101ad47f (mh-do-in-gnu-emacs, mh-do-in-xemacs)
Richard M. Stallman <rms@gnu.org>
parents: 79713
diff changeset
292 (declare (debug (symbolp body)))
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
293 (unless (symbolp var)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
294 (error "Can not bind the non-symbol %s" var))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
295 (let ((binding-needed-flag var)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
296 (msgs (make-symbol "msgs"))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
297 (seq-hash-table (make-symbol "seq-hash-table")))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
298 `(cond ((numberp ,range)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
299 (when (mh-goto-msg ,range t t)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
300 (let ,(if binding-needed-flag `((,var ,range)) ())
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
301 ,@body)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
302 ((and (consp ,range)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
303 (numberp (car ,range)) (numberp (cdr ,range)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
304 (mh-iterate-on-messages-in-region ,var
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
305 (car ,range) (cdr ,range)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
306 ,@body))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
307 (t (let ((,msgs (cond ((and ,range (symbolp ,range))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
308 (mh-seq-to-msgs ,range))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
309 ((stringp ,range)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
310 (mh-translate-range mh-current-folder
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
311 ,range))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
312 (t ,range)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
313 (,seq-hash-table (make-hash-table)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
314 (dolist (msg ,msgs)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
315 (setf (gethash msg ,seq-hash-table) t))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
316 (mh-iterate-on-messages-in-region v (point-min) (point-max)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
317 (when (gethash v ,seq-hash-table)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
318 (let ,(if binding-needed-flag `((,var v)) ())
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
319 ,@body))))))))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
320 (put 'mh-iterate-on-range 'lisp-indent-hook 'defun)
66357
f5ade15d46f2 * mh-identity.el (mh-assoc-ignore-case): Merge with version in
Bill Wohler <wohler@newt.com>
parents: 64085
diff changeset
321
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
322 (provide 'mh-acros)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
323
67681
3a8785724cca * mh-acros.el:
Bill Wohler <wohler@newt.com>
parents: 66357
diff changeset
324 ;; Local Variables:
3a8785724cca * mh-acros.el:
Bill Wohler <wohler@newt.com>
parents: 66357
diff changeset
325 ;; no-byte-compile: t
3a8785724cca * mh-acros.el:
Bill Wohler <wohler@newt.com>
parents: 66357
diff changeset
326 ;; indent-tabs-mode: nil
3a8785724cca * mh-acros.el:
Bill Wohler <wohler@newt.com>
parents: 66357
diff changeset
327 ;; sentence-end-double-space: nil
3a8785724cca * mh-acros.el:
Bill Wohler <wohler@newt.com>
parents: 66357
diff changeset
328 ;; End:
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
329
56677
5aafbbdd005f Add arch taglines
Miles Bader <miles@gnu.org>
parents: 56676
diff changeset
330 ;; arch-tag: b383b49a-494f-4ed0-a30a-cb6d5d2da4ff
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
331 ;;; mh-acros.el ends here