summaryrefslogtreecommitdiff
path: root/src/normal.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-06-08 13:34:08 +0100
committerMaxime Coste <frrrwww@gmail.com>2015-06-08 13:45:20 +0100
commit942fc224af403de0a73511a4e6a5dfe4bfa53b91 (patch)
tree43b9482e2e150c6513f4f230bed667e97fd04a91 /src/normal.cc
parent7acf3da3ca6b012d603e4cf7360abb4a3235daca (diff)
Specify if ShellManager should read output or not using a flag
Some program (xclip), will fork a daemon keeping stdout/stderr open, so waiting for them to be closed make kakoune hang. Commands discarding stdout can then just not wait on it.
Diffstat (limited to 'src/normal.cc')
-rw-r--r--src/normal.cc16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/normal.cc b/src/normal.cc
index 20c2ce5a..c584baac 100644
--- a/src/normal.cc
+++ b/src/normal.cc
@@ -394,8 +394,11 @@ void pipe(Context& context, NormalParams)
bool insert_eol = str.back() != '\n';
if (insert_eol)
str += '\n';
- str = ShellManager::instance().eval(real_cmd, context, str,
- {}, EnvVarMap{}).first;
+ str = ShellManager::instance().eval(
+ real_cmd, context, str,
+ ShellManager::Flags::ReadOutput,
+ {}, EnvVarMap{}).first;
+
if ((insert_eol or sel.max() == buffer.back_coord()) and
str.back() == '\n')
str = str.substr(0, str.length()-1).str();
@@ -409,7 +412,8 @@ void pipe(Context& context, NormalParams)
for (auto& sel : selections)
ShellManager::instance().eval(real_cmd, context,
content(buffer, sel),
- {}, EnvVarMap{}).first;
+ ShellManager::Flags::None,
+ {}, EnvVarMap{});
}
});
}
@@ -436,8 +440,9 @@ void insert_output(Context& context, NormalParams)
if (real_cmd.empty())
return;
- auto str = ShellManager::instance().eval(real_cmd, context, {}, {},
- EnvVarMap{}).first;
+ auto str = ShellManager::instance().eval(real_cmd, context, {},
+ ShellManager::Flags::ReadOutput,
+ {}, EnvVarMap{}).first;
ScopedEdition edition(context);
context.selections().insert(str, mode);
});
@@ -788,6 +793,7 @@ void keep_pipe(Context& context, NormalParams)
for (auto& sel : context.selections())
{
if (shell_manager.eval(cmdline, context, content(buffer, sel),
+ ShellManager::Flags::None,
{}, EnvVarMap{}).second == 0)
keep.push_back(sel);
}