mirror of
https://github.com/profanity-im/profanity.git
synced 2025-02-02 15:08:15 -05:00
adding preference option for dynamic input blocking
/inpblock is now having subcommands 'timeout' and 'dynamic' with: /inpblock timeout <milliseconds> and /inpblock dynamic <on|off> Defaults are: /inpblock timeout 500 /inpblock dynamic on To get the old behavior specify: /inpblock timeout 20 /inpblock dynamic off The dynamic mode will block incrementally after something should be written to the window or after a key was pressed. So pressing a key would set the timeout to 0ms and after 10 timeouts to the next bigger one. Example (with dynamic mode on): "/inpblock timeout 50" timeout series: 10x 0ms 10x 10ms (0ms + 10 times since last keypress) 10x 30ms (10ms + 20 times since last keypress) *x50ms until next key was pressed or
This commit is contained in:
parent
c7ff3255b8
commit
34148e2101
@ -623,14 +623,20 @@ static struct cmd_t command_defs[] =
|
||||
NULL } } },
|
||||
|
||||
{ "/inpblock",
|
||||
cmd_inpblock, parse_args, 1, 1, &cons_inpblock_setting,
|
||||
{ "/inpblock millis", "Input blocking delay.",
|
||||
{ "/inpblock millis",
|
||||
cmd_inpblock, parse_args, 2, 2, &cons_inpblock_setting,
|
||||
{ "/inpblock [timeout|dynamic] [millis|on|off]", "Input blocking delay (dynamic or static).",
|
||||
{ "/inpblock [timeout|dynamic] [millis|on|off]",
|
||||
"----------------",
|
||||
"Time to wait in milliseconds before reading input from the terminal buffer, defaults to 20.",
|
||||
"Valid values are 1-1000.",
|
||||
"A higher value will result in less CPU usage, but a noticable delay for response to input.",
|
||||
"A lower value will result in higher CPU usage, but faster response to input.",
|
||||
"Setting for how long to wait for input before checking for new messages or checking for state",
|
||||
"changes like 'idle'.",
|
||||
"timeout : Time to wait in milliseconds before reading input from the terminal buffer, defaults to 500.",
|
||||
" : Valid values are 1-1000.",
|
||||
"dynamic : Either use the timeout statically or use a dynamic variant which is responsive after an input",
|
||||
" : and blocks longer (up to the specified 'timeout').",
|
||||
" : on|off",
|
||||
"A higher value will result in less CPU usage (irrespective if dynamic is on or off), but a noticable",
|
||||
"delay for response to input if dynamic is off.",
|
||||
"A lower value will result in higher CPU usage, but faster response to input if dynamic is off.",
|
||||
NULL } } },
|
||||
|
||||
{ "/notify",
|
||||
|
@ -3450,13 +3450,40 @@ cmd_notify(gchar **args, struct cmd_help_t help)
|
||||
gboolean
|
||||
cmd_inpblock(gchar **args, struct cmd_help_t help)
|
||||
{
|
||||
char *value = args[0];
|
||||
char *subcmd = args[0];
|
||||
char *value = args[1];
|
||||
int intval;
|
||||
if (_strtoi(value, &intval, 1, 1000) == 0) {
|
||||
cons_show("Input blocking set to %d milliseconds.", intval);
|
||||
prefs_set_inpblock(intval);
|
||||
ui_input_nonblocking(FALSE);
|
||||
if (strcmp(subcmd, "timeout") == 0) {
|
||||
if (value == NULL) {
|
||||
cons_show("Usage: %s", help.usage);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (_strtoi(value, &intval, 1, 1000) == 0) {
|
||||
cons_show("Input blocking set to %d milliseconds.", intval);
|
||||
prefs_set_inpblock(intval);
|
||||
ui_input_nonblocking(FALSE);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (strcmp(subcmd, "dynamic") == 0) {
|
||||
if (value == NULL) {
|
||||
cons_show("Usage: %s", help.usage);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (strcmp(value, "on") != 0 && strcmp(value, "off") != 0) {
|
||||
cons_show("Dynamic must be one of 'on' or 'off'");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return _cmd_set_boolean_preference(value, help, "Dynamic input blocking", PREF_INPBLOCK_DYNAMIC);
|
||||
}
|
||||
|
||||
cons_show("Usage: %s", help.usage);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -531,6 +531,7 @@ _get_group(preference_t pref)
|
||||
case PREF_ROSTER_BY:
|
||||
case PREF_RESOURCE_TITLE:
|
||||
case PREF_RESOURCE_MESSAGE:
|
||||
case PREF_INPBLOCK_DYNAMIC:
|
||||
return PREF_GROUP_UI;
|
||||
case PREF_STATES:
|
||||
case PREF_OUTTYPE:
|
||||
@ -672,6 +673,8 @@ _get_key(preference_t pref)
|
||||
return "resource.title";
|
||||
case PREF_RESOURCE_MESSAGE:
|
||||
return "resource.message";
|
||||
case PREF_INPBLOCK_DYNAMIC:
|
||||
return "inpblock.dynamic";
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
@ -696,6 +699,7 @@ _get_default_boolean(preference_t pref)
|
||||
case PREF_MUC_PRIVILEGES:
|
||||
case PREF_PRESENCE:
|
||||
case PREF_WRAP:
|
||||
case PREF_INPBLOCK_DYNAMIC:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
|
@ -100,7 +100,8 @@ typedef enum {
|
||||
PREF_OTR_WARN,
|
||||
PREF_OTR_POLICY,
|
||||
PREF_RESOURCE_TITLE,
|
||||
PREF_RESOURCE_MESSAGE
|
||||
PREF_RESOURCE_MESSAGE,
|
||||
PREF_INPBLOCK_DYNAMIC
|
||||
} preference_t;
|
||||
|
||||
typedef struct prof_alias_t {
|
||||
|
@ -1182,7 +1182,12 @@ cons_show_chat_prefs(void)
|
||||
void
|
||||
cons_inpblock_setting(void)
|
||||
{
|
||||
cons_show("Input block (/inpblock) : %d milliseconds", prefs_get_inpblock());
|
||||
cons_show("Input timeout (/inpblock) : %d milliseconds", prefs_get_inpblock());
|
||||
if (prefs_get_boolean(PREF_INPBLOCK_DYNAMIC)) {
|
||||
cons_show("Input dynamic (/inpblock) : ON");
|
||||
} else {
|
||||
cons_show("Input dynamic (/inpblock) : OFF");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -206,6 +206,11 @@ ui_input_nonblocking(gboolean reset)
|
||||
static gint timeout = 0;
|
||||
static gint no_input_count = 0;
|
||||
|
||||
if (! prefs_get_boolean(PREF_INPBLOCK_DYNAMIC)) {
|
||||
inp_non_block(prefs_get_inpblock());
|
||||
return;
|
||||
}
|
||||
|
||||
if (reset) {
|
||||
timeout = 0;
|
||||
no_input_count = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user