Make idle timeout and filesystem check timeout configurable
This commit is contained in:
parent
6faed96b68
commit
c152fbe3b6
|
@ -909,6 +909,11 @@ Some options are built in Kakoune, and can be used to control it's behaviour:
|
||||||
modification is detected.
|
modification is detected.
|
||||||
* `debug` _flags(hooks|shell|profile)_: dump various debug information in
|
* `debug` _flags(hooks|shell|profile)_: dump various debug information in
|
||||||
the `*debug*` buffer.
|
the `*debug*` buffer.
|
||||||
|
* `idle_timeout` _int_: timeout, in milliseconds, with no user input that will
|
||||||
|
trigger the `InsertIdle` and `NormalIdle` hooks.
|
||||||
|
* `fs_checkout_timeout` _int_: timeout, in milliseconds, between checks in
|
||||||
|
normal mode of modifications of the file associated with the current buffer
|
||||||
|
on the filesystem.
|
||||||
* `modelinefmt` _string_: A format string used to generate the mode line, that
|
* `modelinefmt` _string_: A format string used to generate the mode line, that
|
||||||
string is first expanded as a command line would be (expanding `%...{...}`
|
string is first expanded as a command line would be (expanding `%...{...}`
|
||||||
strings), then markup tags are applied (see <<Markup strings>>).
|
strings), then markup tags are applied (see <<Markup strings>>).
|
||||||
|
|
|
@ -138,6 +138,14 @@ Builtin options
|
||||||
*debug* 'flags(hooks|shell|profile)'::
|
*debug* 'flags(hooks|shell|profile)'::
|
||||||
dump various debug information in the '\*debug*' buffer
|
dump various debug information in the '\*debug*' buffer
|
||||||
|
|
||||||
|
*idle_timeout* 'int'::
|
||||||
|
timeout, in milliseconds, with no user input that will trigger the
|
||||||
|
*InsertIdle* and *NormalIdle* hooks.
|
||||||
|
|
||||||
|
*fs_checkout_timeout* 'int'::
|
||||||
|
timeout, in milliseconds, between checks in normal mode of modifications
|
||||||
|
of the file associated with the current buffer on the filesystem.
|
||||||
|
|
||||||
*modelinefmt* 'string'::
|
*modelinefmt* 'string'::
|
||||||
A format string used to generate the mode line, that string is first
|
A format string used to generate the mode line, that string is first
|
||||||
expanded as a command line would be (expanding '%...{...}' strings),
|
expanded as a command line would be (expanding '%...{...}' strings),
|
||||||
|
|
|
@ -56,8 +56,15 @@ private:
|
||||||
namespace InputModes
|
namespace InputModes
|
||||||
{
|
{
|
||||||
|
|
||||||
static constexpr std::chrono::milliseconds idle_timeout{50};
|
std::chrono::milliseconds get_idle_timeout(const Context& context)
|
||||||
static constexpr std::chrono::milliseconds fs_check_timeout{500};
|
{
|
||||||
|
return std::chrono::milliseconds{context.options()["idle_timeout"].get<int>()};
|
||||||
|
}
|
||||||
|
|
||||||
|
std::chrono::milliseconds get_fs_check_timeout(const Context& context)
|
||||||
|
{
|
||||||
|
return std::chrono::milliseconds{context.options()["fs_check_timeout"].get<int>()};
|
||||||
|
}
|
||||||
|
|
||||||
struct MouseHandler
|
struct MouseHandler
|
||||||
{
|
{
|
||||||
|
@ -140,7 +147,7 @@ public:
|
||||||
Timer::Callback() : Timer::Callback([this](Timer& timer) {
|
Timer::Callback() : Timer::Callback([this](Timer& timer) {
|
||||||
if (context().has_client())
|
if (context().has_client())
|
||||||
context().client().check_if_buffer_needs_reloading();
|
context().client().check_if_buffer_needs_reloading();
|
||||||
timer.set_next_date(Clock::now() + fs_check_timeout);
|
timer.set_next_date(Clock::now() + get_fs_check_timeout(context()));
|
||||||
})},
|
})},
|
||||||
m_single_command(single_command)
|
m_single_command(single_command)
|
||||||
{}
|
{}
|
||||||
|
@ -150,8 +157,8 @@ public:
|
||||||
if (context().has_client())
|
if (context().has_client())
|
||||||
context().client().check_if_buffer_needs_reloading();
|
context().client().check_if_buffer_needs_reloading();
|
||||||
|
|
||||||
m_fs_check_timer.set_next_date(Clock::now() + fs_check_timeout);
|
m_fs_check_timer.set_next_date(Clock::now() + get_fs_check_timeout(context()));
|
||||||
m_idle_timer.set_next_date(Clock::now() + idle_timeout);
|
m_idle_timer.set_next_date(Clock::now() + get_idle_timeout(context()));
|
||||||
|
|
||||||
context().hooks().run_hook("NormalBegin", "", context());
|
context().hooks().run_hook("NormalBegin", "", context());
|
||||||
}
|
}
|
||||||
|
@ -178,7 +185,7 @@ public:
|
||||||
auto cp = key.codepoint();
|
auto cp = key.codepoint();
|
||||||
|
|
||||||
if (m_mouse_handler.handle_key(key, context()))
|
if (m_mouse_handler.handle_key(key, context()))
|
||||||
m_idle_timer.set_next_date(Clock::now() + idle_timeout);
|
m_idle_timer.set_next_date(Clock::now() + get_idle_timeout(context()));
|
||||||
if (cp and isdigit(*cp))
|
if (cp and isdigit(*cp))
|
||||||
{
|
{
|
||||||
int new_val = m_params.count * 10 + *cp - '0';
|
int new_val = m_params.count * 10 + *cp - '0';
|
||||||
|
@ -241,7 +248,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
context().hooks().run_hook("NormalKey", key_to_str(key), context());
|
context().hooks().run_hook("NormalKey", key_to_str(key), context());
|
||||||
m_idle_timer.set_next_date(Clock::now() + idle_timeout);
|
m_idle_timer.set_next_date(Clock::now() + get_idle_timeout(context()));
|
||||||
}
|
}
|
||||||
|
|
||||||
DisplayLine mode_line() const override
|
DisplayLine mode_line() const override
|
||||||
|
@ -961,7 +968,7 @@ public:
|
||||||
|
|
||||||
void on_enabled() override
|
void on_enabled() override
|
||||||
{
|
{
|
||||||
m_idle_timer.set_next_date(Clock::now() + idle_timeout);
|
m_idle_timer.set_next_date(Clock::now() + get_idle_timeout(context()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_disabled() override
|
void on_disabled() override
|
||||||
|
@ -1099,7 +1106,7 @@ public:
|
||||||
{
|
{
|
||||||
insert(*cp);
|
insert(*cp);
|
||||||
context().hooks().run_hook("InsertKey", key_to_str(key), context());
|
context().hooks().run_hook("InsertKey", key_to_str(key), context());
|
||||||
m_idle_timer.set_next_date(Clock::now() + idle_timeout);
|
m_idle_timer.set_next_date(Clock::now() + get_idle_timeout(context()));
|
||||||
}
|
}
|
||||||
}, "raw insert", "enter key to insert");
|
}, "raw insert", "enter key to insert");
|
||||||
update_completions = false;
|
update_completions = false;
|
||||||
|
@ -1113,7 +1120,7 @@ public:
|
||||||
context().hooks().run_hook("InsertKey", key_to_str(key), context());
|
context().hooks().run_hook("InsertKey", key_to_str(key), context());
|
||||||
|
|
||||||
if (update_completions)
|
if (update_completions)
|
||||||
m_idle_timer.set_next_date(Clock::now() + idle_timeout);
|
m_idle_timer.set_next_date(Clock::now() + get_idle_timeout(context()));
|
||||||
if (moved)
|
if (moved)
|
||||||
context().hooks().run_hook("InsertMove", key_to_str(key), context());
|
context().hooks().run_hook("InsertMove", key_to_str(key), context());
|
||||||
}
|
}
|
||||||
|
|
11
src/main.cc
11
src/main.cc
|
@ -204,6 +204,12 @@ static void check_scrolloff(const CharCoord& so)
|
||||||
throw runtime_error{"scroll offset must be positive or zero"};
|
throw runtime_error{"scroll offset must be positive or zero"};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void check_timeout(const int& timeout)
|
||||||
|
{
|
||||||
|
if (timeout < 50)
|
||||||
|
throw runtime_error{"the minimum acceptable timeout is 50 milliseconds"};
|
||||||
|
}
|
||||||
|
|
||||||
void register_options()
|
void register_options()
|
||||||
{
|
{
|
||||||
OptionsRegistry& reg = GlobalScope::instance().option_registry();
|
OptionsRegistry& reg = GlobalScope::instance().option_registry();
|
||||||
|
@ -247,6 +253,11 @@ void register_options()
|
||||||
reg.declare_option("autoreload",
|
reg.declare_option("autoreload",
|
||||||
"autoreload buffer when a filesystem modification is detected",
|
"autoreload buffer when a filesystem modification is detected",
|
||||||
Autoreload::Ask);
|
Autoreload::Ask);
|
||||||
|
reg.declare_option<int, check_timeout>(
|
||||||
|
"idle_timeout", "timeout, in milliseconds, before idle hooks are triggered", 50);
|
||||||
|
reg.declare_option<int, check_timeout>(
|
||||||
|
"fs_check_timeout", "timeout, in milliseconds, between file system buffer modification checks",
|
||||||
|
500);
|
||||||
reg.declare_option("ui_options",
|
reg.declare_option("ui_options",
|
||||||
"colon separated list of <key>=<value> options that are "
|
"colon separated list of <key>=<value> options that are "
|
||||||
"passed to and interpreted by the user interface\n"
|
"passed to and interpreted by the user interface\n"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user