runtime(doc): clarify :silent usage for system()/systemlist()

Commit: 
https://github.com/vim/vim/commit/751b59e539e80a0b35fb5c6d1b763a86bcac2304
Author: Yasuhiro Matsumoto <[email protected]>
Date:   Sun Mar 15 09:16:42 2026 +0000

    runtime(doc): clarify :silent usage for system()/systemlist()
    
    When system() or systemlist() is called without :silent from a
    statusline expression, autocommand, or timer callback, the terminal
    is temporarily set to cooked mode, which re-enables ECHO on the tty.
    If a terminal response (e.g. DECRPM for cursor blink mode) arrives
    during this window, the tty driver echoes it to the screen, leaving
    stray characters that require CTRL-L to remove.
    
    This behavior was intentionally addressed in patch 7.4.427 by
    skipping cooked mode when :silent is prepended.  However, the
    documentation only mentioned this for system() and did not cover
    systemlist() at all.  The guidance to use :silent in non-interactive
    contexts (statusline, autocommands, timers) was also not explicit.
    
    closes #19691
    
    Signed-off-by: Yasuhiro Matsumoto <[email protected]>
    Signed-off-by: Christian Brabandt <[email protected]>

diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index 45072ab16..21dc56c33 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -1,4 +1,4 @@
-*builtin.txt*  For Vim version 9.2.  Last change: 2026 Mar 13
+*builtin.txt*  For Vim version 9.2.  Last change: 2026 Mar 15
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -11713,7 +11713,11 @@ system({expr} [, {input}])                             
*system()* *E677*
                When prepended by |:silent| the terminal will not be set to
                cooked mode.  This is meant to be used for commands that do
                not need the user to type.  It avoids stray characters showing
-               up on the screen which require |CTRL-L| to remove. >
+               up on the screen which require |CTRL-L| to remove.
+               When calling system() from a |statusline| expression, an
+               |autocommand| or a |timer| callback, you should use |:silent|
+               to avoid terminal responses (e.g. from cursor style queries)
+               being echoed on the screen. >
                        :silent let f = system('ls *.vim')
 <
                Note: Use |shellescape()| or |::S| with |expand()| or
@@ -11771,6 +11775,11 @@ systemlist({expr} [, {input}])                         
*systemlist()*
 <
                Returns an empty string on error.
 
+               Like |system()|, prepend |:silent| when the command does not
+               need user interaction and is called from a |statusline|
+               expression, an |autocommand| or a |timer| callback.  See
+               |system()| for details.
+
                Can also be used as a |method|: >
                        :echo GetCmd()->systemlist()
 <

-- 
-- 
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 [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1w1hnP-006NJE-OF%40256bit.org.

Raspunde prin e-mail lui