/// Print the names of all environment variables in the scope, with or without shortening, with or /// without values, with or without escaping static void print_variables(int include_values, int esc, bool shorten_ok, int scope, io_streams_t &streams) { wcstring_list_t names = env_get_names(scope); sort(names.begin(), names.end()); for (size_t i = 0; i < names.size(); i++) { const wcstring key = names.at(i); const wcstring e_key = escape_string(key, 0); streams.out.append(e_key); if (include_values) { env_var_t value = env_get_string(key, scope); if (!value.missing()) { int shorten = 0; if (shorten_ok && value.length() > 64) { shorten = 1; value.resize(60); } wcstring e_value = esc ? expand_escape_variable(value) : value; streams.out.append(L" "); streams.out.append(e_value); if (shorten) { streams.out.push_back(ellipsis_char); } } } streams.out.append(L"\n"); } }
/// Print the names of all environment variables in the scope. It will include the values unless the /// `set --list` flag was used. static int builtin_set_list(const wchar_t *cmd, set_cmd_opts_t &opts, int argc, wchar_t **argv, parser_t &parser, io_streams_t &streams) { UNUSED(cmd); UNUSED(argc); UNUSED(argv); UNUSED(parser); bool names_only = opts.list; wcstring_list_t names = parser.vars().get_names(compute_scope(opts)); sort(names.begin(), names.end()); for (size_t i = 0; i < names.size(); i++) { const wcstring key = names.at(i); const wcstring e_key = escape_string(key, 0); streams.out.append(e_key); if (!names_only) { auto var = parser.vars().get(key, compute_scope(opts)); if (!var.missing_or_empty()) { bool shorten = false; wcstring val = expand_escape_variable(*var); if (opts.shorten_ok && val.length() > 64) { shorten = true; val.resize(60); } streams.out.append(L" "); streams.out.append(val); if (shorten) streams.out.push_back(ellipsis_char); } } streams.out.append(L"\n"); } return STATUS_CMD_OK; }