comparison lisp/ibuf-ext.el @ 45128:18c2dfafd097

(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'.
author Colin Walters <walters@gnu.org>
date Sun, 05 May 2002 00:12:17 +0000
parents f365c85cce40
children b266348db08f
comparison
equal deleted inserted replaced
45127:ee4a77a2b6b7 45128:18c2dfafd097
598 (goto-char (cdr it)) 598 (goto-char (cdr it))
599 (error "No filter group with name %s" name)))) 599 (error "No filter group with name %s" name))))
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.
604 The 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
613 (delete name ibuffer-hidden-filter-groups))) 617 (delete name ibuffer-hidden-filter-groups)))
614 (error "No filter group with name \"%s\"" name)) 618 (error "No filter group with name \"%s\"" name))
615 (ibuffer-update nil t)) 619 (ibuffer-update nil t))
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.
624 See 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
632 ;;;###autoload 634 (defun ibuffer-insert-filter-group-before (newgroup group)
633 (defun ibuffer-yank (&optional arg) 635 (let ((pos (or (position group (mapcar #'car ibuffer-filter-groups)
634 (interactive "P") 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
647 ;;;###autoload
648 (defun ibuffer-yank ()
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
658 (defun ibuffer-save-filter-groups (name groups) 672 (defun ibuffer-save-filter-groups (name groups)
659 "Save all active filter groups GROUPS as NAME. 673 "Save all active filter groups GROUPS as NAME.