return key;
}
-static void
-Key_Console(cmd_state_t *cmd, int key, int unicode)
+static void Key_Console(cmd_state_t *cmd, int key, int unicode)
{
int linepos;
if ((key == K_ENTER || key == K_KP_ENTER) && KM_NONE)
{
- Cbuf_AddText (cmd, key_line+1); // skip the ]
- Cbuf_AddText (cmd, "\n");
+ // bones_was_here: prepending allows a loop such as `alias foo "bar; wait; foo"; foo`
+ // to be broken with an alias or unalias command
+ Cbuf_InsertText(cmd, key_line+1); // skip the ]
Key_History_Push();
key_linepos = Key_ClearEditLine(true);
// force an update, because the command may take some time
if(keydown[key] == 1 && down)
{
// button commands add keynum as a parm
+ // prepend to avoid delays from `wait` commands added by other sources
if (bind[0] == '+')
Cbuf_InsertText(cmd, va(vabuf, sizeof(vabuf), "%s %i\n", bind, key));
else
Cbuf_InsertText(cmd, bind);
}
else if(bind[0] == '+' && !down && keydown[key] == 0)
- Cbuf_InsertText(cmd, va(vabuf, sizeof(vabuf), "-%s %i\n", bind + 1, key));
+ // append -bind to ensure it's after the +bind in case they arrive in the same frame
+ Cbuf_AddText(cmd, va(vabuf, sizeof(vabuf), "-%s %i\n", bind + 1, key));
}
return;
}
if(keydown[key] == 1 && down)
{
// button commands add keynum as a parm
+ // prepend to avoid delays from `wait` commands added by other sources
if (bind[0] == '+')
Cbuf_InsertText(cmd, va(vabuf, sizeof(vabuf), "%s %i\n", bind, key));
else
Cbuf_InsertText(cmd, bind);
}
else if(bind[0] == '+' && !down && keydown[key] == 0)
- Cbuf_InsertText(cmd, va(vabuf, sizeof(vabuf), "-%s %i\n", bind + 1, key));
+ // append -bind to ensure it's after the +bind in case they arrive in the same frame
+ Cbuf_AddText(cmd, va(vabuf, sizeof(vabuf), "-%s %i\n", bind + 1, key));
}
break;
default: