aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Walters2002-05-05 00:12:17 +0000
committerColin Walters2002-05-05 00:12:17 +0000
commitc56a4f1f0a5ff24643abe1010fd5761ac62728d3 (patch)
tree6b58b797948ead87190463c91628d357bc992c7b
parent8ed4ef7ccfb4e2029414556db1cd2eb385f81208 (diff)
downloademacs-c56a4f1f0a5ff24643abe1010fd5761ac62728d3.tar.gz
emacs-c56a4f1f0a5ff24643abe1010fd5761ac62728d3.zip
(ibuffer-kill-filter-group): Test for killing "Default" group earlier.
Push killed group on `ibuffer-filter-group-kill-ring'. (ibuffer-kill-line): Document. Don't push killed group ourselves. (ibuffer-yank-filter-group): Renamed from `ibuffer-yank'. (ibuffer-insert-filter-group-before): New function, broken out from `ibuffer-yank'. (ibuffer-yank): Now just call `ibuffer-yank-filter-group'.
-rw-r--r--lisp/ibuf-ext.el60
1 files changed, 37 insertions, 23 deletions
diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el
index c164a752b2b..b6a6304b09b 100644
--- a/lisp/ibuf-ext.el
+++ b/lisp/ibuf-ext.el
@@ -600,13 +600,17 @@ To evaluate a form without viewing the buffer, see `ibuffer-do-eval'."
600 600
601;;;###autoload 601;;;###autoload
602(defun ibuffer-kill-filter-group (name) 602(defun ibuffer-kill-filter-group (name)
603 "Delete the filtering group named NAME." 603 "Kill the filtering group named NAME.
604The group will be added to `ibuffer-filter-group-kill-ring'."
604 (interactive (list nil)) 605 (interactive (list nil))
605 (when (interactive-p) 606 (when (interactive-p)
606 (setq name (completing-read "Kill filter group: " 607 (setq name (completing-read "Kill filter group: "
607 ibuffer-filter-groups nil t))) 608 ibuffer-filter-groups nil t)))
609 (when (equal name "Default")
610 (error "Can't kill default filtering group"))
608 (ibuffer-aif (assoc name ibuffer-filter-groups) 611 (ibuffer-aif (assoc name ibuffer-filter-groups)
609 (progn 612 (progn
613 (push (copy-tree it) ibuffer-filter-group-kill-ring)
610 (setq ibuffer-filter-groups (ibuffer-delete-alist 614 (setq ibuffer-filter-groups (ibuffer-delete-alist
611 name ibuffer-filter-groups)) 615 name ibuffer-filter-groups))
612 (setq ibuffer-hidden-filter-groups 616 (setq ibuffer-hidden-filter-groups
@@ -616,42 +620,52 @@ To evaluate a form without viewing the buffer, see `ibuffer-do-eval'."
616 620
617;;;###autoload 621;;;###autoload
618(defun ibuffer-kill-line (&optional arg) 622(defun ibuffer-kill-line (&optional arg)
623 "Kill the filtering group at point.
624See also `ibuffer-kill-filter-group'."
619 (interactive "P") 625 (interactive "P")
620 (ibuffer-aif (save-excursion 626 (ibuffer-aif (save-excursion
621 (ibuffer-forward-line 0) 627 (ibuffer-forward-line 0)
622 (get-text-property (point) 'ibuffer-filter-group-name)) 628 (get-text-property (point) 'ibuffer-filter-group-name))
623 (progn 629 (progn
624 (when (equal it "Default")
625 (error "Can't kill default filtering group"))
626 (push (copy-tree (assoc it ibuffer-filter-groups))
627 ibuffer-filter-group-kill-ring)
628 (ibuffer-kill-filter-group it)) 630 (ibuffer-kill-filter-group it))
629 (funcall (if (interactive-p) #'call-interactively #'funcall) 631 (funcall (if (interactive-p) #'call-interactively #'funcall)
630 #'kill-line arg))) 632 #'kill-line arg)))
631 633
634(defun ibuffer-insert-filter-group-before (newgroup group)
635 (let ((pos (or (position group (mapcar #'car ibuffer-filter-groups)
636 :test #'equal)
637 (length ibuffer-filter-groups))))
638 (cond ((<= pos 0)
639 (push newgroup ibuffer-filter-groups))
640 ((= pos (length ibuffer-filter-groups))
641 (setq ibuffer-filter-groups (nconc ibuffer-filter-groups (list newgroup))))
642 (t
643 (let ((cell (nthcdr pos ibuffer-filter-groups)))
644 (setf (cdr cell) (cons (car cell) (cdr cell)))
645 (setf (car cell) newgroup))))))
646
632;;;###autoload 647;;;###autoload
633(defun ibuffer-yank (&optional arg) 648(defun ibuffer-yank ()
634 (interactive "P") 649 "Yank the last killed filter group before group at point."
650 (interactive)
651 (ibuffer-yank-filter-group
652 (or (get-text-property (point) 'ibuffer-filter-group-name)
653 (get-text-property (point) 'ibuffer-filter-group)
654 (error "No filter group at point"))))
655
656;;;###autoload
657(defun ibuffer-yank-filter-group (name)
658 "Yank the last killed filter group before group named NAME."
659 (interactive (list nil))
635 (unless ibuffer-filter-group-kill-ring 660 (unless ibuffer-filter-group-kill-ring
636 (error "ibuffer-filter-group-kill-ring is empty")) 661 (error "ibuffer-filter-group-kill-ring is empty"))
662 (when (and (not name) (interactive-p))
663 (setq name (completing-read "Yank filter group before group: "
664 ibuffer-filter-groups nil t)))
637 (save-excursion 665 (save-excursion
638 (ibuffer-forward-line 0) 666 (ibuffer-forward-line 0)
639 (let* ((last-killed (pop ibuffer-filter-group-kill-ring)) 667 (ibuffer-insert-filter-group-before (pop ibuffer-filter-group-kill-ring)
640 (all-groups ibuffer-filter-groups) 668 name))
641 (cur (or (get-text-property (point) 'ibuffer-filter-group-name)
642 (get-text-property (point) 'ibuffer-filter-group)
643 (last all-groups)))
644 (pos (or (position cur (mapcar #'car all-groups) :test #'equal)
645 (length all-groups))))
646 (cond ((= pos 0)
647 (push last-killed ibuffer-filter-groups))
648 ((= pos (length all-groups))
649 (setq ibuffer-filter-groups
650 (nconc ibuffer-filter-groups (list last-killed))))
651 (t
652 (let ((cell (nthcdr pos ibuffer-filter-groups)))
653 (setf (cdr cell) (cons (car cell) (cdr cell)))
654 (setf (car cell) last-killed))))))
655 (ibuffer-update nil t)) 669 (ibuffer-update nil t))
656 670
657;;;###autoload 671;;;###autoload