Refactor TerminalUI::set_ui_options
Take advantage of Optional monadic operations
This commit is contained in:
parent
428ddeb97b
commit
ac6420ee8d
|
@ -1377,64 +1377,37 @@ void TerminalUI::enable_mouse(bool enabled)
|
||||||
|
|
||||||
void TerminalUI::set_ui_options(const Options& options)
|
void TerminalUI::set_ui_options(const Options& options)
|
||||||
{
|
{
|
||||||
{
|
auto find = [&](StringView name) -> Optional<StringView> {
|
||||||
auto it = options.find("terminal_assistant"_sv);
|
if (auto it = options.find(name); it != options.end())
|
||||||
if (it == options.end() or it->value == "clippy")
|
return StringView{it->value};
|
||||||
m_assistant = assistant_clippy;
|
return {};
|
||||||
else if (it->value == "cat")
|
|
||||||
m_assistant = assistant_cat;
|
|
||||||
else if (it->value == "dilbert")
|
|
||||||
m_assistant = assistant_dilbert;
|
|
||||||
else if (it->value == "none" or it->value == "off")
|
|
||||||
m_assistant = ConstArrayView<StringView>{};
|
|
||||||
}
|
|
||||||
|
|
||||||
auto get_boolean_option = [&](StringView name, bool default_value) {
|
|
||||||
auto it = options.find(name);
|
|
||||||
return it == options.end() ? default_value
|
|
||||||
: (it->value == "yes" or it->value == "true");
|
|
||||||
};
|
};
|
||||||
|
|
||||||
m_status_on_top = get_boolean_option("terminal_status_on_top", false);
|
auto assistant = find("terminal_assistant").value_or("clippy");
|
||||||
m_set_title = get_boolean_option("terminal_set_title", true);
|
if (assistant == "clippy")
|
||||||
|
m_assistant = assistant_clippy;
|
||||||
|
else if (assistant == "cat")
|
||||||
|
m_assistant = assistant_cat;
|
||||||
|
else if (assistant == "dilbert")
|
||||||
|
m_assistant = assistant_dilbert;
|
||||||
|
else if (assistant == "none" or assistant == "off")
|
||||||
|
m_assistant = ConstArrayView<StringView>{};
|
||||||
|
|
||||||
{
|
auto to_bool = [](StringView s) { return s == "yes" or s == "true"; };
|
||||||
auto it = options.find("terminal_shift_function_key"_sv);
|
|
||||||
m_shift_function_key = it != options.end() ?
|
|
||||||
str_to_int_ifp(it->value).value_or(default_shift_function_key)
|
|
||||||
: default_shift_function_key;
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
m_status_on_top = find("terminal_status_on_top").map(to_bool).value_or(false);
|
||||||
enable_mouse(get_boolean_option("terminal_enable_mouse", true));
|
m_set_title = find("terminal_set_title").map(to_bool).value_or(true);
|
||||||
|
m_synchronized = find("terminal_synchronized").map(to_bool).value_or(false);
|
||||||
|
|
||||||
auto wheel_up_it = options.find("terminal_wheel_up_button"_sv);
|
m_shift_function_key = find("terminal_shift_function_key").map(str_to_int_ifp).value_or(default_shift_function_key);
|
||||||
m_wheel_up_button = wheel_up_it != options.end() ?
|
|
||||||
str_to_int_ifp(wheel_up_it->value).value_or(4) : 4;
|
|
||||||
|
|
||||||
auto wheel_down_it = options.find("terminal_wheel_down_button"_sv);
|
enable_mouse(find("terminal_enable_mouse").map(to_bool).value_or(true));
|
||||||
m_wheel_down_button = wheel_down_it != options.end() ?
|
m_wheel_up_button = find("terminal_wheel_up_button").map(str_to_int_ifp).value_or(4);
|
||||||
str_to_int_ifp(wheel_down_it->value).value_or(5) : 5;
|
m_wheel_down_button = find("terminal_wheel_down_button").map(str_to_int_ifp).value_or(5);
|
||||||
|
m_wheel_scroll_amount = find("terminal_wheel_scroll_amount").map(str_to_int_ifp).value_or(3);
|
||||||
|
|
||||||
auto wheel_scroll_amount_it = options.find("terminal_wheel_scroll_amount"_sv);
|
m_padding_char = find("terminal_padding_char").map([](StringView s) { return s.column_length() < 1 ? ' ' : s[0_char]; }).value_or(Codepoint{'~'});
|
||||||
m_wheel_scroll_amount = wheel_scroll_amount_it != options.end() ?
|
m_padding_fill = find("terminal_padding_fill").map(to_bool).value_or(false);
|
||||||
str_to_int_ifp(wheel_scroll_amount_it->value).value_or(3) : 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
auto it = options.find("terminal_padding_char"_sv);
|
|
||||||
if (it == options.end())
|
|
||||||
// Defaults to tilde.
|
|
||||||
m_padding_char = '~';
|
|
||||||
else if (it->value.column_length() < 1)
|
|
||||||
// Do not allow empty string, use space instead.
|
|
||||||
m_padding_char = ' ';
|
|
||||||
else
|
|
||||||
m_padding_char = it->value[0_char];
|
|
||||||
}
|
|
||||||
|
|
||||||
m_padding_fill = get_boolean_option("terminal_padding_fill", false);
|
|
||||||
m_synchronized = get_boolean_option("terminal_synchronized", false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user