Nano Hash - криптовалюты, майнинг, программирование

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

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

03.05.2018

  • Связано: 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

Ответы:


1

Есть в основном три подхода:

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

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

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

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

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

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

03.05.2018
  • упомянув UTF8, вы имеете в виду, что escape-последовательность ANSI может не работать для других локалей? 03.05.2018
  • @pynexj: нет, они в основном не связаны. Поток символов на терминал состоит из двух компонентов: элементов для управления терминалом (таких как изменение/перемещение курсора) и фактически отображаемых символов полезной нагрузки. Управляющие последовательности в основном начинаются с ESC и часто заканчиваются на ';'. Символы полезной нагрузки просто отображаются так, как, по мнению терминала, они должны выглядеть. (это может быть utf8 и/или какой-то кодировкой) 03.05.2018
  • @pynexj: escape-последовательности всегда одинаковы, независимо от используемой локали или набора символов. Просто если вас волнует, какой терминал использует пользователь, вы также должны учитывать, что они могут использовать другую локаль и, возможно, набор символов, отличный от UTF-8, для видимого содержимого. В противном случае это похоже на покраску поверхности без предварительной ее очистки: общие результаты, как правило, неудовлетворительны. 03.05.2018
  • Эскейп-коды перевернуты. Для скрытия курсора должно быть: \033[?25l. И показать: \033[?25h. 13.11.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..