K_IGNORE trick (periodic execution)

312 views
Skip to first unread message

Yakov

unread,
Mar 26, 2010, 6:01:48 PM3/26/10
to vim_use
There is trick for periodic execution, involving K_IGNORE and feedkeys
[1].
In the lastest vim 7.2.141, I cannot make it to work anymore.
Timer() is executed only once, as seen from 'echo strftime' printout.
Can anybody confirm this ? Am I missing some global setting ?
'updatetime' is set to 200.

autocmd CursorHold * call Timer()
function! Timer()
let K_IGNORE = "\x80\xFD\x35" " internal key code that is ignored
call feedkeys(K_IGNORE)
echo strftime("%c") " this for debugging
endfunction

[1] http://vim.wikia.com/wiki/Timer_to_execute_commands_periodically

Tony Mechelynck

unread,
Mar 26, 2010, 7:40:28 PM3/26/10
to vim...@googlegroups.com, Yakov, Bram Moolenaar

I confirm as follows:

I tried

:augroup clock
:au CursorHold * call feedkeys("\x80\xFD\x35") | echon strftime('%c') " "
:augroup END

both in gvim (with &enc == "utf-8") and in konsole (with &enc ==
"Latin1") and saw the datestamp displayed only once while I kept hands
off the keyboard & mouse.

In both cases, Huge version 7.2.411, compiled with GTK2/Gnome2 GUI;
'updatetime' is set to 4000 (the default).


Maybe I missed something too?


Best regards,
Tony.
--
All wars are civil wars, because all men are brothers ... Each one owes
infinitely more to the human race than to the particular country in
which he was born.
-- Francois Fenelon

Christian Brabandt

unread,
Mar 27, 2010, 4:23:52 AM3/27/10
to vim_use
Hi Yakov!

On Fr, 26 M�r 2010, Yakov wrote:

> There is trick for periodic execution, involving K_IGNORE and feedkeys
> [1].
> In the lastest vim 7.2.141, I cannot make it to work anymore.
> Timer() is executed only once, as seen from 'echo strftime' printout.
> Can anybody confirm this ? Am I missing some global setting ?
> 'updatetime' is set to 200.
>
> autocmd CursorHold * call Timer()
> function! Timer()
> let K_IGNORE = "\x80\xFD\x35" " internal key code that is ignored
> call feedkeys(K_IGNORE)
> echo strftime("%c") " this for debugging
> endfunction

I noticed that too when experimenting with this.
http://groups.google.com/group/vim_use/msg/34fafea1d489cc62
(and this with Windows vim vesion 7.2.330(?) not sure right now)

regards,
Christian

Bram Moolenaar

unread,
Mar 27, 2010, 12:14:21 PM3/27/10
to Tony Mechelynck, vim...@googlegroups.com, Yakov

Tony Mechelynck wrote:

This was changed in patch 7.2.025:

Patch 7.2.025
Problem: When a CursorHold event invokes system() it is retriggered over
and over again.
Solution: Don't reset did_cursorhold when getting K_IGNORE.
Files: src/normal.c


You can use something like "f\e" instead:

autocmd CursorHold * call Timer()
function! Timer()

call feedkeys("f\e")


echo strftime("%c") " this for debugging
endfunction

This starts a "f" command and then cancels it with Esc.
Does that have more side effects? We could add something like CTRL-\
CTRL-N that doesn't do anything. Much better than using an undocumented
key code.

--
You can be stopped by the police for biking over 65 miles per hour.
You are not allowed to walk across a street on your hands.
[real standing laws in Connecticut, United States of America]

/// Bram Moolenaar -- Br...@Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///

Matthew Kaniaris

unread,
Jun 17, 2013, 2:56:50 PM6/17/13
to vim...@googlegroups.com, Tony Mechelynck, Yakov

Unfortunately, calling \e will cancel any window command or map. Worse yet, some commands are canceled and others are not depending on how fast the user types and when the sequence was started in relation to the periodic \e. Some other solution would be much appreciated.

Reply all
Reply to author
Forward
0 new messages