Ozaki Kiichi wrote:

> Doing ":redraw" during external command causes strange screen state and 
> cursor position.
> 
> [repro steps]
> 
> test.vim
> 
> ----
> " for clarity of screen state
> colorscheme morning
> syntax on
> 
> function! Callback(timer) abort
>     redraw
>     "quit
> endfunction
> 
> call timer_start(1000, 'Callback')
> :!ls
> ----
> 
> vim -Nu NONE -S test.vim
> 
> starting, after ":!ls" and ":redraw" in timer callback:
> cursor is positioned on the right of "help version7<Enter>"
> 
> https://cloud.githubusercontent.com/assets/18260849/17743470/cadaca1e-64de-11e6-9c95-cd3a0f5111a3.png
> 
> entering insert mode:
> "~" of empty line prefix isn't drawn.
> 
> https://cloud.githubusercontent.com/assets/18260849/17743478/cfacf242-64de-11e6-922d-0411f7a59c5e.png
> 
> quiting:
> intro remains.
> 
> https://cloud.githubusercontent.com/assets/18260849/17743483/d48c6e1e-64de-11e6-9d77-a96709b15c4c.png
> 
> [cause/detail]
> 
> Terminal goes into inconsistent state.
> 
> normal sequence of executing external command:
> ----
> do_shell
>   stoptermcap // switch to normal screen buffer (T_TE [DECRST 1049]), 
> termcap_active=FALSE
>   call_shell
>     mch_call_shell
>       settmode(TMODE_COOK)
>       [:!ls]
>       settmode(TMODE_RAW)
>   wait_return
>   starttermcap // switch to alt-screen buffer (T_TI [DECSET 1049]), 
> termcap_active=TRUE
> ----
> 
> case-1: this problem
> ----
> do_shell
>   stoptermcap // switch to normal screen buffer
>   call_shell
>   (snip)
>   wait_return
>     (firing timer)
>        ex_redraw // draw intro on normal (NOT alt-) screen buffer
>     (waiting key-input)
>   starttermcap // switch to alt-screen buffer
>   (snip)
>   // on exiting, restore to normal screen buffer (== intro)
> ----
> 
> case-2: uncommenting ":quit" in callback
> ----
> do_shell
>   stoptermcap // switch to normal screen buffer
>   call_shell
>   (snip)
>   wait_return
>     (timer発火)
>       ex_redraw // draw intro on normal (NOT alt-) screen buffer
>       ex_quit
>         getout
>           (exit) // :quit
> ----
> 
> [patch]
> 
> - check "termcap_active" in screen_valid(), except GUI.
> (on GUI, this prevents executing external command)
> 
> https://gist.github.com/ichizok/4fe3853dbc7cc2e67c4a994e59fc5ee8

Isn't this a bit too drastic?  When termcap_active it should still be
possible to output text (e.g. from another timer command).

Also check msg_use_printf().  Looks like your change overrules its own
check for termcap_active.

-- 
   [Another hideous roar.]
BEDEVERE: That's it!
ARTHUR:   What?
BEDEVERE: It's The Legendary Black Beast of Aaaaarrrrrrggghhh!
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- b...@moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" 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_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui