diff options
| author | Colin Walters | 2002-05-05 00:12:17 +0000 |
|---|---|---|
| committer | Colin Walters | 2002-05-05 00:12:17 +0000 |
| commit | c56a4f1f0a5ff24643abe1010fd5761ac62728d3 (patch) | |
| tree | 6b58b797948ead87190463c91628d357bc992c7b | |
| parent | 8ed4ef7ccfb4e2029414556db1cd2eb385f81208 (diff) | |
| download | emacs-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.el | 60 |
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. |
| 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 |
| @@ -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. | ||
| 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 | ||
| 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 |