From 0143f00d6fbe33f1de293c4149bf8ad05bac4d8a Mon Sep 17 00:00:00 2001 From: yexo Date: Sun, 11 Dec 2011 11:37:03 +0000 Subject: [PATCH] (svn r23489) -Change: don't wrap around the console history and give an empty line if you click the down-key enough --- src/console_gui.cpp | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/src/console_gui.cpp b/src/console_gui.cpp index eb9ddf8d0a..0840cb9f04 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -126,7 +126,7 @@ struct IConsoleLine { /* ** main console cmd buffer ** */ static Textbuf _iconsole_cmdline; static char *_iconsole_history[ICON_HISTORY_SIZE]; -static byte _iconsole_historypos; +static int _iconsole_historypos; IConsoleModes _iconsole_mode; /* *************** * @@ -145,7 +145,7 @@ static void IConsoleClearCommand() static inline void IConsoleResetHistoryPos() { - _iconsole_historypos = ICON_HISTORY_SIZE - 1; + _iconsole_historypos = -1; } @@ -353,7 +353,7 @@ int IConsoleWindow::scroll = 0; void IConsoleGUIInit() { - _iconsole_historypos = ICON_HISTORY_SIZE - 1; + IConsoleResetHistoryPos(); _iconsole_mode = ICONSOLE_CLOSED; IConsoleLine::Reset(); @@ -454,25 +454,15 @@ static const char *IConsoleHistoryAdd(const char *cmd) static void IConsoleHistoryNavigate(int direction) { if (_iconsole_history[0] == NULL) return; // Empty history - int i = _iconsole_historypos + direction; + _iconsole_historypos = Clamp(_iconsole_historypos + direction, -1, ICON_HISTORY_SIZE - 1); - /* watch out for overflows, just wrap around */ - if (i < 0) i = ICON_HISTORY_SIZE - 1; - if ((uint)i >= ICON_HISTORY_SIZE) i = 0; + if (direction > 0 && _iconsole_history[_iconsole_historypos] == NULL) _iconsole_historypos--; - if (direction > 0) { - if (_iconsole_history[i] == NULL) i = 0; + if (_iconsole_historypos == -1) { + *_iconsole_cmdline.buf = '\0'; + } else { + ttd_strlcpy(_iconsole_cmdline.buf, _iconsole_history[_iconsole_historypos], _iconsole_cmdline.max_bytes); } - - if (direction < 0) { - while (i > 0 && _iconsole_history[i] == NULL) i--; - } - - _iconsole_historypos = i; - IConsoleClearCommand(); - /* copy history to 'command prompt / bash' */ - assert(_iconsole_history[i] != NULL && IsInsideMM(i, 0, ICON_HISTORY_SIZE)); - ttd_strlcpy(_iconsole_cmdline.buf, _iconsole_history[i], _iconsole_cmdline.max_bytes); UpdateTextBufferSize(&_iconsole_cmdline); }