On 28/10/2007, Bram Moolenaar <[EMAIL PROTECTED]> wrote: > > Bjorn Winckler wrote: > > > This problem was brought up on the vim_mac list a while back but it > > turns out not to be mac specific so I am posting to the vim_dev list > > as well. > > > > On 12/09/2007, Nico Weber <[EMAIL PROTECTED]> wrote: > > > > > > 1.) :!ls > > > 2.) hit space until the "Hit ENTER prompt" appears if necessary > > > 3.) Cmd-tab or cmd-` from and to the window where you did this > > > > > > Results: The prompt is drawn over and over (one additional line per > > > focus gained/lost). > > > > > > This also happens with Carbon Vim, but not with Ubuntu gvim (and of > > > course not with the terminal version), so I guess this is a mac > > > specific problem. Bjorn, if you fix this, let us know if your patch > > > can be adapted to carbon vim as well ;-) > > > > I have finally looked into this problem and found out what causes it. > > In ui_focus_change() [ui.c] there is a line like this: > > > > need_redraw |= apply_autocmds(in_focus ? EVENT_FOCUSGAINED > > : EVENT_FOCUSLOST, NULL, NULL, FALSE, curbuf); > > > > Now, apply_autocmds() returns 1 if an autocommand was applied which > > will set the need_redraw flag and eventually repeat_message() is > > called which in turn calls hit_return_msg() [both in message.c] and > > the "Press ENTER ..." message is displayed again. > > > > If I run Vim without any autocommands on focus events, then the "Press > > ENTER ..." message is displayed only once...otherwise the message is > > repeated each time focus is lost or gained (and eventually fills the > > entire screen). > > > > How should this be fixed? There is some stuff going on in > > hit_return_msg() that I do not understand...the other messages called > > in repeat_message() seem to only rewrite the message on the same line > > whereas hit_return_msg() starts a new line. I don't dare to just > > change hit_return_msg() so that it outputs the message on the same > > line every time, since this may break something else as far as I know. > > Any ideas? > > I don't see the sequence of events yet. Why would Vim get more focus > change events?
Try this: start gvim, add autocommands to FocusLost and FocusGained, then type ":!ls" which will bring up the "Press ENTER or type command to continue" prompt. Now switch focus to another app and then back to gvim again and you'll notice that two more "Press ENTER ..." lines have appeared. Each focus lost/gained event has called hit_return_msg(). > > When a focus autocommand is triggered, Vim may need to redraw, since > it's undefined what the autocommand has done. Imagine the autocommand > does "echo 'focus gained'". Ok, so is there nothing to do about this then? How come then "--more--" prompt only appears once though? (You can repeat the above procedure with ":digraphs" instead of ":!ls" to see this.) /Björn --~--~---------~--~----~------------~-------~--~----~ You received this message from the "vim_dev" maillist. For more information, visit http://www.vim.org/maillist.php -~----------~----~----~----~------~----~------~--~---
