1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-08 15:35:02 +00:00

(ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)

(define-ibuffer-column, define-ibuffer-sorter)
(define-ibuffer-op, define-ibuffer-filter): Add declarations
containing indentation specs, replacing equivalent top-level
forms that set `lisp-indent-function' properties.
(define-ibuffer-op): Use `derived-mode-p'.
(define-ibuffer-filter): Remove redundant `concat' call.
This commit is contained in:
John Paul Wallington 2008-05-15 00:12:08 +00:00
parent 87a6a53ae2
commit 4e02f55c17
2 changed files with 90 additions and 73 deletions

View File

@ -1,3 +1,20 @@
2008-05-15 John Paul Wallington <jpw@pobox.com>
* ibuffer.el (ibuffer-assert-ibuffer-mode): New defsubst.
(ibuffer-mark-interactive, ibuffer-set-mark)
(ibuffer-insert-buffer-line, ibuffer-redisplay-current)
(ibuffer-map-lines, ibuffer-switch-format)
(ibuffer-update-title-and-summary)
(ibuffer-redisplay-engine): Use it.
* ibuf-macs.el (ibuffer-aif, ibuffer-awhen, ibuffer-save-marks)
(define-ibuffer-column, define-ibuffer-sorter)
(define-ibuffer-op, define-ibuffer-filter): Add declarations
containing indentation specs, replacing equivalent top-level
forms that set `lisp-indent-function' properties.
(define-ibuffer-op): Use `derived-mode-p'.
(define-ibuffer-filter): Remove redundant `concat' call.
2008-05-14 Michael Albinus <michael.albinus@gmx.de>
* net/tramp.el (tramp-echo-mark): Update docstring.

View File

