summaryrefslogtreecommitdiff
path: root/src/command_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2016-06-19 17:01:56 +0100
committerMaxime Coste <frrrwww@gmail.com>2016-06-19 17:01:56 +0100
commit471c75d7388c5b1bb0f59c7f257d6888e88c88bf (patch)
tree39ba51d29cadc92d5a1b9c4e2b4600c4a21116ed /src/command_manager.cc
parentb8908f2dc6113fb38571a98be777128a0a2abe79 (diff)
Trim trailing end of lines in %sh outputs
Fixes #698
Diffstat (limited to 'src/command_manager.cc')
-rw-r--r--src/command_manager.cc20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/command_manager.cc b/src/command_manager.cc
index dafdc11d..7419e0bc 100644
--- a/src/command_manager.cc
+++ b/src/command_manager.cc
@@ -7,6 +7,7 @@
#include "shell_manager.hh"
#include "utils.hh"
#include "optional.hh"
+#include "containers.hh"
#include <algorithm>
@@ -250,9 +251,22 @@ String expand_token(const Token& token, const Context& context,
switch (token.type())
{
case Token::Type::ShellExpand:
- return ShellManager::instance().eval(content, context, {},
- ShellManager::Flags::WaitForStdout,
- shell_context).first;
+ {
+ auto str = ShellManager::instance().eval(
+ content, context, {}, ShellManager::Flags::WaitForStdout,
+ shell_context).first;
+
+ int trailing_eol_count = 0;
+ for (auto c : str | reverse())
+ {
+ if (c != '\n')
+ break;
+ ++trailing_eol_count;
+ }
+ str.resize(str.length() - trailing_eol_count, 0);
+ return str;
+
+ }
case Token::Type::RegisterExpand:
return context.main_sel_register_value(content).str();
case Token::Type::OptionExpand: