On 05/04/09 17:54 +0200, Bram Moolenaar wrote:
> 
> In your Test() function there is no redraw.  So even though you use "zb"
> it doesn't take effect.  If you then later change something that
> triggers a redraw, the relative cursor position hasn't been set yet.
> 
> Try the same operation by hand, I didn't see this problem then.
> 

Hi Bram, 
I may not fully understand your point, sorry.
To demonstrate it step by step, I added a breakpoint and two ":redraw!"s
around the trigger point. This time it can be triggered to display the
difference before and after the 'wincmd J' by hand for you.

$ vim -u NONE -S test.vim
$ cat test.vim

fun! BuildLines(prefix)
    let a = []
    for i in range(1, 100)
        call add(a, a:prefix . ": This is line " . i)
    endfor
    return a
endfun

breakadd func 24 Test
fun! Test()
    set equalalways
    set scrolloff=0

    " Create a Log window 
    new Log
    set bt=nofile
    only!

    " Create Main Window, then write some lines into it and 
    " display the 50th line in the bottom of the window
    top new Main
    set bt=nofile

    let a=BuildLines("Main")
    call append(0, a)
    normal 50G
    normal zb

    " Add some lines to another window (that is, the Log window)
    let win_no = bufwinnr("Log")
    if win_no != -1
        " Found the Log window
        exe win_no . "wincmd w"
        redraw!  " We can see 'zb' has effects (50th lines at bottom)
        wincmd J " Trigger the problem, use 'redraw' to see it
        redraw!  " After this, we'll see the 50th line got moved.
        call append('$', "Log: Where is the 50th line? ")
        exe "normal G"
    endif
endfun

call Test()

-- 
Dasn


--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui