FPublisher
Web-технологии: База знаний
Документация PHP
ncurses_init_color
(PHP 4 >= 4.2.0, PHP 5, PECL ncurses:1.0.0)
ncurses_init_color — Set new RGB value for color
Описание
int ncurses_init_color ( int $color , int $r , int $g , int $b )
Эта функция является ЭКСПЕРИМЕНТАЛЬНОЙ. Поведение этой функции, ее имя и относящаяся к ней документация могут измениться в последующих версиях PHP без уведомления. Используйте эту функцию на свой страх и риск.
К настоящему времени эта функция еще не была документирована; для ознакомления доступен только список аргументов.
Что такое код ncurses_init_color
(PHP 4 >= 4.2.0, PHP 5)
ncurses_init_color — Set new RGB value for color
Описание int ncurses_init_color ( int color, int r, int g, int b )
Внимание | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Внимание | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Атрибут | Описание |
---|---|
A_NORMAL | нормальный, переустановка всего остального |
A_STANDOUT | наиболее яркий режим |
A_UNDERLINE | подчеркивание |
A_REVERSE | обратное изображение |
A_BLINK | мигание |
A_DIM | тусклый или полуяркий режим |
A_BOLD | жирный шрифт |
A_ALTCHARSET | использование альтернативной символьной таблицы |
A_INVIS | невидимый режим |
A_PROTECT | режим защиты |
A_CHARTEXT | маска для действующих символов (chtype) |
A_COLOR | маска для цвета |
COLOR_PAIR(n) | установка цветовой пары n |
PAIR_NUMBER(a) | получение цветовой пары, лежащей в атрибуте a |
Определим для окна атрибуты «мерцание» и «жирный шрифт» и будем выводить символы с заданными ранее цветами
[Код полностью](
Остальная часть этой программы — такая же как в примере из раздела «Экран и окна».
Перед началом использования цветов необходимо проверить, доступны ли они нам, и убедиться, что количество возможных цветовых пар COLOR_PAIRS не меньше того, которое мы хотим создать.
Для инициализации операций с цветом вызывается функция start_color .
Функция has_colors позволяет узнать, можно ли использовать цвета. Если она возвращает FALSE , то использовать цвета нельзя.
Для создания цветовых пар служит функция init_pair :
foreground — цвет символа; background — цвет фона. pair_number — номер созданной цветовой пары. Каждой паре будет соответствовать номер от 1 до COLOR_PAIRS-1 (0 зарезервирован для стандартного отображения). Для изменения цвета вызывается функция color_set , в которой указывается номер нужной цветовой пары.
Атрибуты
Помимо цветов можно управлять и другими атрибутами символов, такими как тип шрифта (жирный, подчеркнутый), мерцание и т. п. Эти атрибуты представляются целыми числами, каждый бит которых отвечает за определенный видеоэффект.
Есть два способа использования атрибутов: указывать их для каждого выводимого символа или глобально — для всего окна.
Атрибут символа устанавливается при вызове функции waddch(win, ch) или addch(ch) . Для связывания символа с атрибутом и комбинирования атрибутов служит логическое ИЛИ. Например, A_UNDERLINE — предопределенный атрибут, отвечающий за подчеркивание символа. Для того, чтобы вывести в окно win символ ‘X’ с подчеркиванием нужно указать:
Обратите внимание, что атрибуты окна относятся ко всему содержимому окна, в том числе и к рамке. В то же время надпись «Hello, world!» не мерцает, поскольку выводится не в окне, а на экране, на который не распространяется назначение атрибутов с помощью wattron .
Для чтения символа из stdscr используется функция getch :
По умолчанию введенный символ отображается на экране. Запретить отображение можно функцией noecho .
Вызов функции cbreak позволяет getch считывать поступившие от пользователя данные непосредственно после нажатия клавиши. В противном случае полученные данные поступят в обработку только после того, как будет считан символ новой строки. Тогда данные поступают в getch посимвольно, по принципу FIFO, до тех пор пока буфер ввода не опустеет.
По умолчанию, getch ожидает нажатие клавиши. Это полезно, например, когда нужно притормозить выполнение программы. Отменить это умолчание можно с помощью функции nodelay(stdscr, TRUE) . Такое поведение используются для создания циклов в игровых программах, где требуется оперативная реакция пользователя. Например:
Вызов функции keypad(stdstr, TRUE) , позволяет обрабатывать нажатия специальных клавиш, таких как стрелки, Ctrl или Delete, а также их комбинаций. В результате нажатия генерируется целое число, которое можно считать, обработать и выполнить какое-либо действие.
В таблице ниже приведены коды клавиш:
Код клавиши | Описание |
---|---|
KEY_DOWN | Клавиши со стрелками |
KEY_UP | |
KEY_LEFT | |
KEY_RIGHT | |
KEY_HOME | Home |
KEY_BACKSPACE | Backspace |
KEY_F(n) | Функциональная клавиша с 0 = 63 |
KEY_DC | Delete |
KEY_IC | Insert |
KEY_ENTER | Enter |
Считывание и обработка нажатия клавиш выполняется так:
Чтение символов из окна выполняется функцией
Чтение может выполняется вместе с перемещением курсора в заданную позицию:
В следующем пример символ ‘X’ перемещается по экрану клавишами со стрелками:
Ссылки
- Мэтью Н., Стоунс Р. Основы программирования в Linux. — СПб.: БХВ-Петербург, 2009, Глава 6. — с. 253—301. Ncurses Programming Guide by by X. Li. Еще одно краткое руководство.NCURSES Programming HOWTO, Pradeep Padala. Все, что нужно. *Руководство программиста для Linux, перевод А. Паутнова. Справочник на русском.
Читайте также
Комментарии
Дмитрий Храмов
Компьютерное моделирование и все, что с ним связано: сбор данных, их анализ, разработка математических моделей, софт для моделирования, визуализации и оформления публикаций. Ну и за жизнь немного.
ncurses_init_color — Define a terminal color
(PHP 4 >= 4.2.0, PHP 5 = 1.0.0)
ncurses_init_color — Define a terminal color
Описание
Defines or redefines the given color. When this function is called, all occurrences of the given color on the screen, if any, immediately change to the new definition.
Color capabilities must be supported by the terminal and initialized using ncurses_start_color() prior to calling this function. In addition, the terminal must have color changing capabilities; use ncurses_can_change_color() to check for this.
Список параметров
The identification number of the color to redefine. It may be one of the default color constants.
A color value, between 0 and 1000, for the red component.
A color value, between 0 and 1000, for the green component.
A color value, between 0 and 1000, for the blue component.
Возвращаемые значения
Returns -1 if the function was successful, and if ncurses or terminal color capabilities have not been initialized or the terminal does not have color changing capabilities.
Смотрите также
- ncurses_color_content() — Retrieves RGB components of a color
- ncurses_start_color() — Initializes color functionality
Что такое код ncurses_init_color
Life seems dull with no colors. Curses has a nice mechanism to handle colors. Let’s get into the thick of the things with a small program.
Example 9. A Simple Color example
#include vo , string); refresh(); >
As you can see, to start using color, you should first call the function start_color() . After that, you can use color capabilities of your terminals using various functions. To find out whether a terminal has color capabilities or not, you can use has_colors() function, which returns FALSE if the terminal does not support color.
Curses initializes all the colors supported by terminal when start_color() is called. These can be accessed by the define constants like COLOR_BLACK etc. Now to actually start using colors, you have to define pairs. Colors are always used in pairs. That means you have to use the function init_pair() to define the foreground and background for the pair number you give. After that that pair number can be used as a normal attribute with COLOR_PAIR() function. This may seem to be cumbersome at first. But this elegant solution allows us to manage color pairs very easily. To appreciate it, you have to look into the the source code of «dialog», a utility for displaying dialog boxes from shell scripts. The developers have defined foreground and background combinations for all the colors they might need and initialized at the beginning. This makes it very easy to set attributes just by accessing a pair which we already have defined as a constant.
The following colors are defined in curses.h . You can use these as parameters for various color functions.
Функция | Описание | Документация |
---|---|---|
ncurses_init | Инициализирует ncurses | www.php.net/manual/en/function.ncurses-init.php |
ncurses_newwin | Создаёт новое окно | www.php.net/manual/en/function.ncurses-newwin.php |
ncurses_getmaxyx(resource window, int return Y, int return X); |
Записывает в переменные X и Y максимальных размеров терминала | – |
ncurses_border | Рисует рамку вокруг основного окна | www.php.net/manual/en/function.ncurses-border.php |
ncurses_refresh | Обновляет основное окно. Для перерисовки второстепенных окон используйте ncurses_wrefresh | www.php.net/manual/en/function.ncurses-refresh.php |
ncurses_attron | Применяет атрибут к выводимому тексту | www.php.net/manual/en/function.ncurses-attron.php |
ncurses_attroff | Отключает применение атрибута | www.php.net/manual/en/function.ncurses-attroff.php |
ncurses_mvaddstr | Выводит строку | www.php.net/manual/en/function.ncurses-mvaddstr.php |
ncurses_wborder (resource window, int left, int right, int top, int bottom, int tl_corner, int tr_corner, int bl_corner, int br_corner); |
Рисует рамку для второстепенного окна. | – |
ncurses_wattron(resource window, int attribute) |
Идентично ncurses_attron, только применяется для окна window | – |
ncurses_mvwaddstr | Помещает строку во второстепенное окно | www.php.net/manual/en/function.ncurses-mvwaddstr.php |
ncurses_wattroff (resource window, int attribute) |
Идентично ncurses_wattroff, только применяется для окна window | – |
ncurses_wrefresh | Перерисовывает второстепенное окно. | www.php.net/manual/en/function.ncurses-wrefresh.php |
ncurses_getch | Ждёт ввода с клавиатуры или мыши. | www.php.net/manual/en/function.ncurses-getch.php |
Улучшенный traceroute
Сейчас создадим действительно полезную программу: traceroute с выводом whois-информации о каждом прыжке.
Этот скрипт запускает traceroute до zend.com (макс 10 прыжков) и показывает результаты в одном окне. По элементам можно переходить с помощью стрелок. При нажатии на enter информация о данном ip будет показана в нижнем окне. По нажатию на esc произойдёт завершение работы программы.
В заключение
Выше изложенный код довольно прост и может послужить базой для вашего приложения с использованием ncurses.
Мы не рассматривали использование мыши, цветов и многих других функций вывода.
Возможно вы создадите набор функций для использования этой библиотеки вывода. В качестве старта предлагаю вам две функции, которые упростят создание окон. Вы можете добавить в них создание панелей, рисование заголовков или что-нибудь ещё.
Возникли проблемы с определением значений цвета с помощью init_color (); в курсах в с
Я использую init_color(); в ncurses в C, чтобы попытаться определить новые значения цвета RGB. Однако init_color(); не влияет и не меняет цвета по умолчанию после запуска программы.
Я пытался перемещаться по операторам init_color(); до и после init_pair(); и start_color(); , но не повезло. Я также попытался использовать другие значения (ASCII и числа из других источников) вместо ex. COLOR_MAGENTA , для первого аргумента в одном из операторов init_color(); , но тоже не повезло. Мои операторы start_color(); , init_color(); и init_pair(); находятся внутри основной функции перед остальной частью программы. Мой терминал (использующий cloud9 / cs50) поддерживает 256 цветов (проверяется с помощью команд терминала). Также все определения цвета находятся над функцией ‘main’.
Я ожидал, что операторы init_color(); вступят в силу и изменят цвета по умолчанию (напр. Пурпурный, черный и т. д.) к новым назначенным конкретным значениям RGB, но они остаются неизменными при запуске программы.
Я добавил проверки для количества поддерживаемых цветов: has_colors(); и can_change_color(); . Поддержка количества цветов возвращает 8, has_colors(); возвращает true, и, наконец, can_change_color(); возвращает false. Спасибо, что предложили использовать has_colors(); и can_change_color(); , хотя кажется, что это проблема, я не уверен, куда идти дальше?