Sunday, August 25, 2013

Re: redraw crashes on android


On Aug 25, 2013 10:36 PM, "Liang Li" <q335r49@gmail.com> wrote:
>
> 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

Why not use some more recent version? There were plenty of bug fixes.

> 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.

Try setting 'nolazyredraw'. This should cause normally omitted redraws while script is running. I have no other idea how to cause a redraw except for :execute "normal!\<C-l>", which should not make any difference.

> 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 vim_use+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.

--
--
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 vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

No comments: