mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-26 10:43:47 +08:00
output: Allow "--background foo" and "-b foo" for background colors
This only accepted "--background=". Really what we need to do is do an actual getopt, but that wants a null-terminated array and is tightly coupled to set_color. Fixes #8053.
This commit is contained in:
parent
695027234b
commit
95103893e6
|
@ -353,6 +353,7 @@ rgb_color_t best_color(const std::vector<rgb_color_t> &candidates, color_support
|
||||||
|
|
||||||
/// Return the internal color code representing the specified color.
|
/// Return the internal color code representing the specified color.
|
||||||
/// TODO: This code should be refactored to enable sharing with builtin_set_color.
|
/// TODO: This code should be refactored to enable sharing with builtin_set_color.
|
||||||
|
/// In particular, the argument parsing still isn't fully capable.
|
||||||
rgb_color_t parse_color(const env_var_t &var, bool is_background) {
|
rgb_color_t parse_color(const env_var_t &var, bool is_background) {
|
||||||
bool is_bold = false;
|
bool is_bold = false;
|
||||||
bool is_underline = false;
|
bool is_underline = false;
|
||||||
|
@ -366,17 +367,28 @@ rgb_color_t parse_color(const env_var_t &var, bool is_background) {
|
||||||
// wcslen is not available as constexpr
|
// wcslen is not available as constexpr
|
||||||
size_t prefix_len = wcslen(prefix);
|
size_t prefix_len = wcslen(prefix);
|
||||||
|
|
||||||
|
bool next_is_background = false;
|
||||||
wcstring color_name;
|
wcstring color_name;
|
||||||
for (const wcstring &next : var.as_list()) {
|
for (const wcstring &next : var.as_list()) {
|
||||||
color_name.clear();
|
color_name.clear();
|
||||||
if (is_background) {
|
if (is_background) {
|
||||||
// Look for something like "--background=red".
|
if (color_name.empty() && next_is_background) {
|
||||||
if (string_prefixes_string(prefix, next)) {
|
color_name = next;
|
||||||
|
next_is_background = false;
|
||||||
|
} else if (string_prefixes_string(prefix, next)) {
|
||||||
|
// Look for something like "--background=red".
|
||||||
color_name = wcstring(next, prefix_len);
|
color_name = wcstring(next, prefix_len);
|
||||||
}
|
} else if (next == L"--background" || next == L"-b") {
|
||||||
// Reverse should be meaningful in either context
|
// Without argument attached the next token is the color
|
||||||
if (next == L"--reverse" || next == L"-r") {
|
// - if it's another option it's an error.
|
||||||
|
next_is_background = true;
|
||||||
|
} else if (next == L"--reverse" || next == L"-r") {
|
||||||
|
// Reverse should be meaningful in either context
|
||||||
is_reverse = true;
|
is_reverse = true;
|
||||||
|
} else if (string_prefixes_string(L"-b", next)) {
|
||||||
|
// Look for something like "-bred".
|
||||||
|
// Yes, that length is hardcoded.
|
||||||
|
color_name = wcstring(next, 2);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (next == L"--bold" || next == L"-o")
|
if (next == L"--bold" || next == L"-o")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user