ncurses

Библиотека ncurses для создания текстовых интерфейсов в терминале. Позволяет разработчикам проектировать интерактивные приложения с поддержкой окон, меню и форм в консольной среде.

Подпакеты
Имя Краткое описание
ncurses-libs Описание отсутствует
ncurses-compat Описание отсутствует
ncurses-devel Описание отсутствует
ncurses-terminfo Описание отсутствует
lib32-ncurses 32-битные библиотеки для ncurses

Домашняя страница: http://invisible-island.net/ncurses

Доступные версии
Версия Релиз Архитектура Лицензия Дата сборки Размер Версии ОС Подробности
6.5 1.niceos5 x86_64 MIT 13 мая 2025 г. 377,388 МиБ Подробности
Описание

Библиотека ncurses: мощный инструмент для создания текстовых интерфейсов

Пакет ncurses (new curses) представляет собой свободно распространяемую библиотеку для разработки текстовых пользовательских интерфейсов (TUI) в терминальной среде. Она предоставляет набор функций для управления курсором, создания окон, обработки ввода с клавиатуры и мыши, а также отображения текста с различными атрибутами (цвет, жирность, подчеркивание). Эта библиотека широко используется в Unix-подобных системах, включая Найс.ОС, для создания интерактивных приложений, работающих в консоли.

Основные возможности ncurses

Библиотека ncurses является кроссплатформенным решением для разработчиков, стремящихся создавать приложения с текстовым интерфейсом. Она поддерживает широкий спектр терминалов и эмуляторов, автоматически адаптируясь к их возможностям. Вот ключевые особенности пакета:

  • Управление окнами: создание, перемещение и изменение размеров окон в терминале.
  • Обработка ввода: поддержка клавиатурных событий, включая специальные клавиши (F1-F12, стрелки) и мышь.
  • Работа с цветами: настройка цветовых пар для текста и фона (если терминал поддерживает цвета).
  • Поддержка атрибутов текста: жирный шрифт, подчеркивание, мигание и другие эффекты.
  • Совместимость: автоматическое определение возможностей терминала через базу данных terminfo.
  • Меню и формы: встроенные инструменты для создания интерактивных меню и форм ввода данных.

Для кого предназначена библиотека ncurses?

Пакет ncurses идеально подходит для разработчиков, создающих консольные приложения, системных администраторов, разрабатывающих скрипты с интерактивным интерфейсом, и энтузиастов, желающих изучить программирование текстовых интерфейсов. Многие популярные утилиты, такие как midnight commander (mc), htop и nano, используют ncurses для отображения своих интерфейсов.

Установка ncurses на Найс.ОС

Для установки библиотеки ncurses на системе Найс.ОС используется пакетный менеджер dnf. Выполните следующую команду для установки пакета и необходимых зависимостей:

sudo dnf install ncurses

Если вам нужны инструменты разработки (заголовочные файлы и библиотеки для компиляции программ), установите пакет ncurses-devel:

sudo dnf install ncurses-devel

Пример использования ncurses в программировании

Библиотека ncurses чаще всего используется в программах на языке C или C++. Ниже приведен простой пример программы, которая инициализирует окно, отображает текст и ждет нажатия клавиши:

#include 

int main() {
    initscr();            // Инициализация ncurses
    cbreak();             // Отключение буферизации ввода
    noecho();             // Отключение отображения введенных символов

    mvprintw(10, 10, "Привет, это ncurses!"); // Вывод текста в позиции (10,10)
    refresh();            // Обновление экрана

    getch();              // Ожидание нажатия клавиши
    endwin();             // Завершение работы ncurses

    return 0;
}

Для компиляции этой программы используйте следующую команду, указав библиотеку ncurses:

gcc -o hello_ncurses hello_ncurses.c -lncurses

После запуска программа отобразит текст "Привет, это ncurses!" в терминале и завершится после нажатия любой клавиши.

Создание интерактивного меню с ncurses

Библиотека предоставляет модули для создания сложных интерфейсов, таких как меню. Ниже приведен пример программы с простым меню:

#include 
#include 

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))

int main() {
    char *choices[] = {
        "Выбор 1",
        "Выбор 2",
        "Выход",
        (char *)NULL,
    };
    ITEM **my_items;
    int c;
    MENU *my_menu;
    int n_choices, i;

    initscr();
    cbreak();
    noecho();
    keypad(stdscr, TRUE);

    n_choices = ARRAY_SIZE(choices) - 1;
    my_items = (ITEM **)calloc(n_choices + 1, sizeof(ITEM *));

    for(i = 0; i < n_choices; ++i)
        my_items[i] = new_item(choices[i], choices[i]);
    my_items[n_choices] = (ITEM *)NULL;

    my_menu = new_menu((ITEM **)my_items);
    mvprintw(LINES - 2, 0, "F1 для выхода");
    post_menu(my_menu);
    refresh();

    while((c = getch()) != KEY_F(1)) {
        switch(c) {
            case KEY_DOWN:
                menu_driver(my_menu, REQ_DOWN_ITEM);
                break;
            case KEY_UP:
                menu_driver(my_menu, REQ_UP_ITEM);
                break;
        }
        refresh();
    }

    unpost_menu(my_menu);
    free_menu(my_menu);
    for(i = 0; i < n_choices; ++i)
        free_item(my_items[i]);
    endwin();

    return 0;
}

Эта программа создает меню с тремя пунктами, которое можно пролистывать с помощью стрелок вверх и вниз. Для компиляции используйте:

gcc -o menu_ncurses menu_ncurses.c -lncurses -lmenu

Преимущества использования ncurses

Использование ncurses дает разработчикам ряд преимуществ:

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

Ограничения и особенности

Несмотря на свои преимущества, ncurses имеет некоторые ограничения. Она не подходит для графических интерфейсов (GUI) и работает исключительно в текстовом режиме. Также поведение программы может зависеть от типа терминала и его настроек. Для устранения проблем с совместимостью рекомендуется тестировать приложения на разных терминалах (xterm, gnome-terminal, tmux).

Полезные ресурсы и документация

Для более глубокого изучения ncurses рекомендуется обратиться к официальной документации и man-страницам. Вы можете просмотреть встроенную справку, выполнив:

man ncurses

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

Библиотека ncurses остается незаменимым инструментом для разработчиков консольных приложений в Найс.ОС и других Unix-подобных системах. Она сочетает в себе простоту использования, мощные возможности и высокую степень совместимости, что делает ее стандартом де-факто для создания текстовых интерфейсов.