summaryrefslogtreecommitdiff
path: root/src/os_unix.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2005-12-12 21:58:40 +0000
committerBram Moolenaar <Bram@vim.org>2005-12-12 21:58:40 +0000
commit5b962cf71c87f5d23408bac83c8a526b901daa3f (patch)
tree0105ddcc2ab582365acddeb7892516eec1bbad0b /src/os_unix.c
parent63a121b750c186db52de3d3ffbe016b89df8970b (diff)
downloadvim-git-5b962cf71c87f5d23408bac83c8a526b901daa3f.tar.gz
updated for version 7.0168
Diffstat (limited to 'src/os_unix.c')
-rw-r--r--src/os_unix.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/os_unix.c b/src/os_unix.c
index 4535aef47..89c420d99 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -3970,14 +3970,25 @@ mch_call_shell(cmd, options)
{
/*
* Check if keys have been typed, write them to the child
- * if there are any. Don't do this if we are expanding
- * wild cards (would eat typeahead). Don't get extra
- * characters when we already have one.
+ * if there are any.
+ * Don't do this if we are expanding wild cards (would eat
+ * typeahead).
+ * Don't do this when filtering and terminal is in cooked
+ * mode, the shell command will handle the I/O. Avoids
+ * that a typed password is echoed for ssh or gpg command.
+ * Don't get extra characters when we already have one.
* Don't read characters unless we didn't get output for a
* while, avoids that ":r !ls" eats typeahead.
*/
len = 0;
if (!(options & SHELL_EXPAND)
+ && ((options &
+ (SHELL_READ|SHELL_WRITE|SHELL_COOKED))
+ != (SHELL_READ|SHELL_WRITE|SHELL_COOKED)
+#ifdef FEAT_GUI
+ || gui.in_use
+#endif
+ )
&& (ta_len > 0
|| (noread_cnt > 4
&& (len = ui_inchar(ta_buf,