diff options
| author | Daniel Pfeiffer | 2004-10-17 08:35:10 +0000 |
|---|---|---|
| committer | Daniel Pfeiffer | 2004-10-17 08:35:10 +0000 |
| commit | bfb2dda4b668e09725234066cc2fea6c9c853682 (patch) | |
| tree | 5ed07cfdeac38707afda039f0f5c6862f7bcf32a | |
| parent | 69075cdd59fadbe4486defe044193e23c783302b (diff) | |
| download | emacs-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/ChangeLog | 10 | ||||
| -rw-r--r-- | lisp/buff-menu.el | 57 |
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 @@ | |||
| 1 | 2004-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 | |||
| 1 | 2004-10-17 Richard M. Stallman <rms@gnu.org> | 9 | 2004-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)) |