mirror of
https://git.code.sf.net/p/quake/quakeforge-old
synced 2025-02-15 08:21:41 +00:00
A temporary fix to console keys' behavior. Backspace, leftarrow and rightarrow work now.
This commit is contained in:
parent
fb35a3f7c0
commit
931e8f2f47
1 changed files with 36 additions and 4 deletions
|
@ -246,9 +246,9 @@ Interactive line editing and console scrollback
|
||||||
*/
|
*/
|
||||||
void Key_Console (int key)
|
void Key_Console (int key)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
char *cmd, *s;
|
char *cmd, *s;
|
||||||
int i;
|
|
||||||
HANDLE th;
|
HANDLE th;
|
||||||
char *clipText, *textCopied;
|
char *clipText, *textCopied;
|
||||||
#endif
|
#endif
|
||||||
|
@ -272,6 +272,7 @@ void Key_Console (int key)
|
||||||
edit_line = (edit_line + 1) & 31;
|
edit_line = (edit_line + 1) & 31;
|
||||||
history_line = edit_line;
|
history_line = edit_line;
|
||||||
key_lines[edit_line][0] = ']';
|
key_lines[edit_line][0] = ']';
|
||||||
|
key_lines[edit_line][1] = 0;
|
||||||
key_linepos = 1;
|
key_linepos = 1;
|
||||||
if (cls.state == ca_disconnected)
|
if (cls.state == ca_disconnected)
|
||||||
SCR_UpdateScreen (); // force an update, because the command
|
SCR_UpdateScreen (); // force an update, because the command
|
||||||
|
@ -285,12 +286,36 @@ void Key_Console (int key)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case K_BACKSPACE:
|
case K_BACKSPACE:
|
||||||
|
if (key_linepos > 1)
|
||||||
|
{
|
||||||
|
strcpy(key_lines[edit_line] + key_linepos - 1, key_lines[edit_line] + key_linepos);
|
||||||
|
key_linepos--;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KP_RIGHTARROW:
|
||||||
|
case K_RIGHTARROW:
|
||||||
|
if (strlen(key_lines[edit_line]) == key_linepos)
|
||||||
|
{
|
||||||
|
if (strlen(key_lines[(edit_line + 31) & 31]) <= key_linepos)
|
||||||
|
return; // no character to get
|
||||||
|
key_lines[edit_line][key_linepos] = key_lines[(edit_line + 31) & 31][key_linepos];
|
||||||
|
key_linepos++;
|
||||||
|
key_lines[edit_line][key_linepos] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
key_linepos++;
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
|
||||||
case KP_LEFTARROW:
|
case KP_LEFTARROW:
|
||||||
case K_LEFTARROW:
|
case K_LEFTARROW:
|
||||||
if (key_linepos > 1)
|
if (key_linepos > 1)
|
||||||
key_linepos--;
|
key_linepos--;
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KP_UPARROW:
|
case KP_UPARROW:
|
||||||
case K_UPARROW:
|
case K_UPARROW:
|
||||||
do {
|
do {
|
||||||
|
@ -382,8 +407,15 @@ void Key_Console (int key)
|
||||||
|
|
||||||
if (key_linepos < MAXCMDLINE-1)
|
if (key_linepos < MAXCMDLINE-1)
|
||||||
{
|
{
|
||||||
|
// Tonik -->
|
||||||
|
i = strlen(key_lines[edit_line]) - 1;
|
||||||
|
if (i == MAXCMDLINE-2) i--;
|
||||||
|
for (; i >= key_linepos; i--)
|
||||||
|
key_lines[edit_line][i + 1] = key_lines[edit_line][i];
|
||||||
|
// <-- Tonik
|
||||||
key_lines[edit_line][key_linepos] = key;
|
key_lines[edit_line][key_linepos] = key;
|
||||||
key_linepos++;
|
key_linepos++;
|
||||||
|
if (!i) // FIXME
|
||||||
key_lines[edit_line][key_linepos] = 0;
|
key_lines[edit_line][key_linepos] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue