fix a few input issues.

ctrl+tab completes the suggested text (ctrl+space still does).
escape works again to bring up the menu (oops)
partial command completion works again.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4317 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2013-04-13 13:41:02 +00:00
parent a70446c69b
commit 8b3541b9b4
1 changed files with 64 additions and 53 deletions

View File

@ -275,67 +275,78 @@ void CompleteCommand (qboolean force)
if (*s == '\\' || *s == '/')
s++;
cmd = Cmd_CompleteCommand (s, true, true, 2, NULL);
if (!cmd || force)
for (cmd = s; *cmd; cmd++)
{
if (!force)
cmd = Cmd_CompleteCommand (s, false, true, 1, &desc);
else
cmd = Cmd_CompleteCommand (s, true, true, con_commandmatch, &desc);
if (*cmd == ' ' || *cmd == '\t')
break;
}
if (*cmd)
cmd = s;
else
{
//check for singular matches and complete if found
cmd = Cmd_CompleteCommand (s, true, true, 2, NULL);
if (!cmd || force)
{
if (!force)
cmd = Cmd_CompleteCommand (s, false, true, 1, &desc);
else
cmd = Cmd_CompleteCommand (s, true, true, con_commandmatch, &desc);
if (cmd)
{
//complete to that (maybe partial) cmd.
Key_ClearTyping();
Key_ConsoleInsert("/");
Key_ConsoleInsert(cmd);
s = key_lines[edit_line]+2;
//if its the only match, add a space ready for arguments.
cmd = Cmd_CompleteCommand (s, true, true, 0, NULL);
if (cmd && !strcmp(s, cmd))
{
Key_ConsoleInsert(" ");
}
if (!con_commandmatch)
con_commandmatch = 1;
if (desc)
Con_Footerf(false, "%s: %s", cmd, desc);
else
Con_Footerf(false, "");
return;
}
}
//complete to a partial match.
cmd = Cmd_CompleteCommand (s, false, true, 0, &desc);
if (cmd)
{
//complete to that (maybe partial) cmd.
Key_ClearTyping();
Key_ConsoleInsert("/");
Key_ConsoleInsert(cmd);
s = key_lines[edit_line]+2;
int i = key_lines[edit_line][1] == '/'?2:1;
if (i != 2 || strcmp(key_lines[edit_line]+i, cmd))
{ //if successful, use that instead.
Key_ClearTyping();
Key_ConsoleInsert("/");
Key_ConsoleInsert(cmd);
//if its the only match, add a space ready for arguments.
cmd = Cmd_CompleteCommand (s, true, true, 0, NULL);
if (cmd && !strcmp(s, cmd))
{
Key_ConsoleInsert(" ");
s = key_lines[edit_line]+1; //readjust to cope with the insertion of a /
if (*s == '\\' || *s == '/')
s++;
}
if (!con_commandmatch)
con_commandmatch = 1;
if (desc)
Con_Footerf(false, "%s: %s", cmd, desc);
return;
}
}
/* cmd = Cmd_CompleteCommand (s, false, true, 0, &desc);
if (cmd)
{
int i = key_lines[edit_line][1] == '/'?2:1;
if (i != 2 || strcmp(key_lines[edit_line]+i, cmd))
{ //if changed, complete it
key_lines[edit_line][1] = '/';
Q_strcpy (key_lines[edit_line]+2, cmd);
key_linepos = Q_strlen(cmd)+2;
s = key_lines[edit_line]+1; //readjust to cope with the insertion of a /
if (*s == '\\' || *s == '/')
s++;
key_lines[edit_line][key_linepos] = 0;
if (!con_commandmatch)
con_commandmatch = 1;
if (desc)
Con_Footerf(false, "%s: %s", cmd, desc);
return; //don't alter con_commandmatch if we compleated a tiny bit more
}
}
*/
con_commandmatch++;
if (Cmd_CompleteCommand(s, true, true, con_commandmatch, &desc))
cmd = Cmd_CompleteCommand(s, true, true, con_commandmatch, &desc);
if (!cmd)
{
con_commandmatch = 1;
cmd = Cmd_CompleteCommand(s, true, true, con_commandmatch, &desc);
}
if (cmd)
{
if (desc)
Con_Footerf(false, "%s: %s", cmd, desc);
else
Con_Footerf(false, "");
}
else
{
@ -974,14 +985,14 @@ void Key_Console (unsigned int unicode, int key)
if (key == K_TAB)
{ // command completion
if (keydown[K_CTRL] || keydown[K_SHIFT])
if (keydown[K_SHIFT])
{
Con_CycleConsole();
return;
}
if (con_current->commandcompletion)
CompleteCommand (false);
CompleteCommand (keydown[K_CTRL]);
return;
}
if (key != K_CTRL && key != K_SHIFT && con_commandmatch)
@ -1939,7 +1950,7 @@ void Key_Event (int devid, int key, unsigned int unicode, qboolean down)
break;
}
case key_console:
if (cls.state)
if (cls.state && key_dest == key_console)
key_dest = key_game;
else
M_ToggleMenu_f ();