Меню

Как установить библиотеку ncurses

Введение в ncurses на C++

В универе задали лабораторную: реализовать элемент интерфейса “всплывающее окно с сообщением” под DOS на C++, используя ООП подход. Ну спасибо тебе за актуальность, дорогой универ, нынче DOS и Turbo Vision наше всё, такой ценный опыт… К счастью, преподаватель отнёсся с пониманием и разрешил использовать современную кроссплатформенную библиотеку ncurses для рисования псевдографики, о ней я сегодня и расскажу.

Что такое ncurses и где оно обитает

Ncurses (произносится “энкёрсиз”) – это библиотека, которая существенно упрощает создание интерфейсов на псевдографике и позволяет при разработке вообще не думать о том, например, какую экранирующую последовательность символов нужно послать терминалу для того, чтобы текст выводился ^[[ 0 ; 31 ; 40 mКРАСНЫМ цветом. Мало того, что эти закорючки тяжело осмыслить, так они еще и для разных терминалов разные бывают. Вообще, чтобы как-то облегчить жизнь, разработчики UNIX решили хранить в специальном файле termcap (а в будущем terminfo) все те возможности, которые предоставляет конкретный терминал. Этот файл позволяет приложениям смотреть, какие экранирующие последовательности можно посылать, в него смотрит и библиотека ncurses, избавляя пользователя-программиста от написания лишнего кода для, так скажем, кросс-терминальности. Пожалуй, самыми известными программами, в которых для интерфейса используется ncurses, являются htop, GNU Midnight Commander и инструмент графической настройки конфигурации ядра Linux, хоть с какой-то из них сталкивался каждый.

Как установить

Linux

Windows

Под Windows и DOS есть PDCurses, которая практически полностью совместима с ncurses. Одной строчкой не ставится, вот тут есть вся необходимая информация по ней.

Написание программ

Hello World!

Инициализация

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

raw и cbreak

Обычно, терминал буфферит символы, которые набирает пользователь до переноса строки, но большинству программ набираемые символы требуются сразу же во время их набора. Указанные выше функции позволяют управлять буфферизацией. Разница заключается в том, как будут обрабатывается управляющие последовательности вроде CTRL-Z и CTRL-C. В raw режиме они попадают в программу, не генерируя сигналов, а в cbreak режиме они интерпретируются драйвером терминала и генерируют соответствующие им сигналы.

echo и noecho

Эти функции контролируют вывод напечатанного на экран. noecho отключает вывод, echo наоборот включает. Обычно в программах используется noecho и вывод производится другими, более гибкими средствами.

keypad

curs_set;

Включает и отключает отображения курсора на экране, чтобы отключить курсор вызывается curs_set (FALSE)

Цвета

Мы сделали цветовую пару, которая пишет красным по черному, кстати, если лень писать константы, можно писать просто соответствующие им циферки:

Ну а если стандартные цвета недостаточно кислотные для вашей хакерской проги, то можно сделать свои! Вот так это делается:

Таким образом, библиотека предоставляет разработчику все необходимые механизмы для создания интерфейсов в терминале, код своей сделанной лабораторной с комментариями я привел ниже.

Источник

Было бы хорошо, если б исходники были доступны отдельно, чтоб не копипастить 🙂

ох, не читал, но осуждаю. ну почему в curses-ах координаты наоборот?!

(а статья хорошая, респект)

Как в ncurses-ах с юникодой сегодня?

Мне не удавалось получить события ввода от мыша с ncurses-ом, хотя библиотека обещает это. Не работали даже примерчики из мануалов. Может поэтому приложения, которые в консоли чувствуют мыша, используют не ncurses, а S-lang (mc, к примеру).

Библиотека для своего времени. Статья это только в лишний раз подтверждает 🙂

> Библиотека для своего времени. Статья это только в лишний раз подтверждает 🙂

так альтернатив нет. как 10 лет назад не было, так и сейчас нет. давно я правда на это дело не смотрел, но что-то никаких имен на слуху нет.

> Немного напрягают фразы типа «Файлы библиотеки находятся в папке /usr/include/curses/».

Валяюсь! Особенно порадовал набор программных средств, использовавшихся для создания.

>(C) Copyright 2005 Бердников Александр

посмотрите на год =) Видимо год с хвостиком решался на то чтобы новость о статье на ЛОР запостить

> Особенно порадовал набор программных средств, использовавшихся для создания.

Учитывая, что новость запостил, скорее всего сам автор, любопытно узнать почему? Требования какие-то к оформлению работы были?

Упасть в овраг можно :)))))

Тогда вопросов больше не имеем. Хотя в любом случае хорошо то, что человек написал это в ходе выполнения РГР. Всё таки какая-то польза от статьи есть.

> Тогда вопросов больше не имеем. Хотя в любом случае хорошо то, что человек написал это в ходе выполнения РГР. Всё таки какая-то польза от статьи есть.

Не какая-то, а польза. Всё-таки довольно хорошее описание для желающих начать что-то писать под терминал, правда я не проверял есть ли ошибки, но надеюсь хотя бы автор свои примеры компилировал и прогонял.

Это столько коммунижженой проприетарщины потребовалось человеку для создания 3 простых страниц с 1 текстуркой. Куда катится мир.

> Это столько коммунижженой проприетарщины потребовалось человеку для создания 3 простых страниц с 1 текстуркой. Куда катится мир.

Да и текстурка до боли знакомая. Кажись что-то штатное от винды.

А можно поподробней в сторону python’a

>Да и текстурка до боли знакомая. Кажись что-то штатное от винды.

