# HG changeset patch # User Darkvater # Date 2005-05-16 13:46:26 # Node ID 25fd3dcd4baa786488c1844925ec0ab1509d7a72 # Parent ed08af632ba560955891ddbb80c4c1622dcd924d (svn r2332) - Feature: Add 'clear' command and CTRL+L to empty the console window - Fix: do not execute emtpy commands anymore diff --git a/console.c b/console.c --- a/console.c +++ b/console.c @@ -151,6 +151,9 @@ static void IConsoleWndProc(Window* w, W SetWindowDirty(w); } break; + case (WKC_CTRL | 'L'): + IConsoleCmdExec("clear"); + break; case WKC_BACKSPACE: case WKC_DELETE: if (DeleteTextBufferChar(&_iconsole_cmdline, e->keypress.keycode)) { IConsoleResetHistoryPos(); @@ -222,13 +225,19 @@ void IConsoleInit(void) IConsoleHistoryAdd(""); } -void IConsoleClear(void) +void IConsoleClearBuffer(void) { uint i; - for (i = 0; i <= ICON_BUFFER; i++) + for (i = 0; i <= ICON_BUFFER; i++) { free(_iconsole_buffer[i]); + _iconsole_buffer[i] = NULL; + } +} +static void IConsoleClear(void) +{ free(_iconsole_cmdline.buf); + IConsoleClearBuffer(); } static void IConsoleWriteToLogFile(const char* string) @@ -1022,6 +1031,8 @@ void IConsoleCmdExec(const char *cmdstr) bool longtoken = false; bool foundtoken = false; + if (*cmdstr == '\0') return; // don't execute empty commands + for (cmdptr = cmdstr; *cmdptr != '\0'; cmdptr++) { if (!IsValidAsciiChar(*cmdptr)) { IConsoleError("command contains malformed characters, aborting"); diff --git a/console.h b/console.h --- a/console.h +++ b/console.h @@ -114,8 +114,8 @@ VARDEF IConsoleModes _iconsole_mode; // ** console functions ** // void IConsoleInit(void); -void IConsoleClear(void); void IConsoleFree(void); +void IConsoleClearBuffer(void); void IConsoleResize(void); void IConsoleSwitch(void); void IConsoleClose(void); diff --git a/console_cmds.c b/console_cmds.c --- a/console_cmds.c +++ b/console_cmds.c @@ -268,7 +268,6 @@ DEF_CONSOLE_CMD(ConChangeDirectory) return true; } - DEF_CONSOLE_CMD(ConPrintWorkingDirectory) { const char *path; @@ -287,6 +286,18 @@ DEF_CONSOLE_CMD(ConPrintWorkingDirectory return true; } +DEF_CONSOLE_CMD(ConClearBuffer) +{ + if (argc == 0) { + IConsoleHelp("Clear the console buffer. Usage: 'clear'"); + return true; + } + + IConsoleClearBuffer(); + InvalidateWindow(WC_CONSOLE, 0); + return true; +} + // ********************************* // // * Network Core Console Commands * // @@ -1217,6 +1228,7 @@ void IConsoleStdLibRegister(void) IConsoleCmdRegister("ls", ConListFiles); IConsoleCmdRegister("cd", ConChangeDirectory); IConsoleCmdRegister("pwd", ConPrintWorkingDirectory); + IConsoleCmdRegister("clear", ConClearBuffer); IConsoleAliasRegister("dir", "ls"); IConsoleAliasRegister("newmap", "newgame");