Hey guys, this is sort of an obscure problem, I'm not sure if you have any 
suggestions. I'm running vim 7.3.3 (locally) on an android phone, via 
Connectbot, and I'm getting a crash that can't be reproduced on a computer due 
to redr!, maybe because of memory constraints or something. For example, the 
following script will crash my phone after about 3 seconds

while 1
        if reltime()[1]%2
        exe "norm! \<c-e>"
        else
        exe "norm! \<c-y>"
        en
        redr!
endwhile

On the "verbose" error log I get an "Interrupted" message and it jumps straight 
into my VimLeavePre autocommmands. I'm mostly looking for a work-around or any 
suggestions as to how to avoid this, or whether it's possible to do a safer 
redraw, etc. Try / catch, for example, doesn't work.

The actual script I'm working on, if this is relevant, is a mouse panning 
thing, a la Adobe reader:

nn <silent> <leftmouse> :call getchar()<cr><leftmouse>:exe (MousePan()==1? 
"keepj norm! \<lt>leftmouse>":"")<cr>
        let glidestep=[99999999]+map(range(11),'11*(11-v:val)*(11-v:val)')
        fun! MousePan()
                if v:mouse_lnum>line('w$') || (&wrap && 
v:mouse_col%winwidth(0)==1) || (!&wrap && 
v:mouse_col>=winwidth(0)+winsaveview().leftcol) || v:mouse_lnum==line('$')
                        if line('$')==line('w0') | exe "keepj norm! \<c-y>" |en
                        return 1 | en
                exe "norm! \<leftmouse>"
                let 
[veon,fr,tl,dvl,dhl]=[&ve==?'all',-1,repeat([reltime()],4),[0,0,0,0],[0,0,0,0]]
                let v=winsaveview()
                let [v.col,v.coladd]=[0,v.curswant]
                while getchar()=="\<leftdrag>"
                        let [dV,dH,fr]=[min([v:mouse_lnum-v.lnum,v.topline-1]), 
min([veon*(v:mouse_col-v.coladd-1),v.leftcol]),(fr+1)%4]
                        let 
[v.topline,v.leftcol,v.lnum,v.coladd,tl[fr],dvl[fr],dhl[fr]]=[v.topline-dV,v.leftcol-dH,v:mouse_lnum-dV,v:mouse_col-1-dH,reltime(),dV,dH]
                        call winrestview(v)
                        redr!
                endwhile
                let 
[sv,sh]=[dvl[0]+dvl[1]+dvl[2]+dvl[3],dhl[0]+dhl[1]+dhl[2]+dhl[3]]
                let [ctl,cln,sv]=sv>2? ['-(v.topline>1)','-(v.lnum>1)',sv+10] : 
sv<-2? ['v.topline<'.line('$'),'v.lnum<'.line('$'),-sv+10] : 
['-(v.topline>1)','-(v.lnum>1)',0]
                let [clc,cca,sh,vc,hc]=sh>2? 
['-(v.leftcol>0)','-(v.coladd>0)',sh+10,0,0] : sh<-2? ['1','1',-sh+10,0,0] : 
['1','1',0,0,0]
                if !eval(join(reltime(tl[(fr+1)%4]),' || 20000<')) || !sv && 
!sh | return | en
                while !getchar(1) && sv+sh>0
                        let 
[y,x,vc,hc]=[vc>get(g:glidestep,sv,1),hc>get(g:glidestep,sh,1),vc+1,hc+1]
                        if y+x
                                let [v.topline,v.lnum,sv,vc]+=y? 
[eval(ctl),eval(cln),-1,-vc] : [0,0,0,0]
                                let [v.leftcol,v.coladd,sh,hc]+=x? 
[eval(clc),eval(cca),-1,-hc] : [0,0,0,0]
                                call winrestview(v)
                                redr!
                        en
                endw
        endfun

-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to