- (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))