| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.427 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.4.427 |
| Problem: When an InsertCharPre autocommand executes system() typeahead may |
| be echoed and messes up the display. (Jacob Niehus) |
| Solution: Do not set cooked mode when invoked from ":silent". |
| Files: src/eval.c, runtime/doc/eval.txt |
| |
| |
| |
| |
| |
| *** 18594,18599 **** |
| --- 18594,18600 ---- |
| int err = FALSE; |
| FILE *fd; |
| list_T *list = NULL; |
| + int flags = SHELL_SILENT; |
| |
| rettv->v_type = VAR_STRING; |
| rettv->vval.v_string = NULL; |
| |
| *** 18643,18648 **** |
| --- 18644,18654 ---- |
| } |
| } |
| |
| + /* Omit SHELL_COOKED when invoked with ":silent". Avoids that the shell |
| + * echoes typeahead, that messes up the display. */ |
| + if (!msg_silent) |
| + flags += SHELL_COOKED; |
| + |
| if (retlist) |
| { |
| int len; |
| |
| *** 18652,18659 **** |
| char_u *end; |
| int i; |
| |
| ! res = get_cmd_output(get_tv_string(&argvars[0]), infile, |
| ! SHELL_SILENT | SHELL_COOKED, &len); |
| if (res == NULL) |
| goto errret; |
| |
| --- 18658,18664 ---- |
| char_u *end; |
| int i; |
| |
| ! res = get_cmd_output(get_tv_string(&argvars[0]), infile, flags, &len); |
| if (res == NULL) |
| goto errret; |
| |
| |
| *** 18694,18701 **** |
| } |
| else |
| { |
| ! res = get_cmd_output(get_tv_string(&argvars[0]), infile, |
| ! SHELL_SILENT | SHELL_COOKED, NULL); |
| #ifdef USE_CR |
| /* translate <CR> into <NL> */ |
| if (res != NULL) |
| --- 18699,18705 ---- |
| } |
| else |
| { |
| ! res = get_cmd_output(get_tv_string(&argvars[0]), infile, flags, NULL); |
| #ifdef USE_CR |
| /* translate <CR> into <NL> */ |
| if (res != NULL) |
| |
| |
| |
| *** 6071,6076 **** |
| --- 6093,6104 ---- |
| list items converted to NULs). |
| Pipes are not used. |
| |
| + When prepended by |:silent| the shell 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. > |
| + :silent let f = system('ls *.vim') |
| + < |
| Note: Use |shellescape()| or |::S| with |expand()| or |
| |fnamemodify()| to escape special characters in a command |
| argument. Newlines in {expr} may cause the command to fail. |
| |
| |
| |
| *** 743,744 **** |
| --- 743,746 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 427, |
| /**/ |
| |
| -- |
| How many light bulbs does it take to change a person? |
| |
| /// Bram Moolenaar -- Bram@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 /// |