diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/console_gui.cpp | 28 |
1 files changed, 9 insertions, 19 deletions
diff --git a/src/console_gui.cpp b/src/console_gui.cpp index eb9ddf8d0..0840cb9f0 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; - - /* watch out for overflows, just wrap around */ - if (i < 0) i = ICON_HISTORY_SIZE - 1; - if ((uint)i >= ICON_HISTORY_SIZE) i = 0; + _iconsole_historypos = Clamp(_iconsole_historypos + direction, -1, ICON_HISTORY_SIZE - 1); - if (direction > 0) { - if (_iconsole_history[i] == NULL) i = 0; - } + if (direction > 0 && _iconsole_history[_iconsole_historypos] == NULL) _iconsole_historypos--; - if (direction < 0) { - while (i > 0 && _iconsole_history[i] == NULL) i--; + if (_iconsole_historypos == -1) { + *_iconsole_cmdline.buf = '\0'; + } else { + ttd_strlcpy(_iconsole_cmdline.buf, _iconsole_history[_iconsole_historypos], _iconsole_cmdline.max_bytes); } - - _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); } |