* scroll-lock-mode and goal-column @ 2008-06-13 15:49 Stefan Monnier 2008-06-13 16:05 ` David Kastrup 2008-06-29 14:33 ` Ralf Angeli 0 siblings, 2 replies; 10+ messages in thread From: Stefan Monnier @ 2008-06-13 15:49 UTC (permalink / raw) To: emacs-devel Now that scroll-preserve-screen-position preserves the column position, I think that scroll-lock-mode can be simplified to not mess with the goal-column any more. Could someone look into this? Stefan ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: scroll-lock-mode and goal-column 2008-06-13 15:49 scroll-lock-mode and goal-column Stefan Monnier @ 2008-06-13 16:05 ` David Kastrup 2008-06-13 17:50 ` Stefan Monnier 2008-06-29 14:33 ` Ralf Angeli 1 sibling, 1 reply; 10+ messages in thread From: David Kastrup @ 2008-06-13 16:05 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel Stefan Monnier <monnier@IRO.UMontreal.CA> writes: > Now that scroll-preserve-screen-position preserves the column position, > I think that scroll-lock-mode can be simplified to not mess with the > goal-column any more. Could someone look into this? Im not convinced that scroll-preserve-screen-position _can_ preserve the column position. In the times where only fixed width characters existed, goal-column served the function of maintaining a column position even when one was moving temporarily across lines that had no "point" corresponding to a previous goal column. For preserving screen positions in the presence of variable width fonts, we really need a goal-pixel-position instead in order to have a comparable preservation of movement. Otherwise, moving back and forth "visually" across a line with a larger font, or just moving vertically across proportionally spaced fonts will make us lose track of the actual position. -- David Kastrup ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: scroll-lock-mode and goal-column 2008-06-13 16:05 ` David Kastrup @ 2008-06-13 17:50 ` Stefan Monnier 0 siblings, 0 replies; 10+ messages in thread From: Stefan Monnier @ 2008-06-13 17:50 UTC (permalink / raw) To: David Kastrup; +Cc: emacs-devel >> Now that scroll-preserve-screen-position preserves the column position, >> I think that scroll-lock-mode can be simplified to not mess with the >> goal-column any more. Could someone look into this? > Im not convinced that scroll-preserve-screen-position _can_ preserve the > column position. "Soyez réaliste, demandez l'impossible!" AFAIK, it *does* preserve the (pixel) column position. Stefan ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: scroll-lock-mode and goal-column 2008-06-13 15:49 scroll-lock-mode and goal-column Stefan Monnier 2008-06-13 16:05 ` David Kastrup @ 2008-06-29 14:33 ` Ralf Angeli 2008-06-29 17:51 ` Stefan Monnier 1 sibling, 1 reply; 10+ messages in thread From: Ralf Angeli @ 2008-06-29 14:33 UTC (permalink / raw) To: emacs-devel * Stefan Monnier (2008-06-13) writes: > Now that scroll-preserve-screen-position preserves the column position, > I think that scroll-lock-mode can be simplified to not mess with the > goal-column any more. Could someone look into this? After removing all calls to `scroll-lock-update-goal-column' and `scroll-lock-move-to-column' the behavior is not the same as before. For example if you open the info dir with `C-h i d', activate Scroll Lock mode, move point down a bit into the introductory blurb, then move it to column 30 and scroll down line by line with `C-n', point will sometimes stick to column 0 even though there is text to the right where it can be moved to. Also, it will not jump back to column 30, once it does, but to column 26. With the manual column adjustment in scroll-lock.el, point will be positioned correctly at column 30 again, when it is possible. I'm not sure if the behavior exhibited with using only `scroll-preserve-screen-position' is intentional, but it looks like a bug. The build I checked this with is about a week old. -- Ralf ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: scroll-lock-mode and goal-column 2008-06-29 14:33 ` Ralf Angeli @ 2008-06-29 17:51 ` Stefan Monnier 2008-06-29 18:10 ` Ralf Angeli 0 siblings, 1 reply; 10+ messages in thread From: Stefan Monnier @ 2008-06-29 17:51 UTC (permalink / raw) To: Ralf Angeli; +Cc: emacs-devel > For example if you open the info dir with `C-h i d', activate Scroll > Lock mode, move point down a bit into the introductory blurb, then move > it to column 30 and scroll down line by line with `C-n', point will > sometimes stick to column 0 even though there is text to the right where > it can be moved to. Most likely, `last-command' is not among '(scroll-up scroll-down) so the C code doesn't understand that it should preserve the column position from before the last command. > Also, it will not jump back to column 30, once it > does, but to column 26. Sounds very strange, indeed. But Info buffers have funny contents, so maybe you were in column 0 on a big display-property space that spanned columns from 0 to 26? Stefan ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: scroll-lock-mode and goal-column 2008-06-29 17:51 ` Stefan Monnier @ 2008-06-29 18:10 ` Ralf Angeli 2008-06-29 19:03 ` Stefan Monnier 0 siblings, 1 reply; 10+ messages in thread From: Ralf Angeli @ 2008-06-29 18:10 UTC (permalink / raw) To: emacs-devel * Stefan Monnier (2008-06-29) writes: >> For example if you open the info dir with `C-h i d', activate Scroll >> Lock mode, move point down a bit into the introductory blurb, then move >> it to column 30 and scroll down line by line with `C-n', point will >> sometimes stick to column 0 even though there is text to the right where >> it can be moved to. > > Most likely, `last-command' is not among '(scroll-up scroll-down) so the > C code doesn't understand that it should preserve the column position > from before the last command. Can I make the C code acquainted with the functions of scroll-lock.el? If this is what would remedy the situation. I'm a bit confused because in scroll-lock.el, the goal column is updated if `last-command' is _not_ among the scrolling functions. >> Also, it will not jump back to column 30, once it >> does, but to column 26. > > Sounds very strange, indeed. But Info buffers have funny contents, so > maybe you were in column 0 on a big display-property space that spanned > columns from 0 to 26? There are no display properties, AFAICS. And if I open the raw dir file the behavior is even worse, meaning point will not jump back into the previous column at all once it got stuck to column 0. -- Ralf ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: scroll-lock-mode and goal-column 2008-06-29 18:10 ` Ralf Angeli @ 2008-06-29 19:03 ` Stefan Monnier 2008-06-30 20:31 ` Ralf Angeli 0 siblings, 1 reply; 10+ messages in thread From: Stefan Monnier @ 2008-06-29 19:03 UTC (permalink / raw) To: Ralf Angeli; +Cc: emacs-devel >>> For example if you open the info dir with `C-h i d', activate Scroll >>> Lock mode, move point down a bit into the introductory blurb, then move >>> it to column 30 and scroll down line by line with `C-n', point will >>> sometimes stick to column 0 even though there is text to the right where >>> it can be moved to. >> >> Most likely, `last-command' is not among '(scroll-up scroll-down) so the >> C code doesn't understand that it should preserve the column position >> from before the last command. > Can I make the C code acquainted with the functions of scroll-lock.el? Not directly, no. Maybe we should add a variable for that. Othrwise, you can either set this-command to `scroll-up' (since it's later on mvoes to last-command), or you can let-bind last-command appropriately around the calls to scroll-up/down. > If this is what would remedy the situation. I'm a bit confused because > in scroll-lock.el, the goal column is updated if `last-command' is _not_ > among the scrolling functions. updated = changed = not preserved. I understand that since we're talking about preserving something used to preserve something else, it's not very clear. >> Sounds very strange, indeed. But Info buffers have funny contents, so >> maybe you were in column 0 on a big display-property space that spanned >> columns from 0 to 26? > There are no display properties, AFAICS. I'm pretty sure they're there: they're used for alignemnt. But indeed C-u C-x = has trouble finding them because there are insible spaces before them. > And if I open the raw dir file the behavior is even worse, meaning > point will not jump back into the previous column at all once it got > stuck to column 0. I actually much prefer this behavior because it's consistent with the simple `last-command' problem, so it should be easy to fix. Stefan ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: scroll-lock-mode and goal-column 2008-06-29 19:03 ` Stefan Monnier @ 2008-06-30 20:31 ` Ralf Angeli 2008-07-03 22:10 ` Stefan Monnier 0 siblings, 1 reply; 10+ messages in thread From: Ralf Angeli @ 2008-06-30 20:31 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1701 bytes --] * Stefan Monnier (2008-06-29) writes: >> Can I make the C code acquainted with the functions of scroll-lock.el? > > Not directly, no. Maybe we should add a variable for that. > Othrwise, you can either set this-command to `scroll-up' (since it's > later on mvoes to last-command), or you can let-bind last-command > appropriately around the calls to scroll-up/down. > >> If this is what would remedy the situation. I'm a bit confused because >> in scroll-lock.el, the goal column is updated if `last-command' is _not_ >> among the scrolling functions. > > updated = changed = not preserved. Ugh, I should stop answering messages when in a hurry. >> And if I open the raw dir file the behavior is even worse, meaning >> point will not jump back into the previous column at all once it got >> stuck to column 0. > > I actually much prefer this behavior because it's consistent with the > simple `last-command' problem, so it should be easy to fix. I'm not sure what to let-bind `last-command' to, but setting `this-command' seems to work. (See attached patch. No ChangeLog entry, because I don't think this should be applied.) The only problem now is that once the `forward-line' movement kicks in at the start or end of a buffer, point will be moved to column 0 again. However, I'd prefer the column to be preserved. Since this behavior of `forward-line' is by design, I'm not sure if we can get rid of the manual preservation of the goal column. `vertical-motion' obviously has a similar behavior and I did not find an alternative function for moving by lines that keeps the goal column, nor did I find an option which could be set in order for `forward-line' to change behavior. -- Ralf [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: scroll-lock.patch --] [-- Type: text/x-diff, Size: 2972 bytes --] Index: scroll-lock.el =================================================================== RCS file: /sources/emacs/emacs/lisp/scroll-lock.el,v retrieving revision 1.10 diff -u -r1.10 scroll-lock.el --- scroll-lock.el 6 May 2008 07:57:49 -0000 1.10 +++ scroll-lock.el 30 Jun 2008 20:04:03 -0000 @@ -63,63 +63,44 @@ (setq scroll-preserve-screen-position scroll-lock-preserve-screen-pos-save))) -(defun scroll-lock-update-goal-column () - "Update `scroll-lock-temporary-goal-column' if necessary." - (unless (memq last-command '(scroll-lock-next-line - scroll-lock-previous-line - scroll-lock-forward-paragraph - scroll-lock-backward-paragraph)) - (setq scroll-lock-temporary-goal-column (current-column)))) - -(defun scroll-lock-move-to-column (column) - "Like `move-to-column' but cater for wrapped lines." - (if (or (bolp) - ;; Start of a screen line. - (not (zerop (mod (- (point) (line-beginning-position)) - (window-width))))) - (move-to-column column) - (forward-char (min column (- (line-end-position) (point)))))) - (defun scroll-lock-next-line (&optional arg) "Scroll up ARG lines keeping point fixed." (interactive "p") (or arg (setq arg 1)) - (scroll-lock-update-goal-column) (if (pos-visible-in-window-p (point-max)) (forward-line arg) - (scroll-up arg)) - (scroll-lock-move-to-column scroll-lock-temporary-goal-column)) + (scroll-up arg) + (setq this-command 'scroll-up))) (defun scroll-lock-previous-line (&optional arg) "Scroll up ARG lines keeping point fixed." (interactive "p") (or arg (setq arg 1)) - (scroll-lock-update-goal-column) (condition-case nil - (scroll-down arg) - (beginning-of-buffer (forward-line (- arg)))) - (scroll-lock-move-to-column scroll-lock-temporary-goal-column)) + (progn + (scroll-down arg) + (setq this-command 'scroll-down)) + (beginning-of-buffer (forward-line (- arg))))) (defun scroll-lock-forward-paragraph (&optional arg) "Scroll down ARG paragraphs keeping point fixed." (interactive "p") (or arg (setq arg 1)) - (scroll-lock-update-goal-column) (scroll-up (count-screen-lines (point) (save-excursion (forward-paragraph arg) (point)))) - (scroll-lock-move-to-column scroll-lock-temporary-goal-column)) + (setq this-command 'scroll-up)) (defun scroll-lock-backward-paragraph (&optional arg) "Scroll up ARG paragraphs keeping point fixed." (interactive "p") (or arg (setq arg 1)) - (scroll-lock-update-goal-column) (let ((goal (save-excursion (backward-paragraph arg) (point)))) (condition-case nil - (scroll-down (count-screen-lines goal (point))) - (beginning-of-buffer (goto-char goal)))) - (scroll-lock-move-to-column scroll-lock-temporary-goal-column)) + (progn + (scroll-down (count-screen-lines goal (point))) + (setq this-command 'scroll-down)) + (beginning-of-buffer (goto-char goal))))) (provide 'scroll-lock) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: scroll-lock-mode and goal-column 2008-06-30 20:31 ` Ralf Angeli @ 2008-07-03 22:10 ` Stefan Monnier 2008-07-20 19:49 ` Ralf Angeli 0 siblings, 1 reply; 10+ messages in thread From: Stefan Monnier @ 2008-07-03 22:10 UTC (permalink / raw) To: Ralf Angeli; +Cc: emacs-devel >>> And if I open the raw dir file the behavior is even worse, meaning >>> point will not jump back into the previous column at all once it got >>> stuck to column 0. >> >> I actually much prefer this behavior because it's consistent with the >> simple `last-command' problem, so it should be easy to fix. > I'm not sure what to let-bind `last-command' to, but setting Any of `scroll-up' or `scroll-down'. > `this-command' seems to work. (See attached patch. No ChangeLog entry, Yes, it should work as well. > The only problem now is that once the `forward-line' movement kicks in > at the start or end of a buffer, point will be moved to column 0 again. Oh, indeed. That needs more work. > However, I'd prefer the column to be preserved. Since this behavior of > `forward-line' is by design, I'm not sure if we can get rid of the > manual preservation of the goal column. How 'bout using next-line? Stefan ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: scroll-lock-mode and goal-column 2008-07-03 22:10 ` Stefan Monnier @ 2008-07-20 19:49 ` Ralf Angeli 0 siblings, 0 replies; 10+ messages in thread From: Ralf Angeli @ 2008-07-20 19:49 UTC (permalink / raw) To: emacs-devel * Stefan Monnier (2008-07-04) writes: >> However, I'd prefer the column to be preserved. Since this behavior of >> `forward-line' is by design, I'm not sure if we can get rid of the >> manual preservation of the goal column. > > How 'bout using next-line? Not much better. It sometimes happens that when the last command was `scroll-up' and the next one is `next-line', i.e. the bottom of the buffer is reached, the goal column will not be preserved if point is not at the original goal column but e.g. at the start of the line. So it looks as if `next-line' is unaware of the goal column being in effect for `scroll-up'. There are other funny things going on sometimes, though they don't seem to be related to `next-line' because they happen with `forward-line' as well. Start Emacs with `emacs -Q', type `C-h i d', enable Scroll Lock mode, type `M-<' to put point at the start of the buffer, scroll up with `C-n' till point is just below the "* Menu" line, then scroll down with `C-p' till point reaches the start of the buffer (the line with "(dir)Top". Once this happens, point jumps back down to the first content line after "* Menu" which is "* Info..." here. (This is with the patched version of scroll-mode.el. Not sure if this happens with the unpatched one as well.) -- Ralf ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2008-07-20 19:49 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-06-13 15:49 scroll-lock-mode and goal-column Stefan Monnier 2008-06-13 16:05 ` David Kastrup 2008-06-13 17:50 ` Stefan Monnier 2008-06-29 14:33 ` Ralf Angeli 2008-06-29 17:51 ` Stefan Monnier 2008-06-29 18:10 ` Ralf Angeli 2008-06-29 19:03 ` Stefan Monnier 2008-06-30 20:31 ` Ralf Angeli 2008-07-03 22:10 ` Stefan Monnier 2008-07-20 19:49 ` Ralf Angeli
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).