changeset 18642:c033dd088270 draft

(svn r23489) -Change: don't wrap around the console history and give an empty line if you click the down-key enough
author yexo <yexo@openttd.org>
date Sun, 11 Dec 2011 11:37:03 +0000
parents 228730e55fb0
children 8bdbe20d6e07
files src/console_gui.cpp
diffstat 1 files changed, 9 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/src/console_gui.cpp
+++ b/src/console_gui.cpp
@@ -126,7 +126,7 @@
 /* ** 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 inline void IConsoleResetHistoryPos()
 {
-	_iconsole_historypos = ICON_HISTORY_SIZE - 1;
+	_iconsole_historypos = -1;
 }
 
 
@@ -353,7 +353,7 @@
 
 void IConsoleGUIInit()
 {
-	_iconsole_historypos = ICON_HISTORY_SIZE - 1;
+	IConsoleResetHistoryPos();
 	_iconsole_mode = ICONSOLE_CLOSED;
 
 	IConsoleLine::Reset();
@@ -454,25 +454,15 @@
 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) {
-		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);
 }