Mercurial > emacs
changeset 106446:56b9af7a1762
Save and restore dired buffer's point positions too. (Bug#4880)
(dired-save-positions): Return in the first element
buffer's position in format (BUFFER DIRED-FILENAME BUFFER-POINT).
Doc fix.
(dired-restore-positions): First restore buffer's position.
While restoring window's positions, check if window still displays
the original buffer.
author | Juri Linkov <juri@jurta.org> |
---|---|
date | Sat, 05 Dec 2009 23:22:03 +0000 |
parents | 68f4d89d2fe9 |
children | f5f8760e0f26 |
files | lisp/ChangeLog lisp/dired.el |
diffstat | 2 files changed, 42 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Sat Dec 05 22:49:00 2009 +0000 +++ b/lisp/ChangeLog Sat Dec 05 23:22:03 2009 +0000 @@ -1,3 +1,14 @@ +2009-12-05 Juri Linkov <juri@jurta.org> + + Save and restore dired buffer's point positions too. (Bug#4880) + + * dired.el (dired-save-positions): Return in the first element + buffer's position in format (BUFFER DIRED-FILENAME BUFFER-POINT). + Doc fix. + (dired-restore-positions): First restore buffer's position. + While restoring window's positions, check if window still displays + the original buffer. + 2009-12-05 Chong Yidong <cyd@stupidchicken.com> * bindings.el (complete-symbol): Call semantic-ia-complete-symbol
--- a/lisp/dired.el Sat Dec 05 22:49:00 2009 +0000 +++ b/lisp/dired.el Sat Dec 05 23:22:03 2009 +0000 @@ -1169,23 +1169,40 @@ ;; Some of these are also used when inserting subdirs. (defun dired-save-positions () - "Return the current positions in all windows displaying this dired buffer. -The positions have the form (WINDOW FILENAME POINT)." - (mapcar (lambda (w) - (list w - (with-selected-window w - (dired-get-filename nil t)) - (window-point w))) - (get-buffer-window-list nil 0 t))) + "Return current positions in the buffer and all windows with this directory. +The positions have the form (BUFFER-POSITION WINDOW-POSITIONS). + +BUFFER-POSITION is the point position in the current dired buffer. +The buffer position have the form (BUFFER DIRED-FILENAME BUFFER-POINT). + +WINDOW-POSITIONS are current positions in all windows displaying +this dired buffer. The window positions have the form (WINDOW +DIRED-FILENAME WINDOW-POINT)." + (list + (list (current-buffer) (dired-get-filename nil t) (point)) + (mapcar (lambda (w) + (list w + (with-selected-window w + (dired-get-filename nil t)) + (window-point w))) + (get-buffer-window-list nil 0 t)))) (defun dired-restore-positions (positions) "Restore POSITIONS saved with `dired-save-positions'." - (dolist (win-file-pos positions) - (with-selected-window (car win-file-pos) - (unless (and (nth 1 win-file-pos) - (dired-goto-file (nth 1 win-file-pos))) - (goto-char (nth 2 win-file-pos)) - (dired-move-to-filename))))) + (let* ((buf-file-pos (nth 0 positions)) + (buffer (nth 0 buf-file-pos))) + (unless (and (nth 1 buf-file-pos) + (dired-goto-file (nth 1 buf-file-pos))) + (goto-char (nth 2 buf-file-pos)) + (dired-move-to-filename)) + (dolist (win-file-pos (nth 1 positions)) + ;; Ensure that window still displays the original buffer. + (when (eq (window-buffer (nth 0 win-file-pos)) buffer) + (with-selected-window (nth 0 win-file-pos) + (unless (and (nth 1 win-file-pos) + (dired-goto-file (nth 1 win-file-pos))) + (goto-char (nth 2 win-file-pos)) + (dired-move-to-filename))))))) (defun dired-remember-marks (beg end) "Return alist of files and their marks, from BEG to END."