1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-09-22 19:45:54 -04: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:
Simon Effenberg 2015-01-12 11:32:32 +01:00
parent c7ff3255b8
commit 34148e2101
6 changed files with 62 additions and 14 deletions

View File

@ -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",

View File

@ -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;
}

View File

@ -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;

View File

@ -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 {

View File

@ -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

View File

@ -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;