remove extra space on generate redirect-only commands

This commit is contained in:
zawz 2021-06-21 16:56:23 +02:00
parent 76779cd32d
commit 052b2b92cb

View file

@ -103,17 +103,21 @@ std::string list::generate(int ind, bool first_indent)
if(cls.size() <= 0) if(cls.size() <= 0)
return ""; return "";
std::string next;
for(uint32_t i=0; i<cls.size(); i++) for(uint32_t i=0; i<cls.size(); i++)
{ {
if(first_indent) if(first_indent)
{ {
ret += indented(cls[i]->generate(ind), ind); next = indented(cls[i]->generate(ind), ind);
} }
else else
{ {
first_indent=true; first_indent=true;
ret += cls[i]->generate(ind); next = cls[i]->generate(ind);
} }
if(ret[ret.size()-1] == '&' && next.size()>0 && is_in(next[0], "<>"))
ret += '\n';
ret += next;
} }
return ret; return ret;
} }
@ -345,9 +349,12 @@ std::string cmd::generate(int ind, generate_context* ctx)
return ret; return ret;
} }
bool has_args=false;
// pre-cmd var assigns // pre-cmd var assigns
for(auto it: var_assigns) for(auto it: var_assigns)
{ {
has_args=true;
if(it.first != nullptr) if(it.first != nullptr)
ret += it.first->generate(ind); ret += it.first->generate(ind);
if(it.second != nullptr) if(it.second != nullptr)
@ -358,6 +365,7 @@ std::string cmd::generate(int ind, generate_context* ctx)
// cmd itself // cmd itself
if(args!=nullptr && args->size()>0) if(args!=nullptr && args->size()>0)
{ {
has_args=true;
// command // command
ret += args->generate(ind); ret += args->generate(ind);
// delete potential trailing space // delete potential trailing space
@ -370,7 +378,10 @@ std::string cmd::generate(int ind, generate_context* ctx)
ret.pop_back(); ret.pop_back();
} }
ret += generate_redirs(ind, ret, ctx); std::string redirs = generate_redirs(ind, ret, ctx);
if(!has_args)
redirs.erase(redirs.begin());
ret += redirs;
return ret; return ret;
} }