annotate lisp/ibuf-macs.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents a3e1f7134e6e
children 417b1e4d63cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
1 ;;; ibuf-macs.el --- macros for ibuffer
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
2
64762
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64091
diff changeset
3 ;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 100908
diff changeset
4 ;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
5
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
6 ;; Author: Colin Walters <walters@verbum.org>
49410
798119a6859c * ibuffer.el (ibuffer-window-list): Remove.
John Paul Wallington <jpw@pobox.com>
parents: 47740
diff changeset
7 ;; Maintainer: John Paul Wallington <jpw@gnu.org>
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
8 ;; Created: 6 Dec 2001
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
9 ;; Keywords: buffer, convenience
110016
a3e1f7134e6e Add "Version:" and "Package:" Lisp file headers.
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
10 ;; Package: ibuffer
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
11
44831
56a3e3132102 (ibuffer-save-marks): Call `ibuffer-redisplay-engine'.
Colin Walters <walters@gnu.org>
parents: 44573
diff changeset
12 ;; This file is part of GNU Emacs.
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
13
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94508
diff changeset
14 ;; GNU Emacs is free software: you can redistribute it and/or modify
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94508
diff changeset
15 ;; it under the terms of the GNU General Public License as published by
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94508
diff changeset
16 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94508
diff changeset
17 ;; (at your option) any later version.
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
18
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94508
diff changeset
19 ;; GNU Emacs is distributed in the hope that it will be useful,
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94508
diff changeset
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94508
diff changeset
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94508
diff changeset
22 ;; GNU General Public License for more details.
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
23
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
24 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94508
diff changeset
25 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
26
45078
829beb9a6a4b Follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 44831
diff changeset
27 ;;; Commentary:
829beb9a6a4b Follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 44831
diff changeset
28
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
29 ;;; Code:
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
30
42770
a7530850a26c (toplevel): Require `cl' when compiling.
Colin Walters <walters@gnu.org>
parents: 42702
diff changeset
31 (eval-when-compile
a7530850a26c (toplevel): Require `cl' when compiling.
Colin Walters <walters@gnu.org>
parents: 42702
diff changeset
32 (require 'cl))
a7530850a26c (toplevel): Require `cl' when compiling.
Colin Walters <walters@gnu.org>
parents: 42702
diff changeset
33
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
34 ;; From Paul Graham's "ANSI Common Lisp", adapted for Emacs Lisp here.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
35 (defmacro ibuffer-aif (test true-body &rest false-body)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
36 "Evaluate TRUE-BODY or FALSE-BODY depending on value of TEST.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
37 If TEST returns non-nil, bind `it' to the value, and evaluate
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
38 TRUE-BODY. Otherwise, evaluate forms in FALSE-BODY as if in `progn'.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
39 Compare with `if'."
94978
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
40 (declare (indent 2))
50010
d19b54decc23 (ibuffer-aif): Use `make-symbol' instead of
John Paul Wallington <jpw@pobox.com>
parents: 49588
diff changeset
41 (let ((sym (make-symbol "ibuffer-aif-sym")))
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
42 `(let ((,sym ,test))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
43 (if ,sym
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
44 (let ((it ,sym))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
45 ,true-body)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
46 (progn
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
47 ,@false-body)))))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
48
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
49 (defmacro ibuffer-awhen (test &rest body)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
50 "Evaluate BODY if TEST returns non-nil.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
51 During evaluation of body, bind `it' to the value returned by TEST."
94978
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
52 (declare (indent 1))
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
53 `(ibuffer-aif ,test
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
54 (progn ,@body)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
55 nil))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
56
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
57 (defmacro ibuffer-save-marks (&rest body)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
58 "Save the marked status of the buffers and execute BODY; restore marks."
94978
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
59 (declare (indent 0))
50010
d19b54decc23 (ibuffer-aif): Use `make-symbol' instead of
John Paul Wallington <jpw@pobox.com>
parents: 49588
diff changeset
60 (let ((bufsym (make-symbol "bufsym")))
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
61 `(let ((,bufsym (current-buffer))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
62 (ibuffer-save-marks-tmp-mark-list (ibuffer-current-state-list)))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
63 (unwind-protect
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
64 (progn
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
65 (save-excursion
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
66 ,@body))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
67 (with-current-buffer ,bufsym
44831
56a3e3132102 (ibuffer-save-marks): Call `ibuffer-redisplay-engine'.
Colin Walters <walters@gnu.org>
parents: 44573
diff changeset
68 (ibuffer-redisplay-engine
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
69 ;; Get rid of dead buffers
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
70 (delq nil
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
71 (mapcar #'(lambda (e) (when (buffer-live-p (car e))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
72 e))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
73 ibuffer-save-marks-tmp-mark-list)))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
74 (ibuffer-redisplay t))))))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
75
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
76 ;;;###autoload
94978
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
77 (defmacro* define-ibuffer-column (symbol (&key name inline props summarizer
69764
986a4b641e9e * ibuf-macs.el (define-ibuffer-column): Add a new key:
Dan Nicolaescu <dann@ics.uci.edu>
parents: 68651
diff changeset
78 header-mouse-map) &rest body)
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
79 "Define a column SYMBOL for use with `ibuffer-formats'.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
80
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
81 BODY will be called with `buffer' bound to the buffer object, and
45442
5bc8bee6a228 (define-ibuffer-column): Add third argument `ibuffer-buf'.
Colin Walters <walters@gnu.org>
parents: 45078
diff changeset
82 `mark' bound to the current mark on the buffer. The original ibuffer
5bc8bee6a228 (define-ibuffer-column): Add third argument `ibuffer-buf'.
Colin Walters <walters@gnu.org>
parents: 45078
diff changeset
83 buffer will be bound to `ibuffer-buf'.
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
84
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
85 If NAME is given, it will be used as a title for the column.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
86 Otherwise, the title will default to a capitalized version of the
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
87 SYMBOL's name. PROPS is a plist of additional properties to add to
43103
7f95aeaa47b3 (define-ibuffer-column): Add beginnings of support for a summary
Colin Walters <walters@gnu.org>
parents: 42770
diff changeset
88 the text, such as `mouse-face'. And SUMMARIZER, if given, is a
7f95aeaa47b3 (define-ibuffer-column): Add beginnings of support for a summary
Colin Walters <walters@gnu.org>
parents: 42770
diff changeset
89 function which will be passed a list of all the strings in its column;
7f95aeaa47b3 (define-ibuffer-column): Add beginnings of support for a summary
Colin Walters <walters@gnu.org>
parents: 42770
diff changeset
90 it should return a string to display at the bottom.
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
91
69768
cbdede292c6e (define-ibuffer-column): Document the new parameter.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 69764
diff changeset
92 If HEADER-MOUSE-MAP is given, it will be used as a keymap for the
cbdede292c6e (define-ibuffer-column): Document the new parameter.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 69764
diff changeset
93 title of the column.
cbdede292c6e (define-ibuffer-column): Document the new parameter.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 69764
diff changeset
94
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
95 Note that this macro expands into a `defun' for a function named
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
96 ibuffer-make-column-NAME. If INLINE is non-nil, then the form will be
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
97 inlined into the compiled format versions. This means that if you
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
98 change its definition, you should explicitly call
55509
dbf692d994dc (define-ibuffer-column, define-ibuffer-sorter, define-ibuffer-filter): Add usage
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
99 `ibuffer-recompile-formats'.
dbf692d994dc (define-ibuffer-column, define-ibuffer-sorter, define-ibuffer-filter): Add usage
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
100
dbf692d994dc (define-ibuffer-column, define-ibuffer-sorter, define-ibuffer-filter): Add usage
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
101 \(fn SYMBOL (&key NAME INLINE PROPS SUMMARIZER) &rest BODY)"
94978
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
102 (declare (indent defun))
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
103 (let* ((sym (intern (concat "ibuffer-make-column-"
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
104 (symbol-name symbol))))
43767
6bc5cbc8912d (define-ibuffer-column): Add :summarizer property.
Colin Walters <walters@gnu.org>
parents: 43103
diff changeset
105 (bod-1 `(with-current-buffer buffer
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
106 ,@body))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
107 (bod (if props
94978
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
108 `(propertize
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
109 ,bod-1
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
110 ,@props)
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
111 bod-1)))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
112 `(progn
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
113 ,(if inline
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
114 `(push '(,sym ,bod) ibuffer-inline-columns)
45709
77b4e2d5f8dd (define-ibuffer-column): Don't create a third argument for the
Colin Walters <walters@gnu.org>
parents: 45442
diff changeset
115 `(defun ,sym (buffer mark)
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
116 ,bod))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
117 (put (quote ,sym) 'ibuffer-column-name
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
118 ,(if (stringp name)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
119 name
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
120 (capitalize (symbol-name symbol))))
69764
986a4b641e9e * ibuf-macs.el (define-ibuffer-column): Add a new key:
Dan Nicolaescu <dann@ics.uci.edu>
parents: 68651
diff changeset
121 ,(if header-mouse-map `(put (quote ,sym) 'header-mouse-map ,header-mouse-map))
43103
7f95aeaa47b3 (define-ibuffer-column): Add beginnings of support for a summary
Colin Walters <walters@gnu.org>
parents: 42770
diff changeset
122 ,(if summarizer
43767
6bc5cbc8912d (define-ibuffer-column): Add :summarizer property.
Colin Walters <walters@gnu.org>
parents: 43103
diff changeset
123 ;; Store the name of the summarizing function.
43103
7f95aeaa47b3 (define-ibuffer-column): Add beginnings of support for a summary
Colin Walters <walters@gnu.org>
parents: 42770
diff changeset
124 `(put (quote ,sym) 'ibuffer-column-summarizer
7f95aeaa47b3 (define-ibuffer-column): Add beginnings of support for a summary
Colin Walters <walters@gnu.org>
parents: 42770
diff changeset
125 (quote ,summarizer)))
7f95aeaa47b3 (define-ibuffer-column): Add beginnings of support for a summary
Colin Walters <walters@gnu.org>
parents: 42770
diff changeset
126 ,(if summarizer
43767
6bc5cbc8912d (define-ibuffer-column): Add :summarizer property.
Colin Walters <walters@gnu.org>
parents: 43103
diff changeset
127 ;; This will store the actual values of the column
6bc5cbc8912d (define-ibuffer-column): Add :summarizer property.
Colin Walters <walters@gnu.org>
parents: 43103
diff changeset
128 ;; summary.
6bc5cbc8912d (define-ibuffer-column): Add :summarizer property.
Colin Walters <walters@gnu.org>
parents: 43103
diff changeset
129 `(put (quote ,sym) 'ibuffer-column-summary nil))
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
130 :autoload-end)))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
131
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
132 ;;;###autoload
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
133 (defmacro* define-ibuffer-sorter (name documentation
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49410
diff changeset
134 (&key
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
135 description)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
136 &rest body)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
137 "Define a method of sorting named NAME.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
138 DOCUMENTATION is the documentation of the function, which will be called
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
139 `ibuffer-do-sort-by-NAME'.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
140 DESCRIPTION is a short string describing the sorting method.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
141
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
142 For sorting, the forms in BODY will be evaluated with `a' bound to one
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
143 buffer object, and `b' bound to another. BODY should return a non-nil
55509
dbf692d994dc (define-ibuffer-column, define-ibuffer-sorter, define-ibuffer-filter): Add usage
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
144 value if and only if `a' is \"less than\" `b'.
dbf692d994dc (define-ibuffer-column, define-ibuffer-sorter, define-ibuffer-filter): Add usage
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
145
dbf692d994dc (define-ibuffer-column, define-ibuffer-sorter, define-ibuffer-filter): Add usage
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
146 \(fn NAME DOCUMENTATION (&key DESCRIPTION) &rest BODY)"
94978
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
147 (declare (indent 1))
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
148 `(progn
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
149 (defun ,(intern (concat "ibuffer-do-sort-by-" (symbol-name name))) ()
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
150 ,(or documentation "No :documentation specified for this sorting method.")
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
151 (interactive)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
152 (setq ibuffer-sorting-mode ',name)
94508
4d31120b081e (define-ibuffer-sorter): Define the sorter to reverse sorting order if
John Paul Wallington <jpw@pobox.com>
parents: 93975
diff changeset
153 (when (eq ibuffer-sorting-mode ibuffer-last-sorting-mode)
4d31120b081e (define-ibuffer-sorter): Define the sorter to reverse sorting order if
John Paul Wallington <jpw@pobox.com>
parents: 93975
diff changeset
154 (setq ibuffer-sorting-reversep (not ibuffer-sorting-reversep)))
4d31120b081e (define-ibuffer-sorter): Define the sorter to reverse sorting order if
John Paul Wallington <jpw@pobox.com>
parents: 93975
diff changeset
155 (ibuffer-redisplay t)
4d31120b081e (define-ibuffer-sorter): Define the sorter to reverse sorting order if
John Paul Wallington <jpw@pobox.com>
parents: 93975
diff changeset
156 (setq ibuffer-last-sorting-mode ',name))
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
157 (push (list ',name ,description
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
158 #'(lambda (a b)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
159 ,@body))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
160 ibuffer-sorting-functions-alist)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
161 :autoload-end))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
162
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
163 ;;;###autoload
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
164 (defmacro* define-ibuffer-op (op args
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
165 documentation
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49410
diff changeset
166 (&key
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
167 interactive
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
168 mark
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
169 modifier-p
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
170 dangerous
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
171 (opstring "operated on")
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
172 (active-opstring "Operate on")
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
173 complex)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
174 &rest body)
45442
5bc8bee6a228 (define-ibuffer-column): Add third argument `ibuffer-buf'.
Colin Walters <walters@gnu.org>
parents: 45078
diff changeset
175 "Generate a function which operates on a buffer.
5bc8bee6a228 (define-ibuffer-column): Add third argument `ibuffer-buf'.
Colin Walters <walters@gnu.org>
parents: 45078
diff changeset
176 OP becomes the name of the function; if it doesn't begin with
5bc8bee6a228 (define-ibuffer-column): Add third argument `ibuffer-buf'.
Colin Walters <walters@gnu.org>
parents: 45078
diff changeset
177 `ibuffer-do-', then that is prepended to it.
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
178 When an operation is performed, this function will be called once for
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
179 each marked buffer, with that buffer current.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
180
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
181 ARGS becomes the formal parameters of the function.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
182 DOCUMENTATION becomes the docstring of the function.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
183 INTERACTIVE becomes the interactive specification of the function.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
184 MARK describes which type of mark (:deletion, or nil) this operation
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
185 uses. :deletion means the function operates on buffers marked for
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
186 deletion, otherwise it acts on normally marked buffers.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
187 MODIFIER-P describes how the function modifies buffers. This is used
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
188 to set the modification flag of the Ibuffer buffer itself. Valid
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
189 values are:
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
190 nil - the function never modifiers buffers
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
191 t - the function it always modifies buffers
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
192 :maybe - attempt to discover this information by comparing the
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
193 buffer's modification flag.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
194 DANGEROUS is a boolean which should be set if the user should be
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
195 prompted before performing this operation.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
196 OPSTRING is a string which will be displayed to the user after the
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
197 operation is complete, in the form:
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
198 \"Operation complete; OPSTRING x buffers\"
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
199 ACTIVE-OPSTRING is a string which will be displayed to the user in a
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
200 confirmation message, in the form:
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
201 \"Really ACTIVE-OPSTRING x buffers?\"
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
202 COMPLEX means this function is special; see the source code of this
55509
dbf692d994dc (define-ibuffer-column, define-ibuffer-sorter, define-ibuffer-filter): Add usage
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
203 macro for exactly what it does.
dbf692d994dc (define-ibuffer-column, define-ibuffer-sorter, define-ibuffer-filter): Add usage
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
204
dbf692d994dc (define-ibuffer-column, define-ibuffer-sorter, define-ibuffer-filter): Add usage
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
205 \(fn OP ARGS DOCUMENTATION (&key INTERACTIVE MARK MODIFIER-P DANGEROUS OPSTRING ACTIVE-OPSTRING COMPLEX) &rest BODY)"
94978
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
206 (declare (indent 2))
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
207 `(progn
94978
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
208 (defun ,(intern (concat (if (string-match "^ibuffer-do" (symbol-name op))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
209 "" "ibuffer-do-") (symbol-name op)))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
210 ,args
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
211 ,(if (stringp documentation)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
212 documentation
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
213 (format "%s marked buffers." active-opstring))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
214 ,(if (not (null interactive))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
215 `(interactive ,interactive)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
216 '(interactive))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
217 (assert (derived-mode-p 'ibuffer-mode))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
218 (setq ibuffer-did-modification nil)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
219 (let ((marked-names (,(case mark
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
220 (:deletion
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
221 'ibuffer-deletion-marked-buffer-names)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
222 (t
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
223 'ibuffer-marked-buffer-names)))))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
224 (when (null marked-names)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
225 (setq marked-names (list (buffer-name (ibuffer-current-buffer))))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
226 (ibuffer-set-mark ,(case mark
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
227 (:deletion
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
228 'ibuffer-deletion-char)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
229 (t
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
230 'ibuffer-marked-char))))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
231 ,(let* ((finish (append
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
232 '(progn)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
233 (if (eq modifier-p t)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
234 '((setq ibuffer-did-modification t))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
235 ())
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
236 `((ibuffer-redisplay t)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
237 (message ,(concat "Operation finished; " opstring " %s buffers") count))))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
238 (inner-body (if complex
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
239 `(progn ,@body)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
240 `(progn
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
241 (with-current-buffer buf
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
242 (save-excursion
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
243 ,@body))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
244 t)))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
245 (body `(let ((count
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
246 (,(case mark
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
247 (:deletion
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
248 'ibuffer-map-deletion-lines)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
249 (t
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
250 'ibuffer-map-marked-lines))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
251 #'(lambda (buf mark)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
252 ,(if (eq modifier-p :maybe)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
253 `(let ((ibuffer-tmp-previous-buffer-modification
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
254 (buffer-modified-p buf)))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
255 (prog1 ,inner-body
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
256 (when (not (eq ibuffer-tmp-previous-buffer-modification
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
257 (buffer-modified-p buf)))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
258 (setq ibuffer-did-modification t))))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
259 inner-body)))))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
260 ,finish)))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
261 (if dangerous
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
262 `(when (ibuffer-confirm-operation-on ,active-opstring marked-names)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
263 ,body)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
264 body))))
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
265 :autoload-end))
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
266
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
267 ;;;###autoload
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
268 (defmacro* define-ibuffer-filter (name documentation
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49410
diff changeset
269 (&key
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
270 reader
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
271 description)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
272 &rest body)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
273 "Define a filter named NAME.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
274 DOCUMENTATION is the documentation of the function.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
275 READER is a form which should read a qualifier from the user.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
276 DESCRIPTION is a short string describing the filter.
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
277
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
278 BODY should contain forms which will be evaluated to test whether or
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
279 not a particular buffer should be displayed or not. The forms in BODY
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
280 will be evaluated with BUF bound to the buffer object, and QUALIFIER
55509
dbf692d994dc (define-ibuffer-column, define-ibuffer-sorter, define-ibuffer-filter): Add usage
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
281 bound to the current value of the filter.
dbf692d994dc (define-ibuffer-column, define-ibuffer-sorter, define-ibuffer-filter): Add usage
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
282
dbf692d994dc (define-ibuffer-column, define-ibuffer-sorter, define-ibuffer-filter): Add usage
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
283 \(fn NAME DOCUMENTATION (&key READER DESCRIPTION) &rest BODY)"
94978
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
284 (declare (indent 2))
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
285 (let ((fn-name (intern (concat "ibuffer-filter-by-" (symbol-name name)))))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49410
diff changeset
286 `(progn
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
287 (defun ,fn-name (qualifier)
94978
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
288 ,(or documentation "This filter is not documented.")
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
289 (interactive (list ,reader))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
290 (ibuffer-push-filter (cons ',name qualifier))
65582
4d1085b02d64 Message format spec fixes (1)
Deepak Goel <deego@gnufans.org>
parents: 64762
diff changeset
291 (message "%s"
94978
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
292 (format ,(concat (format "Filter by %s added: " description)
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
293 " %s")
af4982c7c0f6 (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
294 qualifier))
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
295 (ibuffer-update nil t))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
296 (push (list ',name ,description
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
297 #'(lambda (buf qualifier)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
298 ,@body))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
299 ibuffer-filtering-alist)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
300 :autoload-end)))
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
301
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
302 (provide 'ibuf-macs)
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
303
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
304 ;; arch-tag: 2748edce-82c9-4cd9-9d9d-bd73e43c20c5
42702
fb0b4579a45d Initial revision.
Colin Walters <walters@gnu.org>
parents:
diff changeset
305 ;;; ibuf-macs.el ends here