From 2c3544a2e8fc2215253728fea9c53b43e57d46bb Mon Sep 17 00:00:00 2001 From: havoc Date: Thu, 12 May 2005 17:53:29 +0000 Subject: [PATCH] changed changed commandline history behavior to be more sane git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@5272 d7cf8633-e32d-0410-b094-e92efae38249 --- keys.c | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/keys.c b/keys.c index d069adfa..ffaabf8e 100644 --- a/keys.c +++ b/keys.c @@ -28,15 +28,14 @@ key up events are sent even if in console mode */ #define MAX_INPUTLINE 256 +int edit_line = 31; +int history_line = 31; char key_lines[32][MAX_INPUTLINE]; int key_linepos; static int ctrl_down = false; static int key_lastpress; int key_insert = true; // insert key toggle (for editing) -int edit_line = 0; -int history_line = 0; - keydest_t key_dest; int key_consoleactive; @@ -312,8 +311,10 @@ Key_Console (int key, char ascii) Cbuf_AddText (key_lines[edit_line]+1); // skip the ] Cbuf_AddText ("\n"); Con_Printf("%s\n",key_lines[edit_line]); - edit_line = (edit_line + 1) & 31; + // LordHavoc: redesigned edit_line/history_line + edit_line = 31; history_line = edit_line; + memmove(key_lines[0], key_lines[1], sizeof(key_lines[0]) * edit_line); key_lines[edit_line][0] = ']'; key_lines[edit_line][1] = 0; // EvilTypeGuy: null terminate key_linepos = 1; @@ -384,30 +385,23 @@ Key_Console (int key, char ascii) if (key == K_UPARROW || key == K_KP_UPARROW || (key == 'p' && keydown[K_CTRL])) { - do + if (history_line > 0 && key_lines[history_line-1][1]) { - history_line = (history_line - 1) & 31; - } while (history_line != edit_line - && !key_lines[history_line][1]); - if (history_line == edit_line) - history_line = (edit_line+1)&31; - strcpy(key_lines[edit_line], key_lines[history_line]); - key_linepos = strlen(key_lines[edit_line]); + history_line--; + strcpy(key_lines[edit_line], key_lines[history_line]); + key_linepos = strlen(key_lines[edit_line]); + } return; } if (key == K_DOWNARROW || key == K_KP_DOWNARROW || (key == 'n' && keydown[K_CTRL])) { - if (history_line == edit_line) return; - do - { - history_line = (history_line + 1) & 31; - } - while (history_line != edit_line - && !key_lines[history_line][1]); - if (history_line == edit_line) + history_line++; + if (history_line >= edit_line) { + history_line = edit_line; key_lines[edit_line][0] = ']'; + key_lines[edit_line][1] = 0; key_linepos = 1; } else -- 2.39.2