Integers now at least 28 bits.
[bpt/emacs.git] / lisp / buff-menu.el
index db8060e..3892626 100644 (file)
@@ -61,6 +61,7 @@
   (define-key Buffer-menu-mode-map "2" 'Buffer-menu-2-window)
   (define-key Buffer-menu-mode-map "1" 'Buffer-menu-1-window)
   (define-key Buffer-menu-mode-map "f" 'Buffer-menu-this-window)
+  (define-key Buffer-menu-mode-map "\C-m" 'Buffer-menu-this-window)
   (define-key Buffer-menu-mode-map "o" 'Buffer-menu-other-window)
   (define-key Buffer-menu-mode-map "\C-o" 'Buffer-menu-switch-other-window)
   (define-key Buffer-menu-mode-map "s" 'Buffer-menu-save)
@@ -139,6 +140,7 @@ Letters do not insert themselves; instead, they are commands.
   "Return buffer described by this line of buffer menu."
   (let* ((where (Buffer-menu-buffer-name-position))
         (string (buffer-substring (car where) (cdr where))))
+    (set-text-properties 0 (length string) nil string)
     (or (get-buffer string)
        (if error-if-non-existent-p
            (error "No buffer named \"%s\"" string)
@@ -164,8 +166,10 @@ previous window configuration."
   (interactive "P")
 ;;;  (setq Buffer-menu-window-config (current-window-configuration))
   (list-buffers arg)
-  (pop-to-buffer "*Buffer List*")
-  (forward-line 2)
+  (let ((newpoint (save-excursion (set-buffer "*Buffer List*")
+                                 (point))))
+    (pop-to-buffer "*Buffer List*")
+    (goto-char newpoint))
   (message
    "Commands: d, s, x, u; f, o, 1, 2, m, v; ~, %%; q to quit; ? for help."))
 
@@ -211,24 +215,35 @@ Optional ARG means move up."
   (Buffer-menu-unmark)
   (forward-line -1))
 
-(defun Buffer-menu-delete ()
-  "Mark buffer on this line to be deleted by \\<Buffer-menu-mode-map>\\[Buffer-menu-execute] command."
-  (interactive)
+(defun Buffer-menu-delete (&optional arg)
+  "Mark buffer on this line to be deleted by \\<Buffer-menu-mode-map>\\[Buffer-menu-execute] command.
+Prefix arg is how many buffers to delete.
+Negative arg means delete backwards."
+  (interactive "p")
   (beginning-of-line)
   (if (looking-at " [-M]")             ;header lines
       (ding)
     (let ((buffer-read-only nil))
-      (delete-char 1)
-      (insert ?D)
-      (forward-line 1))))
-
-(defun Buffer-menu-delete-backwards ()
+      (if (or (null arg) (= arg 0))
+         (setq arg 1))
+      (while (> arg 0)
+       (delete-char 1)
+       (insert ?D)
+       (forward-line 1)
+       (setq arg (1- arg)))
+      (while (< arg 0)
+       (delete-char 1)
+       (insert ?D)
+       (forward-line -1)
+       (setq arg (1+ arg))))))
+
+(defun Buffer-menu-delete-backwards (&optional arg)
   "Mark buffer on this line to be deleted by \\<Buffer-menu-mode-map>\\[Buffer-menu-execute] command
-and then move up one line"
-  (interactive)
-  (Buffer-menu-delete)
-  (forward-line -2)
-  (if (looking-at " [-M]") (forward-line 1)))
+and then move up one line.  Prefix arg means move that many lines."
+  (interactive "p")
+  (Buffer-menu-delete (- (or arg 1)))
+  (while (looking-at " [-M]")
+    (forward-line 1)))
 
 (defun Buffer-menu-save ()
   "Mark buffer on this line to be saved by \\<Buffer-menu-mode-map>\\[Buffer-menu-execute] command."
@@ -242,19 +257,19 @@ and then move up one line"
       (insert ?S)
       (forward-line 1))))
 
-(defun Buffer-menu-not-modified ()
+(defun Buffer-menu-not-modified (&optional arg)
   "Mark buffer on this line as unmodified (no changes to save)."
-  (interactive)
+  (interactive "P")
   (save-excursion
     (set-buffer (Buffer-menu-buffer t))
-    (set-buffer-modified-p nil))
+    (set-buffer-modified-p arg))
   (save-excursion
    (beginning-of-line)
    (forward-char 1)
-   (if (looking-at "\\*")
+   (if (= (char-after (point)) (if arg ?  ?*))
        (let ((buffer-read-only nil))
         (delete-char 1)
-        (insert )))))
+        (insert (if arg ?* ? ))))))
 
 (defun Buffer-menu-execute ()
   "Save and/or delete buffers marked with \\<Buffer-menu-mode-map>\\[Buffer-menu-save] or \\<Buffer-menu-mode-map>\\[Buffer-menu-delete] commands."