annotate lisp/mh-e/mh-acros.el @ 85682:919974c09488

(struct frame): Move all bit fields after the first bit field to take advantage of the available space. Group all the chars together to reduce wasted space due to padding.
author Dan Nicolaescu <dann@ics.uci.edu>
date Fri, 26 Oct 2007 18:09:36 +0000
parents 800dd75c042b
children 3c2488d0ebd9
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
75347
e3694f1cb928 Add 2007 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 70061
diff changeset
3 ;; Copyright (C) 2004, 2006, 2007 Free Software Foundation, Inc.
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
4
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
5 ;; Author: Satyaki Das <satyaki@theforce.stanford.edu>
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
6 ;; Maintainer: Bill Wohler <wohler@newt.com>
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
7 ;; Keywords: mail
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
8 ;; See: mh-e.el
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
9
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
11
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
78231
800dd75c042b Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents: 75347
diff changeset
14 ;; the Free Software Foundation; either version 3, or (at your option)
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
15 ;; any later version.
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
16
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
17 ;; 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
18 ;; 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
19 ;; 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
20 ;; GNU General Public License for more details.
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
21
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64085
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 62847
diff changeset
24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 62847
diff changeset
25 ;; Boston, MA 02110-1301, USA.
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
26
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
27 ;;; Commentary:
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
28
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
29 ;; 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
30 ;; 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
31 ;; "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
32 ;; 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
33
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
34 ;; 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
35 ;; compiled first. Otherwise, "make recompile" in CVS Emacs would use
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
36 ;; compiled files with stale macro definitions. Later, no-byte-compile
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
37 ;; 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
38 ;; 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
39 ;; kept the name.
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
40
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
41 ;;; Change Log:
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
42
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
43 ;;; Code:
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
44
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
45 (require 'cl)
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
46
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
47
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
48
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
49 ;;; Compatibility
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
50
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
51 ;;;###mh-autoload
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
52 (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
53 "Macro to load \"cl\" if needed.
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
54
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
55 Emacs coding conventions require that the \"cl\" package not be
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
56 required at runtime. However, the \"cl\" package in Emacs 21.4
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
57 and earlier left \"cl\" routines in their macro expansions. In
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
58 particular, the expansion of (setf (gethash ...) ...) used
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
59 functions in \"cl\" at run time. This macro recognizes that and
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
60 loads \"cl\" appropriately."
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
61 (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
62 `(require 'cl)
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
63 `(eval-when-compile (require 'cl))))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
64
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
65 ;;;###mh-autoload
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
66 (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
67 "Execute BODY if in GNU Emacs."
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."
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
74 (when (featurep 'xemacs) `(progn ,@body)))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
75 (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
76
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
77 ;;;###mh-autoload
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
78 (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
79 "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
80 (when (fboundp function)
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 (funcall ',function ,@args))))
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
83
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
84 ;;;###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
85 (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
86 "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
87 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
88 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
89 (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
90 (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
91 `(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
92 `(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
93 (put 'defun-mh 'lisp-indent-function 'defun)
68137
ec4727559827 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Move here from
Bill Wohler <wohler@newt.com>
parents: 67760
diff changeset
94
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
95 ;;;###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
96 (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
97 "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
98 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
99 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
100 (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
101 (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
102 `(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
103 `(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
104 (put 'defmacro-mh 'lisp-indent-function 'defun)
68137
ec4727559827 * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Move here from
Bill Wohler <wohler@newt.com>
parents: 67760
diff changeset
105
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
106
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
107
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
108 ;;; Miscellaneous
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 ;;;###mh-autoload
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
111 (defmacro mh-make-local-hook (hook)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
112 "Make HOOK local if needed.
67758
6b063593fdad Follow Emacs coding conventions. Use default setting of
Bill Wohler <wohler@newt.com>
parents: 67681
diff changeset
113 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
114 `make-local-hook' to be called."
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
115 (when (and (fboundp 'make-local-hook)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
116 (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
117 `(make-local-hook ,hook)))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
118
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
119 ;;;###mh-autoload
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
120 (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
121 "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
122 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
123 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
124 (cond ((featurep 'xemacs) ;XEmacs
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
125 `(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
126 ((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
127 `(and (boundp 'mark-active) mark-active))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
128 (t ;GNU Emacs
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
129 `(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
130 (boundp 'mark-active) mark-active))))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
131
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
132 ;; 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
133 (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
134 (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
135 (defvar y) ; XEmacs
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
136
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
137 ;;;###mh-autoload
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
138 (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
139 "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
140 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
141 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
142 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
143 issues.
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
144
67758
6b063593fdad Follow Emacs coding conventions. Use default setting of
Bill Wohler <wohler@newt.com>
parents: 67681
diff changeset
145 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
146 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
147 more details."
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
148 (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
149 (conc-name (or (and (consp name-spec)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
150 (cadr (assoc :conc-name (cdr name-spec))))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
151 (format "%s-" struct-name)))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
152 (predicate (intern (format "%s-p" struct-name)))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
153 (constructor (or (and (consp name-spec)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
154 (cadr (assoc :constructor (cdr name-spec))))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
155 (intern (format "make-%s" struct-name))))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
156 (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
157 (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
158 fields))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
159 (struct (gensym "S"))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
160 (x (gensym "X"))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
161 (y (gensym "Y")))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
162 `(progn
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
163 (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
164 field-names field-init-forms))
56751
72a02133177e Upgraded to MH-E version 7.81.
Bill Wohler <wohler@newt.com>
parents: 56677
diff changeset
165 (list (quote ,struct-name) ,@field-names))
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
166 (defun ,predicate (arg)
56751
72a02133177e Upgraded to MH-E version 7.81.
Bill Wohler <wohler@newt.com>
parents: 56677
diff changeset
167 (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
168 ,@(loop for x from 1
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
169 for y in field-names
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
170 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
171 (list 'nth ,x z)))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
172 (quote ,struct-name))))
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
173
68465
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
174 ;;;###mh-autoload
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
175 (defmacro with-mh-folder-updating (save-modification-flag &rest body)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
176 "Format is (with-mh-folder-updating (SAVE-MODIFICATION-FLAG) &body BODY).
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
177 Execute BODY, which can modify the folder buffer without having to
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
178 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
179 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
180 is unchanged, otherwise it is cleared."
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
181 (setq save-modification-flag (car save-modification-flag)) ; CL style
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
182 `(prog1
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
183 (let ((mh-folder-updating-mod-flag (buffer-modified-p))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
184 (buffer-read-only nil)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
185 (buffer-file-name nil)) ;don't let the buffer get locked
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 (progn
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
188 ,@body)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
189 (mh-set-folder-modified-p mh-folder-updating-mod-flag)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
190 ,@(if (not save-modification-flag)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
191 '((mh-set-folder-modified-p nil)))))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
192 (put 'with-mh-folder-updating 'lisp-indent-hook 'defun)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
193
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
194 ;;;###mh-autoload
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
195 (defmacro mh-in-show-buffer (show-buffer &rest body)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
196 "Format is (mh-in-show-buffer (SHOW-BUFFER) &body BODY).
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
197 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
198 Stronger than `save-excursion', weaker than `save-window-excursion'."
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
199 (setq show-buffer (car show-buffer)) ; CL style
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
200 `(let ((mh-in-show-buffer-saved-window (selected-window)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
201 (switch-to-buffer-other-window ,show-buffer)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
202 (if mh-bury-show-buffer-flag (bury-buffer (current-buffer)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
203 (unwind-protect
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
204 (progn
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
205 ,@body)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
206 (select-window mh-in-show-buffer-saved-window))))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
207 (put 'mh-in-show-buffer 'lisp-indent-hook 'defun)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
208
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
209 ;;;###mh-autoload
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
210 (defmacro mh-do-at-event-location (event &rest body)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
211 "Switch to the location of EVENT and execute BODY.
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
212 After BODY has been executed return to original window. The
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
213 modification flag of the buffer in the event window is
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
214 preserved."
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
215 (let ((event-window (make-symbol "event-window"))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
216 (event-position (make-symbol "event-position"))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
217 (original-window (make-symbol "original-window"))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
218 (original-position (make-symbol "original-position"))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
219 (modified-flag (make-symbol "modified-flag")))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
220 `(save-excursion
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
221 (let* ((,event-window
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
222 (or (mh-funcall-if-exists posn-window (event-start ,event))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
223 (mh-funcall-if-exists event-window ,event)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
224 (,event-position
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
225 (or (mh-funcall-if-exists posn-point (event-start ,event))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
226 (mh-funcall-if-exists event-closest-point ,event)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
227 (,original-window (selected-window))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
228 (,original-position (progn
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
229 (set-buffer (window-buffer ,event-window))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
230 (set-marker (make-marker) (point))))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
231 (,modified-flag (buffer-modified-p))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
232 (buffer-read-only nil))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
233 (unwind-protect (progn
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
234 (select-window ,event-window)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
235 (goto-char ,event-position)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
236 ,@body)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
237 (set-buffer-modified-p ,modified-flag)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
238 (goto-char ,original-position)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
239 (set-marker ,original-position nil)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
240 (select-window ,original-window))))))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
241 (put 'mh-do-at-event-location 'lisp-indent-hook 'defun)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
242
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
243
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
244
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
245 ;;; Sequences and Ranges
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
246
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
247 ;;;###mh-autoload
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
248 (defmacro mh-seq-msgs (sequence)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
249 "Extract messages from the given SEQUENCE."
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
250 (list 'cdr sequence))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
251
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
252 ;;;###mh-autoload
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
253 (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
254 "Iterate over region.
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
255
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
256 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
257 starting from BEGIN till END. In each step BODY is executed.
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
258
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
259 If VAR is nil then the loop is executed without any binding."
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
260 (unless (symbolp var)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
261 (error "Can not bind the non-symbol %s" var))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
262 (let ((binding-needed-flag var))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
263 `(save-excursion
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
264 (goto-char ,begin)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
265 (beginning-of-line)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
266 (while (and (<= (point) ,end) (not (eobp)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
267 (when (looking-at mh-scan-valid-regexp)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
268 (let ,(if binding-needed-flag `((,var (mh-get-msg-num t))) ())
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
269 ,@body))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
270 (forward-line 1)))))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
271 (put 'mh-iterate-on-messages-in-region 'lisp-indent-hook 'defun)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
272
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
273 ;;;###mh-autoload
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
274 (defmacro mh-iterate-on-range (var range &rest body)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
275 "Iterate an operation over a region or sequence.
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
276
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
277 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
278 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
279 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
280 a string. In each iteration, BODY is executed.
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
281
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
282 The parameter RANGE is usually created with
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
283 `mh-interactive-range' in order to provide a uniform interface to
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
284 MH-E functions."
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
285 (unless (symbolp var)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
286 (error "Can not bind the non-symbol %s" var))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
287 (let ((binding-needed-flag var)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
288 (msgs (make-symbol "msgs"))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
289 (seq-hash-table (make-symbol "seq-hash-table")))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
290 `(cond ((numberp ,range)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
291 (when (mh-goto-msg ,range t t)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
292 (let ,(if binding-needed-flag `((,var ,range)) ())
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
293 ,@body)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
294 ((and (consp ,range)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
295 (numberp (car ,range)) (numberp (cdr ,range)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
296 (mh-iterate-on-messages-in-region ,var
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
297 (car ,range) (cdr ,range)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
298 ,@body))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
299 (t (let ((,msgs (cond ((and ,range (symbolp ,range))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
300 (mh-seq-to-msgs ,range))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
301 ((stringp ,range)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
302 (mh-translate-range mh-current-folder
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
303 ,range))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
304 (t ,range)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
305 (,seq-hash-table (make-hash-table)))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
306 (dolist (msg ,msgs)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
307 (setf (gethash msg ,seq-hash-table) t))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
308 (mh-iterate-on-messages-in-region v (point-min) (point-max)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
309 (when (gethash v ,seq-hash-table)
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
310 (let ,(if binding-needed-flag `((,var v)) ())
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
311 ,@body))))))))
37d03b3298bf The Great Cleanup
Bill Wohler <wohler@newt.com>
parents: 68236
diff changeset
312 (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
313
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
314 (provide 'mh-acros)
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
315
67681
3a8785724cca * mh-acros.el:
Bill Wohler <wohler@newt.com>
parents: 66357
diff changeset
316 ;; Local Variables:
3a8785724cca * mh-acros.el:
Bill Wohler <wohler@newt.com>
parents: 66357
diff changeset
317 ;; no-byte-compile: t
3a8785724cca * mh-acros.el:
Bill Wohler <wohler@newt.com>
parents: 66357
diff changeset
318 ;; indent-tabs-mode: nil
3a8785724cca * mh-acros.el:
Bill Wohler <wohler@newt.com>
parents: 66357
diff changeset
319 ;; sentence-end-double-space: nil
3a8785724cca * mh-acros.el:
Bill Wohler <wohler@newt.com>
parents: 66357
diff changeset
320 ;; End:
56676
db6d7638a259 Upgraded to MH-E version 7.4.80.
Bill Wohler <wohler@newt.com>
parents:
diff changeset
321
56677
5aafbbdd005f Add arch taglines
Miles Bader <miles@gnu.org>
parents: 56676
diff changeset
322 ;; 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
323 ;;; mh-acros.el ends here