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_AddText (cmd, va(vabuf, sizeof(vabuf), "%s %i\n", bind, key));
+ Cbuf_InsertText(cmd, va(vabuf, sizeof(vabuf), "%s %i\n", bind, key));
else
- {
- Cbuf_AddText (cmd, bind);
- Cbuf_AddText (cmd, "\n");
- }
- } else if(bind[0] == '+' && !down && keydown[key] == 0)
+ Cbuf_InsertText(cmd, bind);
+ }
+ else if(bind[0] == '+' && !down && keydown[key] == 0)
+ // 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 (down && con_closeontoggleconsole.integer && bind && !strncmp(bind, "toggleconsole", strlen("toggleconsole")) && ascii != STRING_COLOR_TAG)
{
- Cbuf_AddText(cmd, "toggleconsole\n"); // Deferred to next frame so we're not sending the text event to the console.
+ Cbuf_InsertText(cmd, "toggleconsole\n"); // Deferred to next frame so we're not sending the text event to the console.
tbl_keydest[key] = key_void; // key release should go nowhere (especially not to key_menu or key_game)
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_AddText (cmd, va(vabuf, sizeof(vabuf), "%s %i\n", bind, key));
+ Cbuf_InsertText(cmd, va(vabuf, sizeof(vabuf), "%s %i\n", bind, key));
else
- {
- Cbuf_AddText (cmd, bind);
- Cbuf_AddText (cmd, "\n");
- }
- } else if(bind[0] == '+' && !down && keydown[key] == 0)
+ Cbuf_InsertText(cmd, bind);
+ }
+ else if(bind[0] == '+' && !down && keydown[key] == 0)
+ // 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;