Mercurial > vim
view vimtutor.com @ 34094:0b25a862bf0c v9.1.0014
patch 9.1.0014: incorrect use of W_WINROW in edit.c
Commit: https://github.com/vim/vim/commit/b1ed7ec9f7d1a0142d4f1c8c83bab9172bc92c7c
Author: zeertzjq <zeertzjq@outlook.com>
Date: Fri Jan 5 18:11:43 2024 +0100
patch 9.1.0014: incorrect use of W_WINROW in edit.c
Problem: incorrect use of W_WINROW in edit.c
Solution: compare against curwin->w_height instead
Remove incorrect use of W_WINROW
In structs.h it is mentioned that w_wrow is relative to w_winrow, so
using W_WINROW doesn't make sense when comparing with window height.
This change won't lead to any observable behavior change:
The condition intends to check if there are 'scrolloff' lines between
the current cursor when the bottom of the window. When W_WINROW(curwin)
is added to curwin->w_height - 1 - get_scrolloff_value(), the condition
is instead satisfied when the cursor is on some screen line below that
position. However,
- If 'scrolloff' is smaller than half the window height, this condition
can only be satisfied when W_WINROW(curwin) == 0. And if it is not
satisfied, update_topline() does the actual scrolling.
- If 'scrolloff' is larger than half the window height, update_topline()
will put the cursor at the center of the window soon afterwards
anyway, because set_topline() now unsets VALID_TOPLINE flag starting
from https://github.com/vim/vim-history/commit/7db7bb45b0f919ff0615d463ebd4fde881c69d1f.
To put it in another way, https://github.com/vim/vim-history/commit/7db7bb45b0f919ff0615d463ebd4fde881c69d1f
makes the update_topline() just below correct the mistakes made in this
block, so this incorrect use of W_WINROW() no longer affects observable
behavior.
closes: #12331
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Fri, 05 Jan 2024 18:30:03 +0100 |
parents | 6f55637de261 |
children |
line wrap: on
line source
$ ! $ !===================================================================== $ ! $ ! VimTutor.com version 29-Aug-2002 $ ! $ ! Author: Tom Wyant <Thomas.R.Wyant-III@usa.dupont.com> $ ! $ ! This DCL command procedure executes the vimtutor command $ ! (surprise, surprise!) which gives you a brief tutorial on the $ ! VIM editor. Languages other than the default are supported in $ ! the usual way, as are at least some of the command qualifiers, $ ! though you'll need to play some fairly serious games with DCL $ ! to specify ones that need quoting. $ ! $ ! Copyright (c) 2002 E. I. DuPont de Nemours and Company, Inc $ ! $ ! This program is free software; you can redistribute it and/or $ ! modify it under the terms of the VIM license as available from $ ! the vim 6.1 ":help license" command or (at your option) the $ ! license from any later version of vim. $ ! $ ! This program is distributed in the hope that it will be useful, $ ! but WITHOUT ANY WARRANTY; without even the implied warranty of $ ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ ! $ !===================================================================== $ ! $ ! $ ! Check for the existence of VIM, and die if it isn't there. $ ! $ if f$search ("vim:vim.exe") .eqs. "" $ then $ write sys$error "Error - Can't run tutorial. VIM not found." $ exit $ endif $ ! $ ! $ ! Pick up the argument, if any. $ ! $ inx = 0 $ arg_loop: $ inx = inx + 1 $ if f$type (p'inx') .nes. "" $ then $ if p'inx' .nes. "" .and. f$locate ("-", p'inx') .ne. 0 $ then $ xx = p'inx' $ assign/nolog "''xx'" xx $ p'inx' = "" $ endif $ goto arg_loop $ endif $ ! $ ! $ ! Make sure we clean up our toys when we're through playing. $ ! $ on error then goto exit $ ! $ ! $ ! Create the VIM foreign command if needed $ ! $ if f$type (vim) .eqs. "" then vim := $vim:vim $ ! $ ! $ ! Build the name for our temp file. $ ! $ tutfil = "sys$login:vimtutor_" + - f$edit (f$getjpi (0, "pid"), "trim") + "." $ assign/nolog 'tutfil' TUTORCOPY $ ! $ ! $ ! Copy the selected file to the temp file $ ! $ assign/nolog/user nla0: sys$error $ assign/nolog/user nla0: sys$output $ vim -u "NONE" -c "so $VIMRUNTIME/tutor/tutor.vim" $ ! $ ! $ ! Run the tutorial $ ! $ assign/nolog/user sys$command sys$input $ vim -u "NONE" -c "set nocp" 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8' 'tutfil' $ ! $ ! $ ! Ditch the copy. $ ! $ exit: $ if f$type (tutfil) .nes. "" .and. f$search (tutfil) .nes. "" then - $ delete 'tutfil';* $ if f$type (xx) .nes. "" then deassign xx $ deassign TUTORCOPY $ exit $ ! $ !===================================================================== $ ! $ ! Modification history $ ! $ ! 29-Aug-2002 T. R. Wyant $ ! Changed license to vim. $ ! Fix error "input is not from a terminal" $ ! Juggle documentation (copyright and contact to front, $ ! modification history to end). $ ! 25-Jul-2002 T. R. Wyant $ ! Initial version