Как получить / установить видимость курсора без использования libtinfo / libncurses? - PullRequest
0 голосов
/ 03 мая 2018

Много гуглил и нашел curs_set() или putp(tigetstr() ) можно использовать, чтобы скрыть / показать tty курсор. Я хотел бы минимизировать зависимость от других библиотек, поэтому мне интересно, смогу ли я сделать это без использования libtinfo / libncurses или вызова внешних команд (например, setterm, tput). Для этого есть какая-нибудь команда ioctl()?

1 Ответ

0 голосов
/ 03 мая 2018

Существует три основных подхода:

  1. Если ваша программа выполняется только на консольном терминале (например, потому что аппарат не подключен к сети) или только на большинстве обычных терминалов, вы можете принять набор символов UTF-8 и ANSI escape-коды .

    Это означает, что, чтобы скрыть курсор, вы печатаете "\033[?25h" на терминале и "\033[?25l", чтобы показать курсор.

  2. Для правильной поддержки терминала вы используете библиотеку terminfo.

    Вы можете читать базу данных terminfo напрямую, но это было бы довольно бессмысленно, потому что, если она установлена, у вас также есть функции curses, используемые для доступа к ней (tgetent() / tgetnum() / tgetflag()).

    В таком случае вам также нужно, чтобы ваша программа была ориентирована на локали и использовать, например, iconv() для преобразования между наборами символов, вместо предположения UTF-8.

  3. Используйте curses или ncursesw (с поддержкой широких символов).

...