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:
@@ -623,14 +623,20 @@ static struct cmd_t command_defs[] =
|
|||||||
NULL } } },
|
NULL } } },
|
||||||
|
|
||||||
{ "/inpblock",
|
{ "/inpblock",
|
||||||
cmd_inpblock, parse_args, 1, 1, &cons_inpblock_setting,
|
cmd_inpblock, parse_args, 2, 2, &cons_inpblock_setting,
|
||||||
{ "/inpblock millis", "Input blocking delay.",
|
{ "/inpblock [timeout|dynamic] [millis|on|off]", "Input blocking delay (dynamic or static).",
|
||||||
{ "/inpblock millis",
|
{ "/inpblock [timeout|dynamic] [millis|on|off]",
|
||||||
"----------------",
|
"----------------",
|
||||||
"Time to wait in milliseconds before reading input from the terminal buffer, defaults to 20.",
|
"Setting for how long to wait for input before checking for new messages or checking for state",
|
||||||
"Valid values are 1-1000.",
|
"changes like 'idle'.",
|
||||||
"A higher value will result in less CPU usage, but a noticable delay for response to input.",
|
"timeout : Time to wait in milliseconds before reading input from the terminal buffer, defaults to 500.",
|
||||||
"A lower value will result in higher CPU usage, but faster response to input.",
|
" : 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 } } },
|
NULL } } },
|
||||||
|
|
||||||
{ "/notify",
|
{ "/notify",
|
||||||
|
|||||||
@@ -3450,13 +3450,40 @@ cmd_notify(gchar **args, struct cmd_help_t help)
|
|||||||
gboolean
|
gboolean
|
||||||
cmd_inpblock(gchar **args, struct cmd_help_t help)
|
cmd_inpblock(gchar **args, struct cmd_help_t help)
|
||||||
{
|
{
|
||||||
char *value = args[0];
|
char *subcmd = args[0];
|
||||||
|
char *value = args[1];
|
||||||
int intval;
|
int intval;
|
||||||
if (_strtoi(value, &intval, 1, 1000) == 0) {
|
if (strcmp(subcmd, "timeout") == 0) {
|
||||||
cons_show("Input blocking set to %d milliseconds.", intval);
|
if (value == NULL) {
|
||||||
prefs_set_inpblock(intval);
|
cons_show("Usage: %s", help.usage);
|
||||||
ui_input_nonblocking(FALSE);
|
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;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -531,6 +531,7 @@ _get_group(preference_t pref)
|
|||||||
case PREF_ROSTER_BY:
|
case PREF_ROSTER_BY:
|
||||||
case PREF_RESOURCE_TITLE:
|
case PREF_RESOURCE_TITLE:
|
||||||
case PREF_RESOURCE_MESSAGE:
|
case PREF_RESOURCE_MESSAGE:
|
||||||
|
case PREF_INPBLOCK_DYNAMIC:
|
||||||
return PREF_GROUP_UI;
|
return PREF_GROUP_UI;
|
||||||
case PREF_STATES:
|
case PREF_STATES:
|
||||||
case PREF_OUTTYPE:
|
case PREF_OUTTYPE:
|
||||||
@@ -672,6 +673,8 @@ _get_key(preference_t pref)
|
|||||||
return "resource.title";
|
return "resource.title";
|
||||||
case PREF_RESOURCE_MESSAGE:
|
case PREF_RESOURCE_MESSAGE:
|
||||||
return "resource.message";
|
return "resource.message";
|
||||||
|
case PREF_INPBLOCK_DYNAMIC:
|
||||||
|
return "inpblock.dynamic";
|
||||||
default:
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -696,6 +699,7 @@ _get_default_boolean(preference_t pref)
|
|||||||
case PREF_MUC_PRIVILEGES:
|
case PREF_MUC_PRIVILEGES:
|
||||||
case PREF_PRESENCE:
|
case PREF_PRESENCE:
|
||||||
case PREF_WRAP:
|
case PREF_WRAP:
|
||||||
|
case PREF_INPBLOCK_DYNAMIC:
|
||||||
return TRUE;
|
return TRUE;
|
||||||
default:
|
default:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|||||||
@@ -100,7 +100,8 @@ typedef enum {
|
|||||||
PREF_OTR_WARN,
|
PREF_OTR_WARN,
|
||||||
PREF_OTR_POLICY,
|
PREF_OTR_POLICY,
|
||||||
PREF_RESOURCE_TITLE,
|
PREF_RESOURCE_TITLE,
|
||||||
PREF_RESOURCE_MESSAGE
|
PREF_RESOURCE_MESSAGE,
|
||||||
|
PREF_INPBLOCK_DYNAMIC
|
||||||
} preference_t;
|
} preference_t;
|
||||||
|
|
||||||
typedef struct prof_alias_t {
|
typedef struct prof_alias_t {
|
||||||
|
|||||||
@@ -1182,7 +1182,12 @@ cons_show_chat_prefs(void)
|
|||||||
void
|
void
|
||||||
cons_inpblock_setting(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
|
void
|
||||||
|
|||||||
@@ -206,6 +206,11 @@ ui_input_nonblocking(gboolean reset)
|
|||||||
static gint timeout = 0;
|
static gint timeout = 0;
|
||||||
static gint no_input_count = 0;
|
static gint no_input_count = 0;
|
||||||
|
|
||||||
|
if (! prefs_get_boolean(PREF_INPBLOCK_DYNAMIC)) {
|
||||||
|
inp_non_block(prefs_get_inpblock());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (reset) {
|
if (reset) {
|
||||||
timeout = 0;
|
timeout = 0;
|
||||||
no_input_count = 0;
|
no_input_count = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user