int builtin_alias(Environment &env, const std::vector<std::string> &tokens, const fdmask &fds) { // alias -> lists all aliases // alias name -> list single alias // alias name parms... -> add a new alias. if (tokens.size() == 1) { for (const auto &p : env.aliases()) { fdprintf(stdout, "Alias %s %s\n", quote(p.first).c_str(), quote(p.second).c_str()); } return 0; } std::string name = tokens[1]; if (tokens.size() == 2) { const auto as = env.find_alias(name); if (as.empty()) { fdprintf(stderr, "### Alias - No alias exists for %s\n", quote(name).c_str()); return 1; } fdprintf(stdout, "Alias %s %s\n", quote(name).c_str(), quote(as).c_str()); return 0; } std::string as; for (const auto &s : make_offset_range(tokens, 2)) { as += s; as.push_back(' '); } as.pop_back(); // add/remove it to the alias table... if (as.empty()) { env.remove_alias(name); } else { env.add_alias(std::move(name), std::move(as)); } return 0; }