Статья классная, спасибо автору.

>Файлы библиотеки находятся в папке /usr/include/curses/

Библиотеки уже в инклудах? А заголовочные файлы где? 🙂

Хм, вот тут поболе будет:

С русскими не работает.

А по-моему даже из 3.1

Да, библиотека, полезная.. Да и описание лишнем не будет..

Выложил недавно потому и запостил только сейчас. Подумал что пригодится кому. По работе приходится вобще писать на Delphi + MSSQL. Хотя сам предпочитаю больше Python и С иногда с плюсами. Использовал эти инструменты потому как время поджимало, а искать изучать времени вобще не было. Там вверху ещё креативный банер был на флэше из цветочков выложено ncurses потом проходит лазерный луч и цветочки падают остаются только стебли (вид сверху). Только занимает 300Кб, мб когда нибудь оптимизирую так залью. С линухом время от времени работаю. Только полностью перейти на него не получается пока из-за недостатка времени.

>так альтернатив нет. как 10 лет назад не было, так и сейчас нет. давно >я правда на это дело не смотрел, но что-то никаких имен на слуху нет.

Кажись в 98-ой тоже было, но появилось скорее всего в 3-ей

ну да, вот еще tvision забыл упомянуть из числа вечно подающих надежды..

OMG, Turbo Vision! начало 90-х, 386ые компы, борланд паскаль 7-ой. молодость

кстати, совершенно не понятно, почему упомянуты libpanel, но ни слова про libmenu и libform?

Есть неплохая дока по curses. Про отличия ничего не скажу. 🙂

Нигде ничего не сказано про ncursesw, который в отличие от обычного ncurses умеет многобайтные кодировки (то бишь utf8)

Мало того, что статье больше года, так ещё и ни одного упоминания про ncursesw. В топку!

Неплохо, но еще бы добавить раздел «Как ПРАВИЛЬНО обрабатывать SIGWINCH». Успехов!

Не работает: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060911 SUSE/1.0.5-1.1 SeaMonkey/1.0.5

>Выложил недавно потому и запостил только сейчас.

Да нормально не оправдывайся. Это ж лор:)

>борланд паскаль 7-ой. молодость

5тый, дядя, пятый:) Turbo 🙂 7дьмой, если не ошибаюсь это год 97.

> 7дьмой, если не ошибаюсь это год 97.

В подтверждение (за качество этой инфы не ручаюсь):

Источник

Как установить библиотеку ncurses

Библиотека сайта rus-linux.net

6.19. Пакет Ncurses-5.7

В пакете Ncurses находятся библиотеки, предназначенные для управления вводом/выводом на терминал, не зависящие от конкретного терминала.

Приблизительное время сборки: 0,8 SBU

Требуемое дисковое пространство: 35 MB

6.19.1. Установка пакета Ncurses

Подготовьте пакет Ncurses для компиляции:

Пояснение конфигурационного параметра:

Этот переключатель указывает, что при сборке пакета вместо обычных библиотек (например, libncurses.so.5.7 ) будут использоваться библиотеки с расширенным набором символов (например, libncursesw.so.5.7 ). Эти библиотеки с расширенным набором символов могут использоваться как с многобайтовыми локалями, так и с традиционными 8-битовыми локалями, тогда как обычные библиотеки работают только с 8-битовыми локалями. Библиотеки с расширенным набором символов и обычные библиотеки совместимы по исходному коду, но не совместимыми на уровне двоичного кода.

Поскольку библиотеки перемещены, одна из символических указывает на несуществующий файл. Пересоздайте ссылку:

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

Если желаете, то установите документацию пакета Ncurses:

Замечание

С помощью приведенных выше инструкций не создаются библиотеки Ncurses, не использующие расширенны набор символов, поскольку при компиляции исходных кодов не устанавливается пакет, который должен к ним обращаться. Если вам потребуются эти библиотеки из-за того, что есть некоторое приложение, имеющееся только в двоичном коде и оно должно быть совместимо с системой LSB, соберите пакет снова с помощью следующих команд:

6.19.2. Описание пакета Ncurses

Установленные программы: captoinfo (ссылка на tic), clear, infocmp, infotocap (ссылка на tic), ncursesw5-config, reset (ссылка на tset), tic, toe, tput и tset

Установленные библиотеки: libcursesw. (символическая ссылка и скрипт компоновщика для libncursesw.), libformw., libmenuw., libncurses++w.a, libncursesw., libpanelw. и точно такие же библиотеки без расширенного набора символов, у которых в названиях отсутствует буква «w»

Установленные директории: /usr/share/tabset, /usr/share/terminfo

Преобразует описание termcap в описание terminfo.

Очищает экран, если это возможно

Сравнивает или выдает описания terminfo

Преобразует описание terminfo в описание termcap

Предоставляет пакету ncurses конфигурационную информацию

Переинициализация терминала значениями, задаваемыми по умолчанию.

Компилятор записей описаний terminfo, который преобразует файл terminfo из исходного формата в двоичный, который нужен для работы библиотеки ncurses. В файле terminfo находится описание возможностей конкретного терминала.

Выводит список всех доступных типов терминалов, для каждого из которых указывается его имя и приводится описание

Позволяет использовать в командной оболочке настройки, относящиеся к особенностям конкретного терминала; может также использоваться для сброса или инициализации терминала, либо для вывода полного имени терминала

Может использоваться для инициализации терминалов

Ссылка на libncurses

Содержит функции, отображающие различными способами текст на экране терминала. Хорошим примером использования этих функций является меню, отображаемое командой make menuconfig при настройке ядра

Источник