NCursesUI: Add support for shifted function keys
Shifted function keys are not well standardized around terminals, Shift F(N) usually returns F(X) + N, with X=12 on xterm, X=10 on rxvt-unicode... Default to X=12 and make it configuable through the ncurses_shift_function_key ui_option. This fixes what #1898 tried to.
This commit is contained in:
parent
50e422659b
commit
5fa19f4d7f
|
@ -278,3 +278,7 @@ are exclusively available to built-in options.
|
|||
|
||||
*ncurses_wheel_down_button*, *ncurses_wheel_up_button*:::
|
||||
specify which button send for wheel down/up events
|
||||
|
||||
*ncurses_shift_function_key*:::
|
||||
Function key from which shifted function key start, if th
|
||||
terminal sends F13 for <s-F1>, this should be set to 12.
|
||||
|
|
|
@ -360,7 +360,8 @@ void register_options()
|
|||
" ncurses_enable_mouse bool\n"
|
||||
" ncurses_change_colors bool\n"
|
||||
" ncurses_wheel_up_button int\n"
|
||||
" ncurses_wheel_down_button int\n",
|
||||
" ncurses_wheel_down_button int\n"
|
||||
" ncurses_shift_function_key int\n",
|
||||
UserInterface::Options{});
|
||||
reg.declare_option("modelinefmt", "format string used to generate the modeline",
|
||||
"%val{bufname} %val{cursor_line}:%val{cursor_char_column} {{context_info}} {{mode_info}} - %val{client}@[%val{session}]"_str);
|
||||
|
|
|
@ -29,6 +29,8 @@ using std::max;
|
|||
|
||||
struct NCursesWin : WINDOW {};
|
||||
|
||||
constexpr int NCursesUI::default_shift_function_key;
|
||||
|
||||
static constexpr StringView assistant_cat[] =
|
||||
{ R"( ___ )",
|
||||
R"( (__ \ )",
|
||||
|
@ -615,8 +617,10 @@ Optional<Key> NCursesUI::get_next_key()
|
|||
|
||||
for (int i = 0; i < 12; ++i)
|
||||
{
|
||||
if (c == KEY_F(i+1))
|
||||
if (c == KEY_F(i + 1))
|
||||
return {Key::F1 + i};
|
||||
if (c == KEY_F(m_shift_function_key + i + 1))
|
||||
return shift(Key::F1 + i);
|
||||
}
|
||||
|
||||
if (c >= 0 and c < 256)
|
||||
|
@ -1082,6 +1086,13 @@ void NCursesUI::set_ui_options(const Options& options)
|
|||
(it->value == "yes" or it->value == "true");
|
||||
}
|
||||
|
||||
{
|
||||
auto it = options.find("ncurses_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;
|
||||
}
|
||||
|
||||
{
|
||||
auto it = options.find("ncurses_change_colors"_sv);
|
||||
auto value = it == options.end() or
|
||||
|
|
|
@ -140,6 +140,9 @@ private:
|
|||
int m_wheel_up_button = 4;
|
||||
int m_wheel_down_button = 5;
|
||||
|
||||
static constexpr int default_shift_function_key = 12;
|
||||
int m_shift_function_key = default_shift_function_key;
|
||||
|
||||
bool m_set_title = true;
|
||||
bool m_change_colors = true;
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user