Много гуглил и обнаружил, что curs_set()
или putp(tigetstr() )
можно использовать, чтобы скрыть/показать курсор tty. Я хотел бы свести к минимуму зависимость от других библиотек, поэтому мне интересно, смогу ли я сделать это без использования libtinfo
/libncurses
или вызова внешних команд (например, setterm
, tput
). Есть ли какая-нибудь команда ioctl()
для этого?
Как получить/установить видимость курсора без использования libtinfo/libncurses?
- Связано: stackoverflow.com/q/2649733/2371524 - это функция терминала, и хотя есть некоторые стандарты терминальных escape-последовательностей, существует множество вариаций. Если вы хотите, чтобы ваша программа работала надежно, просто используйте библиотеку. 03.05.2018
- Возможный дубликат Скрыть курсор на удаленном терминале 03.05.2018
- @ThomasDickey - это тот же вопрос, что и Феликс Палмен, упомянутый в комментарии. я пытаюсь свести к минимуму зависимость от других библиотек. 03.05.2018
- printf(\033[?25l); // невидимый printf(\033[?25h); //видимый работает в моем терминале 03.05.2018
Ответы:
Есть в основном три подхода:
Если ваша программа выполняется только на консольном терминале (например, потому что машина не подключена к сети) или только на наиболее распространенных терминалах, вы можете использовать набор символов UTF-8 и экран-коды ANSI.
Это означает, что, чтобы скрыть курсор, вы печатаете
"\033[?25l"
в терминале и"\033[?25h"
, чтобы показать курсор.Для правильной поддержки терминала вы используете библиотеку terminfo.
Вы можете напрямую читать базу данных terminfo, но это было бы довольно бессмысленно, потому что, если она установлена, у вас также есть функции curses, используемые для доступа к ней (
tgetent()
/tgetnum()
/tgetflag()
).Затем вы также должны иметь свою программу с учетом локали и использовать, например.
iconv()
для преобразования между наборами символов вместо использования UTF- 8.Используйте curses или ncursew (с поддержкой широких символов).
';'
. Символы полезной нагрузки просто отображаются так, как, по мнению терминала, они должны выглядеть. (это может быть utf8 и/или какой-то кодировкой) 03.05.2018\033[?25l
. И показать:\033[?25h
. 13.11.2020