* bug#4880: point moves in other dired windows @ 2009-11-06 15:35 ` Per Starbäck 2009-11-12 22:45 ` bug#4880: marked as done (point moves in other dired windows) Emacs bug Tracking System 0 siblings, 1 reply; 7+ messages in thread From: Per Starbäck @ 2009-11-06 15:35 UTC (permalink / raw) To: bug-gnu-emacs I have done this in 23.1 and in the current cvs version: emacs -q /tmp C-x 2 g Point in the *other* window now goes to the beginning of the buffer, which was unexpected for me. dired-revert saves the old point, but only for the current window. The enclosed patch fixes it so that dired-revert saves and restores the point in all windows showing that dired buffer. $ diff -c dired.el.~1.436~ dired.el *** dired.el.~1.436~ 2009-11-06 13:29:08.000000000 +0100 --- dired.el 2009-11-06 15:35:29.000000000 +0100 *************** *** 1103,1110 **** Preserves old cursor, marks/flags, hidden-p." (widen) ; just in case user narrowed (let ((modflag (buffer-modified-p)) ! (opoint (point)) ! (ofile (dired-get-filename nil t)) (mark-alist nil) ; save marked files (hidden-subdirs (dired-remember-hidden)) (old-subdir-alist (cdr (reverse dired-subdir-alist))) ; except pwd --- 1103,1109 ---- Preserves old cursor, marks/flags, hidden-p." (widen) ; just in case user narrowed (let ((modflag (buffer-modified-p)) ! (positions (dired-save-positions)) (mark-alist nil) ; save marked files (hidden-subdirs (dired-remember-hidden)) (old-subdir-alist (cdr (reverse dired-subdir-alist))) ; except pwd *************** *** 1124,1132 **** ;; ... run the hook for the whole buffer, and only after markers ;; have been reinserted (else omitting in dired-x would omit marked files) (run-hooks 'dired-after-readin-hook) ; no need to narrow ! (or (and ofile (dired-goto-file ofile)) ; move cursor to where it ! (goto-char opoint)) ; was before ! (dired-move-to-filename) (save-excursion ; hide subdirs that were hidden (dolist (dir hidden-subdirs) (if (dired-goto-subdir dir) --- 1123,1129 ---- ;; ... run the hook for the whole buffer, and only after markers ;; have been reinserted (else omitting in dired-x would omit marked files) (run-hooks 'dired-after-readin-hook) ; no need to narrow ! (dired-restore-positions positions) (save-excursion ; hide subdirs that were hidden (dolist (dir hidden-subdirs) (if (dired-goto-subdir dir) *************** *** 1140,1145 **** --- 1137,1161 ---- ;; Subroutines of dired-revert ;; Some of these are also used when inserting subdirs. + (defun dired-save-positions () + "Store the current positions in all windows displaying this dired buffer. + Store both filename (if any) and 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))))) + (defun dired-remember-marks (beg end) "Return alist of files and their marks, from BEG to END." (if selective-display ; must unhide to make this work. ^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#4880: marked as done (point moves in other dired windows) 2009-11-06 15:35 ` bug#4880: point moves in other dired windows Per Starbäck @ 2009-11-12 22:45 ` Emacs bug Tracking System 0 siblings, 0 replies; 7+ messages in thread From: Emacs bug Tracking System @ 2009-11-12 22:45 UTC (permalink / raw) To: Stefan Monnier [-- Attachment #1: Type: text/plain, Size: 883 bytes --] Your message dated Thu, 12 Nov 2009 17:38:51 -0500 with message-id <jwv639fs71y.fsf-monnier+emacsbugreports@gnu.org> and subject line Re: bug#4880: point moves in other dired windows has caused the Emacs bug report #4880, regarding point moves in other dired windows to be marked as done. This means that you claim that the problem has been dealt with. If this is not the case it is now your responsibility to reopen the bug report if necessary, and/or fix the problem forthwith. (NB: If you are a system administrator and have no idea what this message is talking about, this may indicate a serious mail system misconfiguration somewhere. Please contact owner@emacsbugs.donarmstrong.com immediately.) -- 4880: http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=4880 Emacs Bug Tracking System Contact owner@emacsbugs.donarmstrong.com with problems [-- Attachment #2: Type: message/rfc822, Size: 6040 bytes --] From: "Per Starbäck" <per@starback.se> To: bug-gnu-emacs@gnu.org Subject: point moves in other dired windows Date: Fri, 6 Nov 2009 16:35:32 +0100 Message-ID: <912155b0911060735o6f81038hcc5927f21c119700@mail.gmail.com> I have done this in 23.1 and in the current cvs version: emacs -q /tmp C-x 2 g Point in the *other* window now goes to the beginning of the buffer, which was unexpected for me. dired-revert saves the old point, but only for the current window. The enclosed patch fixes it so that dired-revert saves and restores the point in all windows showing that dired buffer. $ diff -c dired.el.~1.436~ dired.el *** dired.el.~1.436~ 2009-11-06 13:29:08.000000000 +0100 --- dired.el 2009-11-06 15:35:29.000000000 +0100 *************** *** 1103,1110 **** Preserves old cursor, marks/flags, hidden-p." (widen) ; just in case user narrowed (let ((modflag (buffer-modified-p)) ! (opoint (point)) ! (ofile (dired-get-filename nil t)) (mark-alist nil) ; save marked files (hidden-subdirs (dired-remember-hidden)) (old-subdir-alist (cdr (reverse dired-subdir-alist))) ; except pwd --- 1103,1109 ---- Preserves old cursor, marks/flags, hidden-p." (widen) ; just in case user narrowed (let ((modflag (buffer-modified-p)) ! (positions (dired-save-positions)) (mark-alist nil) ; save marked files (hidden-subdirs (dired-remember-hidden)) (old-subdir-alist (cdr (reverse dired-subdir-alist))) ; except pwd *************** *** 1124,1132 **** ;; ... run the hook for the whole buffer, and only after markers ;; have been reinserted (else omitting in dired-x would omit marked files) (run-hooks 'dired-after-readin-hook) ; no need to narrow ! (or (and ofile (dired-goto-file ofile)) ; move cursor to where it ! (goto-char opoint)) ; was before ! (dired-move-to-filename) (save-excursion ; hide subdirs that were hidden (dolist (dir hidden-subdirs) (if (dired-goto-subdir dir) --- 1123,1129 ---- ;; ... run the hook for the whole buffer, and only after markers ;; have been reinserted (else omitting in dired-x would omit marked files) (run-hooks 'dired-after-readin-hook) ; no need to narrow ! (dired-restore-positions positions) (save-excursion ; hide subdirs that were hidden (dolist (dir hidden-subdirs) (if (dired-goto-subdir dir) *************** *** 1140,1145 **** --- 1137,1161 ---- ;; Subroutines of dired-revert ;; Some of these are also used when inserting subdirs. + (defun dired-save-positions () + "Store the current positions in all windows displaying this dired buffer. + Store both filename (if any) and 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))))) + (defun dired-remember-marks (beg end) "Return alist of files and their marks, from BEG to END." (if selective-display ; must unhide to make this work. [-- Attachment #3: Type: message/rfc822, Size: 1902 bytes --] From: Stefan Monnier <monnier@IRO.UMontreal.CA> To: "Per Starbäck" <per@starback.se> Subject: Re: bug#4880: point moves in other dired windows Date: Thu, 12 Nov 2009 17:38:51 -0500 Message-ID: <jwv639fs71y.fsf-monnier+emacsbugreports@gnu.org> > dired-revert saves the old point, but only for the current window. The > enclosed patch fixes it so that dired-revert saves and restores the > point in all windows showing that dired buffer. Thank you, installed, Stefan ^ permalink raw reply [flat|nested] 7+ messages in thread
[parent not found: <87d42v8vhe.fsf@mail.jurta.org>]
* bug#4880: point moves in other dired windows [not found] ` <87d42v8vhe.fsf@mail.jurta.org> @ 2009-12-04 21:49 ` Juri Linkov 2009-12-05 5:00 ` Stefan Monnier 0 siblings, 1 reply; 7+ messages in thread From: Juri Linkov @ 2009-12-04 21:49 UTC (permalink / raw) To: Stefan Monnier; +Cc: 4880, Per Starbäck > Unfortunately, this doesn't work for dired buffers that are > not displayed in a window. This is a really annoying problem. What about the following patch that also restores buffer's point positions after dired-revert in hidden dired buffers? Index: lisp/dired.el =================================================================== RCS file: /sources/emacs/emacs/lisp/dired.el,v retrieving revision 1.446 diff -c -r1.446 dired.el *** lisp/dired.el 4 Dec 2009 05:00:44 -0000 1.446 --- lisp/dired.el 4 Dec 2009 21:49:19 -0000 *************** *** 1143,1161 **** ;; 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))) (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)) --- 1170,1211 ---- ;; Some of these are also used when inserting subdirs. (defun dired-save-positions () ! "Return the current positions in all buffers and windows with this directory. ! The positions have the form (BUFFER-POSITIONS WINDOW-POSITIONS). ! ! BUFFER-POSITIONS are positions in all dired buffers associated with ! the current directory. The buffer positions 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 ! (mapcar (lambda (buffer) ! (cons buffer ! (with-current-buffer buffer ! (list ! (dired-get-filename nil t) ! (point))))) ! (dired-buffers-for-dir ! (if (consp dired-directory) (car dired-directory) dired-directory))) ! (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 (buf-file-pos (nth 0 positions)) ! (with-current-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)) ! (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)) -- Juri Linkov http://www.jurta.org/emacs/ ^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#4880: point moves in other dired windows 2009-12-04 21:49 ` bug#4880: point moves in other dired windows Juri Linkov @ 2009-12-05 5:00 ` Stefan Monnier 2009-12-05 19:42 ` Juri Linkov 0 siblings, 1 reply; 7+ messages in thread From: Stefan Monnier @ 2009-12-05 5:00 UTC (permalink / raw) To: Juri Linkov; +Cc: 4880, Per Starbäck > ! (list > ! (mapcar (lambda (buffer) > ! (cons buffer > ! (with-current-buffer buffer > ! (list > ! (dired-get-filename nil t) > ! (point))))) > ! (dired-buffers-for-dir > ! (if (consp dired-directory) (car dired-directory) dired-directory))) > ! (mapcar (lambda (w) > ! (list w > ! (with-selected-window w > ! (dired-get-filename nil t)) > ! (window-point w))) > ! (get-buffer-window-list nil 0 t)))) I do not understand, why we save the point of all "dired-buffers-for-dir" but only the point of the windows showing the current buffer. I'd prefer to resolve this discrepancy by only saving the current buffer's point (after all, the other buffer's won't be affected by the revert, right)? Stefan ^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#4880: point moves in other dired windows 2009-12-05 5:00 ` Stefan Monnier @ 2009-12-05 19:42 ` Juri Linkov 2009-12-05 21:09 ` Stefan Monnier 0 siblings, 1 reply; 7+ messages in thread From: Juri Linkov @ 2009-12-05 19:42 UTC (permalink / raw) To: Stefan Monnier; +Cc: 4880, Per Starbäck > I do not understand, why we save the point of all > "dired-buffers-for-dir" but only the point of the windows showing the > current buffer. > I'd prefer to resolve this discrepancy by only saving the current > buffer's point (after all, the other buffer's won't be affected by the > revert, right)? Since other buffers of the same dir won't be reverted, then yes, there is no point in saving their points. Index: lisp/dired.el =================================================================== RCS file: /sources/emacs/emacs/lisp/dired.el,v retrieving revision 1.447 diff -c -r1.447 dired.el *** lisp/dired.el 4 Dec 2009 21:45:34 -0000 1.447 --- lisp/dired.el 5 Dec 2009 19:39:39 -0000 *************** *** 1169,1187 **** ;; 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))) (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)) --- 1169,1201 ---- ;; Some of these are also used when inserting subdirs. (defun dired-save-positions () ! "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 (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 (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'." ! (let ((buf-file-pos (nth 0 positions))) ! (unless (and (nth 0 buf-file-pos) ! (dired-goto-file (nth 0 buf-file-pos))) ! (goto-char (nth 1 buf-file-pos)) ! (dired-move-to-filename))) ! (dolist (win-file-pos (nth 1 positions)) ! (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)) -- Juri Linkov http://www.jurta.org/emacs/ ^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#4880: point moves in other dired windows 2009-12-05 19:42 ` Juri Linkov @ 2009-12-05 21:09 ` Stefan Monnier 2009-12-05 23:22 ` Juri Linkov 0 siblings, 1 reply; 7+ messages in thread From: Stefan Monnier @ 2009-12-05 21:09 UTC (permalink / raw) To: Juri Linkov; +Cc: 4880, Per Starbäck > Since other buffers of the same dir won't be reverted, then yes, > there is no point in saving their points. That looks good, thanks. Just one more thing: > (defun dired-restore-positions (positions) > "Restore POSITIONS saved with `dired-save-positions'." > ! (let ((buf-file-pos (nth 0 positions))) > ! (unless (and (nth 0 buf-file-pos) > ! (dired-goto-file (nth 0 buf-file-pos))) > ! (goto-char (nth 1 buf-file-pos)) > ! (dired-move-to-filename))) > ! (dolist (win-file-pos (nth 1 positions)) > ! (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)) In restore, we should check that the window's buffer is still "our buffer". In some rare occasions, revert-buffer may cause some prompt or other thing that may change some window's configuration, so better be safe than sorry. I know this is not a new problem in your code, but while we're here, can you fix this other one as well (and then commit)? Stefan ^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#4880: point moves in other dired windows 2009-12-05 21:09 ` Stefan Monnier @ 2009-12-05 23:22 ` Juri Linkov 0 siblings, 0 replies; 7+ messages in thread From: Juri Linkov @ 2009-12-05 23:22 UTC (permalink / raw) To: Stefan Monnier; +Cc: 4880, Per Starbäck > In restore, we should check that the window's buffer is still "our > buffer". In some rare occasions, revert-buffer may cause some prompt or > other thing that may change some window's configuration, so better be > safe than sorry. Done. -- Juri Linkov http://www.jurta.org/emacs/ ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2009-12-05 23:22 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <jwv639fs71y.fsf-monnier+emacsbugreports@gnu.org> 2009-11-06 15:35 ` bug#4880: point moves in other dired windows Per Starbäck 2009-11-12 22:45 ` bug#4880: marked as done (point moves in other dired windows) Emacs bug Tracking System [not found] ` <87d42v8vhe.fsf@mail.jurta.org> 2009-12-04 21:49 ` bug#4880: point moves in other dired windows Juri Linkov 2009-12-05 5:00 ` Stefan Monnier 2009-12-05 19:42 ` Juri Linkov 2009-12-05 21:09 ` Stefan Monnier 2009-12-05 23:22 ` Juri Linkov
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).