changeset 44659:9d84a456037d

(ibuffer-visit-buffer): Optionally allow reducing to one window. (ibuffer-visit-buffer-1-window): Simply call `ibuffer-visit-buffer'. (ibuffer-current-state-list): Reinstate optional argument; now just call `point' inside the mapping function.
author Colin Walters <walters@gnu.org>
date Wed, 17 Apr 2002 22:38:10 +0000
parents 86f786a1dc65
children 352a26294253
files lisp/ibuffer.el
diffstat 1 files changed, 27 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ibuffer.el	Wed Apr 17 22:37:42 2002 +0000
+++ b/lisp/ibuffer.el	Wed Apr 17 22:38:10 2002 +0000
@@ -842,14 +842,21 @@
 	(forward-line 1))
       (decf arg))))
 
-(defun ibuffer-visit-buffer ()
-  "Visit the buffer on this line."
-  (interactive)
+(defun ibuffer-visit-buffer (&optional single)
+  "Visit the buffer on this line.
+
+If optional argument SINGLE is non-nil, then also ensure there is only
+one window."
+  (interactive "P")
   (let ((buf (ibuffer-current-buffer)))
-    (unless (buffer-live-p buf)
-      (error "Buffer %s has been killed!" buf))
+    (if (bufferp buf)
+	(unless (buffer-live-p buf)
+	  (error "Buffer %s has been killed!" buf))
+      (error "No buffer on this line"))
     (bury-buffer (current-buffer))
-    (switch-to-buffer buf)))
+    (switch-to-buffer buf)
+    (when single
+      (delete-other-windows))))
 
 (defun ibuffer-visit-buffer-other-window (&optional noselect)
   "Visit the buffer on this line in another window."
@@ -881,11 +888,7 @@
 (defun ibuffer-visit-buffer-1-window ()
   "Visit the buffer on this line, and delete other windows."
   (interactive)
-  (let ((buf (ibuffer-current-buffer)))
-    (unless (buffer-live-p buf)
-      (error "Buffer %s has been killed!" buf))
-    (switch-to-buffer buf)
-    (delete-other-windows)))
+  (ibuffer-visit-buffer t))
 
 (defun ibuffer-bury-buffer ()
   "Bury the buffer on this line."
@@ -1668,15 +1671,22 @@
 		      (car e)))
 		(ibuffer-current-state-list))))
 
-(defun ibuffer-current-state-list ()
-  "Return a list like (BUF . MARK) of all buffers in an ibuffer."
+(defun ibuffer-current-state-list (&optional pos)
+  "Return a list like (BUF . MARK) of all buffers in an ibuffer.
+If POS is non-nil, return a list like (BUF MARK POINT), where POINT is
+the value of point at the beginning of the line for that buffer."
   (let ((ibuffer-current-state-list-tmp '()))
     ;; ah, if only we had closures.  I bet this will mysteriously
     ;; break later.  Don't blame me.
-    (ibuffer-map-lines-nomodify
-     #'(lambda (buf mark)
-	 (when (buffer-live-p buf)
-	   (push (cons buf mark) ibuffer-current-state-list-tmp))))
+    (if pos
+	(ibuffer-map-lines-nomodify
+	 #'(lambda (buf mark)
+	     (when (buffer-live-p buf)
+	       (push (list buf mark (point)) ibuffer-current-state-list-tmp))))
+      (ibuffer-map-lines-nomodify
+       #'(lambda (buf mark)
+	   (when (buffer-live-p buf)
+	     (push (cons buf mark) ibuffer-current-state-list-tmp)))))
     (nreverse ibuffer-current-state-list-tmp)))
 
 (defun ibuffer-current-buffers-with-marks (curbufs)