diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2015-06-08 13:34:08 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2015-06-08 13:45:20 +0100 |
| commit | 942fc224af403de0a73511a4e6a5dfe4bfa53b91 (patch) | |
| tree | 43b9482e2e150c6513f4f230bed667e97fd04a91 /src/normal.cc | |
| parent | 7acf3da3ca6b012d603e4cf7360abb4a3235daca (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.cc | 16 |
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); } |
