259,10 → 259,10 |
continue; |
|
if (wstr_remove(current, position - 1)) { |
position--; |
putchar('\b'); |
printf("%ls", current + position); |
position--; |
print_cc('\b', wstr_length(current) - position); |
print_cc('\b', wstr_length(current) - position + 1); |
continue; |
} |
} |
333,52 → 333,31 |
continue; |
} |
|
if (ch == 0x1b) { |
/* Special command */ |
wchar_t mod = _getc(indev); |
wchar_t ch = _getc(indev); |
|
if ((mod != 0x5b) && (mod != 0x4f)) |
continue; |
|
if ((ch == 0x33) && (_getc(indev) == 0x7e)) { |
/* Delete */ |
if (position == wstr_length(current)) |
continue; |
|
if (wstr_remove(current, position)) { |
putchar('\b'); |
printf("%ls", current + position); |
position--; |
print_cc('\b', wstr_length(current) - position); |
} |
} else if (ch == 0x48) { |
/* Home */ |
print_cc('\b', position); |
position = 0; |
} else if (ch == 0x46) { |
/* End */ |
printf("%ls", current + position); |
position = wstr_length(current); |
} else if (ch == 0x44) { |
if (ch == U_LEFT_ARROW) { |
/* Left */ |
if (position > 0) { |
putchar('\b'); |
position--; |
} |
} else if (ch == 0x43) { |
continue; |
} |
|
if (ch == U_RIGHT_ARROW) { |
/* Right */ |
if (position < wstr_length(current)) { |
putchar(current[position]); |
position++; |
} |
} else if ((ch == 0x41) || (ch == 0x42)) { |
continue; |
} |
|
if ((ch == U_UP_ARROW) || (ch == U_DOWN_ARROW)) { |
/* Up, down */ |
print_cc('\b', position); |
print_cc(' ', wstr_length(current)); |
print_cc('\b', wstr_length(current)); |
|
if (ch == 0x41) { |
if (ch == U_UP_ARROW) { |
/* Up */ |
if (history_pos == 0) |
history_pos = KCONSOLE_HISTORY - 1; |
392,10 → 371,35 |
current = history[history_pos]; |
printf("%ls", current); |
position = wstr_length(current); |
continue; |
} |
|
if (ch == U_HOME_ARROW) { |
/* Home */ |
print_cc('\b', position); |
position = 0; |
continue; |
} |
|
if (ch == U_END_ARROW) { |
/* End */ |
printf("%ls", current + position); |
position = wstr_length(current); |
continue; |
} |
|
if (ch == U_DELETE) { |
/* Delete */ |
if (position == wstr_length(current)) |
continue; |
|
if (wstr_remove(current, position)) { |
printf("%ls ", current + position); |
print_cc('\b', wstr_length(current) - position + 1); |
} |
continue; |
} |
|
if (wstr_linsert(current, ch, position, MAX_CMDLINE)) { |
printf("%ls", current + position); |
position++; |