@ -36,6 +36,7 @@
If TEST returns non-nil, bind `it' to the value, and evaluate
TRUE-BODY. Otherwise, evaluate forms in FALSE-BODY as if in `progn'.
Compare with `if'."
(declare (indent 2))
(let ((sym (make-symbol "ibuffer-aif-sym")))
`(let ((,sym ,test))
(if ,sym
@ -43,18 +44,18 @@ Compare with `if'."
,true-body)
(progn
,@false-body)))))
;; (put 'ibuffer-aif 'lisp-indent-function 2)
(defmacro ibuffer-awhen (test &rest body)
"Evaluate BODY if TEST returns non-nil.
During evaluation of body, bind `it' to the value returned by TEST."
(declare (indent 1))
`(ibuffer-aif ,test
(progn ,@body)
nil))
;; (put 'ibuffer-awhen 'lisp-indent-function 1)
(defmacro ibuffer-save-marks (&rest body)
"Save the marked status of the buffers and execute BODY; restore marks."
(declare (indent 0))
(let ((bufsym (make-symbol "bufsym")))
`(let ((,bufsym (current-buffer))
(ibuffer-save-marks-tmp-mark-list (ibuffer-current-state-list)))
@ -70,10 +71,9 @@ During evaluation of body, bind `it' to the value returned by TEST."
e))
ibuffer-save-marks-tmp-mark-list)))
(ibuffer-redisplay t))))))
;; (put 'ibuffer-save-marks 'lisp-indent-function 0)
;;;###autoload
(defmacro* define-ibuffer-column (symbol (&key name inline props summarizer
(defmacro* define-ibuffer-column (symbol (&key name inline props summarizer
header-mouse-map) &rest body)
"Define a column SYMBOL for use with `ibuffer-formats'.
@ -98,14 +98,15 @@ change its definition, you should explicitly call
`ibuffer-recompile-formats'.
\(fn SYMBOL (&key NAME INLINE PROPS SUMMARIZER) &rest BODY)"
(declare (indent defun))
(let* ((sym (intern (concat "ibuffer-make-column-"
(symbol-name symbol))))
(bod-1 `(with-current-buffer buffer
,@body))
(bod (if props
`(propertize
,bod-1
,@props)
`(propertize
,bod-1
,@props)
bod-1)))
`(progn
,(if inline
@ -126,7 +127,6 @@ change its definition, you should explicitly call
;; summary.
`(put (quote ,sym) 'ibuffer-column-summary nil))
:autoload-end)))
;; (put 'define-ibuffer-column 'lisp-indent-function 'defun)
;;;###autoload
(defmacro* define-ibuffer-sorter (name documentation
@ -143,6 +143,7 @@ buffer object, and `b' bound to another. BODY should return a non-nil
value if and only if `a' is \"less than\" `b'.
\(fn NAME DOCUMENTATION (&key DESCRIPTION) &rest BODY)"
(declare (indent 1))
`(progn
(defun ,(intern (concat "ibuffer-do-sort-by-" (symbol-name name))) ()
,(or documentation "No :documentation specified for this sorting method.")
@ -157,7 +158,6 @@ value if and only if `a' is \"less than\" `b'.
,@body))
ibuffer-sorting-functions-alist)
:autoload-end))
;; (put 'define-ibuffer-sorter 'lisp-indent-function 1)
;;;###autoload
(defmacro* define-ibuffer-op (op args
@ -202,66 +202,66 @@ COMPLEX means this function is special; see the source code of this
macro for exactly what it does.
\(fn OP ARGS DOCUMENTATION (&key INTERACTIVE MARK MODIFIER-P DANGEROUS OPSTRING ACTIVE-OPSTRING COMPLEX) &rest BODY)"
(declare (indent 2))
`(progn
(defun ,(intern (concat (if (string-match "^ibuffer-do" (symbol-name op))
"" "ibuffer-do-") (symbol-name op)))
,args
,(if (stringp documentation)
documentation
(format "%s marked buffers." active-opstring))
,(if (not (null interactive))
`(interactive ,interactive)
'(interactive))
(assert (eq major-mode 'ibuffer-mode))
(setq ibuffer-did-modification nil)
(let ((marked-names (,(case mark
(:deletion
'ibuffer-deletion-marked-buffer-names)
(t
'ibuffer-marked-buffer-names)))))
(when (null marked-names)
(setq marked-names (list (buffer-name (ibuffer-current-buffer))))
(ibuffer-set-mark ,(case mark
(:deletion
'ibuffer-deletion-char)
(t
'ibuffer-marked-char))))
,(let* ((finish (append
'(progn)
(if (eq modifier-p t)
'((setq ibuffer-did-modification t))
())
`((ibuffer-redisplay t)
(message ,(concat "Operation finished; " opstring " %s buffers") count))))
(inner-body (if complex
`(progn ,@body)
`(progn
(with-current-buffer buf
(save-excursion
,@body))
t)))
(body `(let ((count
(,(case mark
(:deletion
'ibuffer-map-deletion-lines)
(t
'ibuffer-map-marked-lines))
#'(lambda (buf mark)
,(if (eq modifier-p :maybe)
`(let ((ibuffer-tmp-previous-buffer-modification
(buffer-modified-p buf)))
(prog1 ,inner-body
(when (not (eq ibuffer-tmp-previous-buffer-modification
(buffer-modified-p buf)))
(setq ibuffer-did-modification t))))
inner-body)))))
,finish)))
(if dangerous
`(when (ibuffer-confirm-operation-on ,active-opstring marked-names)
,body)
body))))
:autoload-end))
;; (put 'define-ibuffer-op 'lisp-indent-function 2)
(defun ,(intern (concat (if (string-match "^ibuffer-do" (symbol-name op))
"" "ibuffer-do-") (symbol-name op)))
,args
,(if (stringp documentation)
documentation
(format "%s marked buffers." active-opstring))
,(if (not (null interactive))
`(interactive ,interactive)
'(interactive))
(assert (derived-mode-p 'ibuffer-mode))
(setq ibuffer-did-modification nil)
(let ((marked-names (,(case mark
(:deletion
'ibuffer-deletion-marked-buffer-names)
(t
'ibuffer-marked-buffer-names)))))
(when (null marked-names)
(setq marked-names (list (buffer-name (ibuffer-current-buffer))))
(ibuffer-set-mark ,(case mark
(:deletion
'ibuffer-deletion-char)
(t
'ibuffer-marked-char))))
,(let* ((finish (append
'(progn)
(if (eq modifier-p t)
'((setq ibuffer-did-modification t))
())
`((ibuffer-redisplay t)
(message ,(concat "Operation finished; " opstring " %s buffers") count))))
(inner-body (if complex
`(progn ,@body)
`(progn
(with-current-buffer buf
(save-excursion
,@body))
t)))
(body `(let ((count
(,(case mark
(:deletion
'ibuffer-map-deletion-lines)
(t
'ibuffer-map-marked-lines))
#'(lambda (buf mark)
,(if (eq modifier-p :maybe)
`(let ((ibuffer-tmp-previous-buffer-modification
(buffer-modified-p buf)))
(prog1 ,inner-body
(when (not (eq ibuffer-tmp-previous-buffer-modification
(buffer-modified-p buf)))
(setq ibuffer-did-modification t))))
inner-body)))))
,finish)))
(if dangerous
`(when (ibuffer-confirm-operation-on ,active-opstring marked-names)
,body)
body))))
:autoload-end))
;;;###autoload
(defmacro* define-ibuffer-filter (name documentation
@ -280,23 +280,23 @@ will be evaluated with BUF bound to the buffer object, and QUALIFIER
bound to the current value of the filter.
\(fn NAME DOCUMENTATION (&key READER DESCRIPTION) &rest BODY)"
(declare (indent 2))
(let ((fn-name (intern (concat "ibuffer-filter-by-" (symbol-name name)))))
`(progn
(defun ,fn-name (qualifier)
,(concat (or documentation "This filter is not documented."))
,(or documentation "This filter is not documented.")
(interactive (list ,reader))
(ibuffer-push-filter (cons ',name qualifier))
(message "%s"
(format ,(concat (format "Filter by %s added: " description)
" %s")
qualifier))
(format ,(concat (format "Filter by %s added: " description)
" %s")
qualifier))
(ibuffer-update nil t))
(push (list ',name ,description
#'(lambda (buf qualifier)
,@body))
ibuffer-filtering-alist)
:autoload-end)))
;; (put 'define-ibuffer-filter 'lisp-indent-function 2)
(provide 'ibuf-macs)