Управление курсором и очисткой
Список поддерживаемых CSI-кодов:
CSIH / CSIf - курсор в левый верхний угол
CSI#;#H - в строку;колонку (позиция курсора, левый верхний угол - 1;1)
CSI#;#f - то же самое (альтернативная форма)
CSI#A - вверх # строк
CSI#B - вниз # строк
CSI#C - вправо # колонок
CSI#D - влево # колонок
CSI#E - на начало строки, ниже на #
CSI#F - на начало строки, выше на #
CSI#G - в колонку #
CSI#H - в начало строки #
CSIs - сохранить позицию курсора
CSIu - восстановить позицию курсора
CSI6n - выводит текущее положение курсора в формате ^[[n;mR, где n — строка, m — столбец
Ответ попадает в буфер ввода. Пока непонятно, как его считать...
CSI?25l - скрыть курсор
CSI?25h - показать курсор
CSI#T - прокрутить экран вверх на #
Работает не совсем понятно...
CSI#S - прокрутить экран вниз на #
CSIJ - очистка экрана (по умолчанию от курсора до конца, аналог CSI0J)
CSI1J - очистка экрана от начала экрана до курсора
CSI2J - очистка всего экрана
Комбинация CSI2J+CSIH - аналог команды CLS
CSIK - очистка строки (по умолчанию от курсора до конца, аналог CSI0K)
CSI1K - от начала строки до курсора
CSI2K - очистка всей строки
CSI#L - вставить # пустых строк
CSI#M - удалить # строк
CSI#P - удалить (со смещением в строке) # символов в текущей строке
CSI#X - очистить (без смещения в строке) # символов в текущей строке
CSI#d - перемещает курсор вниз на # строк?
Демонстрационный пример:
@echo off
setlocal enabledelayedexpansion
cls
:: Получаем префикс CSI = ESC + [
for /f "delims=" %%a in ('echo prompt $E[^| cmd /q /d /k') do set "CSI=%%a"
:: CSIH / CSIf - курсор в левый верхний угол
echo Первая строка текста
echo %CSI%HВторая
pause
cls
:: CSI#;#H - в строку;колонку (позиция курсора, левый верхний угол - 1;1)
for /L %%i in (1,1,15) do (
echo %CSI%%%i;%%iH%%i
)
:: CSI#;#f - то же самое (альтернативная форма)
for /L %%i in (15,-1,1) do (
set /a y=30-%%i
echo %CSI%%%i;!y!f%%i
)
pause
cls
:: CSI#A - вверх # строк
:: CSI#B - вниз # строк
:: CSI#C - вправо # колонок
:: CSI#D - влево # колонок
:: CSI#E - на начало строки, ниже на #
:: CSI#F - на начало строки, выше на #
:: CSI#G - в колонку #
:: CSI#H - в начало строки #
echo %CSI%20C[1]%CSI%10B[2]%CSI%10D[3]%CSI%5A[4]%CSI%10E[5]%CSI%5F[6]%CSI%5G[7]%CSI%3H[8]
pause
cls
:: CSIs - сохранить позицию курсора
:: CSIu - восстановить позицию курсора
echo %CSI%10;8HHello, %CSI%s
echo %CSI%HGoodby...
echo %CSI%uWorld.
pause
cls
:: CSI6n - выводит текущее положение курсора в формате ^[[n;mR, где n — строка, m — столбец
:: Ответ попадает в буфер ввода. Пока непонятно, как его считать...
echo %CSI%15;15fOK%CSI%6n
set /p pos=Положение курсора:
echo %pos:~2,-1%
pause
cls
:: CSI?25l - скрыть курсор
set /p name=%CSI%?25lВведите свое имя:
:: CSI?25h - показать курсор
echo Привет, %name%%CSI%?25h
set /p age=Ваш возраст:
pause
cls
dir %windir%
pause
:: CSI#T - прокрутить экран вверх на #
:: Работает не совсем понятно...
echo %CSI%5T
pause
:: CSI#S - прокрутить экран вниз на #
echo %CSI%20S
pause
cls
dir %windir%
pause
:: CSIJ - очистка экрана (по умолчанию от курсора до конца, аналог CSI0J)
echo %CSI%10A%CSI%J
pause
cls
dir %windir%
:: CSI1J - очистка экрана от начала экрана до курсора
echo %CSI%10A%CSI%1J
pause
:: CSI2J - очистка всего экрана
echo %CSI%2J
dir %windir%
pause
:: CSI2J+CSIH - аналог команды CLS
echo %CSI%2J%CSI%HCLS
pause
:: CSIK - очистка строки (по умолчанию от курсора до конца, аналог CSI0K)
echo Пример длинной строки в которой мы удалим конец строки после ее вывода на экран%CSI%25D%CSI%K
pause
:: CSI1K - от начала строки до курсора
echo Пример длинной строки в которой мы удалим начало строки после ее вывода на экран%CSI%25D%CSI%1K
pause
:: CSI2K - очистка всей строки
echo Пример длинной строки, которую мы удалим целиком%CSI%2K
:: CSI#L - вставить # пустых строк
:: CSI#M - удалить # строк
:: CSI#P - удалить (со смещением в строке) # символов в текущей строке
:: CSI#X - очистить (без смещения в строке) # символов в текущей строке
:: CSI#d - перемещает курсор вниз на # строк?
pause