@@ -80,7 +80,7 @@ const Terminal = () => {
80
80
setInputVal ( "" ) ;
81
81
setRerender ( true ) ;
82
82
setHints ( [ ] ) ;
83
- setPointer ( 0 ) ;
83
+ setPointer ( - 1 ) ;
84
84
} ;
85
85
86
86
const clearHistory = ( ) => {
@@ -101,7 +101,7 @@ const Terminal = () => {
101
101
102
102
// Keyboard Press
103
103
const [ hints , setHints ] = useState < string [ ] > ( [ ] ) ;
104
- const [ pointer , setPointer ] = useState ( 0 ) ;
104
+ const [ pointer , setPointer ] = useState ( - 1 ) ;
105
105
const handleKeyDown = ( e : React . KeyboardEvent < HTMLInputElement > ) => {
106
106
setRerender ( false ) ;
107
107
const ctrlI = e . ctrlKey && e . key . toLowerCase ( ) === "i" ;
@@ -144,21 +144,28 @@ const Terminal = () => {
144
144
145
145
// Go previous cmd
146
146
if ( e . key === "ArrowUp" ) {
147
- if ( pointer < cmdHistory . length ) {
148
- setInputVal ( cmdHistory [ pointer ] ) ;
149
- pointer + 1 !== cmdHistory . length &&
150
- setPointer ( ( prevState ) => prevState + 1 ) ;
151
- pointer + 1 !== cmdHistory . length && inputRef ?. current ?. blur ( ) ;
152
- }
147
+ if ( pointer >= cmdHistory . length ) return ;
148
+
149
+ if ( pointer + 1 === cmdHistory . length ) return ;
150
+
151
+ setInputVal ( cmdHistory [ pointer + 1 ] ) ;
152
+ setPointer ( ( prevState ) => prevState + 1 ) ;
153
+ inputRef ?. current ?. blur ( ) ;
153
154
}
154
155
155
156
// Go next cmd
156
157
if ( e . key === "ArrowDown" ) {
157
- if ( pointer > 0 ) {
158
- setInputVal ( cmdHistory [ pointer - 1 ] ) ;
159
- pointer - 1 !== 0 && setPointer ( ( prevState ) => prevState - 1 ) ;
160
- pointer - 1 !== 0 && inputRef ?. current ?. blur ( ) ;
158
+ if ( pointer < 0 ) return ;
159
+
160
+ if ( pointer === 0 ) {
161
+ setInputVal ( "" ) ;
162
+ setPointer ( - 1 ) ;
163
+ return ;
161
164
}
165
+
166
+ setInputVal ( cmdHistory [ pointer - 1 ] ) ;
167
+ setPointer ( ( prevState ) => prevState - 1 ) ;
168
+ inputRef ?. current ?. blur ( ) ;
162
169
}
163
170
} ;
164
171
// For caret position at the end
0 commit comments