aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Pfeiffer2004-10-17 08:35:10 +0000
committerDaniel Pfeiffer2004-10-17 08:35:10 +0000
commitbfb2dda4b668e09725234066cc2fea6c9c853682 (patch)
tree5ed07cfdeac38707afda039f0f5c6862f7bcf32a
parent69075cdd59fadbe4486defe044193e23c783302b (diff)
downloademacs-bfb2dda4b668e09725234066cc2fea6c9c853682.tar.gz
emacs-bfb2dda4b668e09725234066cc2fea6c9c853682.zip
(Buffer-menu-revert-function): Emulate save-excursion.
(Buffer-menu-beginning): New helper function. (Buffer-menu-execute): Use it. (Buffer-menu-select): Use it. (Buffer-menu-sort): Use it and also keep markers.
-rw-r--r--lisp/ChangeLog10
-rw-r--r--lisp/buff-menu.el57
2 files changed, 54 insertions, 13 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index bab189e9615..a8a0b1776fc 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,11 @@
12004-10-17 Daniel Pfeiffer <occitan@esperanto.org>
2
3 * buff-menu.el (Buffer-menu-revert-function): Emulate save-excursion.
4 (Buffer-menu-beginning): New helper function.
5 (Buffer-menu-execute): Use it.
6 (Buffer-menu-select): Use it.
7 (Buffer-menu-sort): Use it and also keep markers.
8
12004-10-17 Richard M. Stallman <rms@gnu.org> 92004-10-17 Richard M. Stallman <rms@gnu.org>
2 10
3 * paths.el (news-directory): Renamed from news-path. Old name alias. 11 * paths.el (news-directory): Renamed from news-path. Old name alias.
@@ -24,7 +32,7 @@
24 32
25 * help-at-pt.el (help-at-pt-unload-hook): Use add-hook; no defvar. 33 * help-at-pt.el (help-at-pt-unload-hook): Use add-hook; no defvar.
26 34
27 * frame.el (special-display-popup-frame): 35 * frame.el (special-display-popup-frame):
28 Make the buffer current as its frame is created. 36 Make the buffer current as its frame is created.
29 37
30 * delsel.el (delsel-unload-hook): Set as a variable. 38 * delsel.el (delsel-unload-hook): Set as a variable.
diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el
index 33a8c3ec3f5..b00721e93ec 100644
--- a/lisp/buff-menu.el
+++ b/lisp/buff-menu.el
@@ -197,9 +197,15 @@ Letters do not insert themselves; instead, they are commands.
197 197
198(defun Buffer-menu-revert-function (ignore1 ignore2) 198(defun Buffer-menu-revert-function (ignore1 ignore2)
199 ;; We can not use save-excursion here. The buffer gets erased. 199 ;; We can not use save-excursion here. The buffer gets erased.
200 (let ((old-point (point))) 200 (let ((ocol (current-column))
201 (oline (progn (move-to-column 4)
202 (get-text-property (point) 'buffer)))
203 (prop (point-min)))
201 (list-buffers-noselect Buffer-menu-files-only) 204 (list-buffers-noselect Buffer-menu-files-only)
202 (goto-char old-point))) 205 (while (setq prop (next-single-property-change prop 'buffer))
206 (when (eq (get-text-property prop 'buffer) oline)
207 (goto-char prop)
208 (move-to-column ocol)))))
203 209
204(defun Buffer-menu-toggle-files-only (arg) 210(defun Buffer-menu-toggle-files-only (arg)
205 "Toggle whether the current buffer-menu displays only file buffers. 211 "Toggle whether the current buffer-menu displays only file buffers.
@@ -354,13 +360,16 @@ and then move up one line. Prefix arg means move that many lines."
354 (delete-char 1) 360 (delete-char 1)
355 (insert (if arg ?* ? )))))) 361 (insert (if arg ?* ? ))))))
356 362
363(defun Buffer-menu-beginning ()
364 (goto-char (point-min))
365 (unless Buffer-menu-use-header-line
366 (forward-line)))
367
357(defun Buffer-menu-execute () 368(defun Buffer-menu-execute ()
358 "Save and/or delete buffers marked with \\<Buffer-menu-mode-map>\\[Buffer-menu-save] or \\<Buffer-menu-mode-map>\\[Buffer-menu-delete] commands." 369 "Save and/or delete buffers marked with \\<Buffer-menu-mode-map>\\[Buffer-menu-save] or \\<Buffer-menu-mode-map>\\[Buffer-menu-delete] commands."
359 (interactive) 370 (interactive)
360 (save-excursion 371 (save-excursion
361 (goto-char (point-min)) 372 (Buffer-menu-beginning)
362 (unless Buffer-menu-use-header-line
363 (forward-line 1))
364 (while (re-search-forward "^..S" nil t) 373 (while (re-search-forward "^..S" nil t)
365 (let ((modp nil)) 374 (let ((modp nil))
366 (save-excursion 375 (save-excursion
@@ -371,9 +380,7 @@ and then move up one line. Prefix arg means move that many lines."
371 (delete-char -1) 380 (delete-char -1)
372 (insert (if modp ?* ? )))))) 381 (insert (if modp ?* ? ))))))
373 (save-excursion 382 (save-excursion
374 (goto-char (point-min)) 383 (Buffer-menu-beginning)
375 (unless Buffer-menu-use-header-line
376 (forward-line 1))
377 (let ((buff-menu-buffer (current-buffer)) 384 (let ((buff-menu-buffer (current-buffer))
378 (buffer-read-only nil)) 385 (buffer-read-only nil))
379 (while (re-search-forward "^D" nil t) 386 (while (re-search-forward "^D" nil t)
@@ -399,9 +406,7 @@ in the selected frame."
399 (menu (current-buffer)) 406 (menu (current-buffer))
400 (others ()) 407 (others ())
401 tem) 408 tem)
402 (goto-char (point-min)) 409 (Buffer-menu-beginning)
403 (unless Buffer-menu-use-header-line
404 (forward-line 1))
405 (while (re-search-forward "^>" nil t) 410 (while (re-search-forward "^>" nil t)
406 (setq tem (Buffer-menu-buffer t)) 411 (setq tem (Buffer-menu-buffer t))
407 (let ((buffer-read-only nil)) 412 (let ((buffer-read-only nil))
@@ -581,7 +586,35 @@ For more information, see the function `buffer-menu'."
581 (if (< column 2) (setq column 2)) 586 (if (< column 2) (setq column 2))
582 (if (> column 5) (setq column 5))) 587 (if (> column 5) (setq column 5)))
583 (setq Buffer-menu-sort-column column) 588 (setq Buffer-menu-sort-column column)
584 (Buffer-menu-revert)) 589 (let (buffer-read-only l buf m1 m2)
590 (save-excursion
591 (Buffer-menu-beginning)
592 (while (not (eobp))
593 (when (buffer-live-p (setq buf (get-text-property (+ (point) 4) 'buffer)))
594 (setq m1 (char-after)
595 m1 (if (memq m1 '(?> ?D)) m1)
596 m2 (char-after (+ (point) 2))
597 m2 (if (eq m2 ?S) m2))
598 (if (or m1 m2)
599 (push (list buf m1 m2) l)))
600 (forward-line)))
601 (Buffer-menu-revert)
602 (setq buffer-read-only)
603 (save-excursion
604 (Buffer-menu-beginning)
605 (while (not (eobp))
606 (when (setq buf (assq (get-text-property (+ (point) 4) 'buffer) l))
607 (setq m1 (cadr buf)
608 m2 (cadr (cdr buf)))
609 (when m1
610 (delete-char 1)
611 (insert m1)
612 (backward-char 1))
613 (when m2
614 (forward-char 2)
615 (delete-char 1)
616 (insert m2)))
617 (forward-line)))))
585 618
586(defun Buffer-menu-make-sort-button (name column) 619(defun Buffer-menu-make-sort-button (name column)
587 (if (equal column Buffer-menu-sort-column) (setq column nil)) 620 (if (equal column Buffer-menu-sort-column) (setq column nil))