ncurses
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
ncurses
Здесь где-то на соседних форумах возник разговор: канонический режим ввода/вывода терминала, неканонический режим...
Это знать бы надо, ... Но!
... есть такая библиотека ncurses - это классика UNIX начиная с самых древних BSD, на ней сделано множество широкоизвестных используемых проектов Linux. ncurses и переводит терминал в некононический режим, и обеспечивает прямое позиционирование курсора, и посимвольный ввод/вывод ... и мн. других вещей. И когда окажется необходимым посимвольный ввод, то (хорошо понимая режимы ввода/вывода и termios) - лучше использовать ncurses.
Это знать бы надо, ... Но!
... есть такая библиотека ncurses - это классика UNIX начиная с самых древних BSD, на ней сделано множество широкоизвестных используемых проектов Linux. ncurses и переводит терминал в некононический режим, и обеспечивает прямое позиционирование курсора, и посимвольный ввод/вывод ... и мн. других вещей. И когда окажется необходимым посимвольный ввод, то (хорошо понимая режимы ввода/вывода и termios) - лучше использовать ncurses.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: ncurses
Для использования библиотека ncurses установлена практически всегда и во всех дистрибутивах - слишком многие проекты её используют.Olej писал(а): ... есть такая библиотека ncurses - это классика UNIX начиная с самых древних BSD
Но вот для того чтобы писать свои программы, используя ncurses, нужно сделать доустановку:
Код: Выделить всё
[olej@dell Игнатенко]$ dnf provides '*/ncurses.h'
Последняя проверка окончания срока действия метаданных: 6 days, 22:32:23 назад, Mon Jul 18 19:46:57 2016.
latrace-0.5.11-9.fc23.i686 : LD_AUDIT feature frontend for glibc 2.4+
Источник: fedora
latrace-0.5.11-9.fc23.x86_64 : LD_AUDIT feature frontend for glibc 2.4+
Источник: fedora
ncurses-devel-5.9-21.20150214.fc23.i686 : Development files for the ncurses library
Источник: fedora
ncurses-devel-5.9-21.20150214.fc23.x86_64 : Development files for the ncurses library
Источник: fedora
Код: Выделить всё
[root@dell include]# dnf install ncurses-devel
Последняя проверка окончания срока действия метаданных: 2:16:11 назад, Mon Jul 25 16:05:58 2016.
Зависимости разрешены.
=============================================================================================================================================
Package Архитектура Версия Репозиторий Размер
=============================================================================================================================================
Установка:
ncurses-devel x86_64 5.9-21.20150214.fc23 fedora 732 k
Результат операции
=============================================================================================================================================
Установка 1 Пакет
Объем загрузки: 732 k
Объем изменений: 2.2 M
Продолжить? [д/Н]: y
Загрузка пакетов:
ncurses-devel-5.9-21.20150214.fc23.x86_64.rpm 1.4 MB/s | 732 kB 00:00
---------------------------------------------------------------------------------------------------------------------------------------------
Общий размер 311 kB/s | 732 kB 00:02
Проверка транзакции
Проверка транзакции успешно завершена.
Идет проверка транзакции
Тест транзакции проведен успешно
Выполнение транзакции
Установка : ncurses-devel-5.9-21.20150214.fc23.x86_64 1/1
Проверка : ncurses-devel-5.9-21.20150214.fc23.x86_64 1/1
Установлено:
ncurses-devel.x86_64 5.9-21.20150214.fc23
Код: Выделить всё
[root@dell include]# ls -l /usr/include/ncurses.h
lrwxrwxrwx. 1 root root 8 июн 18 2015 /usr/include/ncurses.h -> curses.h
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: ncurses
А теперь смотрим как красиво (и как просто!) в API ncurses описывается прямое управление курсором, неканонический (посимвольный) режим ввода и мн. другие вещи (для этого только и тема заведена - для напоминания, как памятка):
Это что?
Это практически полноценный визуальный редактор экрана ... как заготовка визуального текстового редактора может быть.
Код: Выделить всё
#include <signal.h>
#include <stdlib.h>
#include <ncurses.h>
void handler( int signo ) {
endwin(); // завершение работы с ncurses
exit( 0 );
};
int main( int argc,char *argv[] ) {
signal( SIGINT, handler );
initscr(); // инициализация (должна быть выполнена перед использованием ncurses)
int c, y, x, my, mx;
getmaxyx( stdscr, my, mx );
move( my / 2, mx / 2 ); // перемещение курсора в стандартном экране y=10 x=30
noecho();
keypad( stdscr, TRUE );
while( ( c = getch() ) != KEY_F( 3 ) ) {
getyx( stdscr, y, x );
if( c == KEY_RESIZE ) {
getmaxyx( stdscr, my, mx );
continue;
}
switch( c ) {
case KEY_UP: move( y > 0 ? --y : y, x ); break;
case KEY_DOWN: move( y < my ? ++y : y, x ); break;
case KEY_LEFT: move( y, x > 0 ? --x : x ); break;
case KEY_RIGHT: move( y, x < mx ? ++x : x ); break;
case KEY_BACKSPACE: if( x > 1 ) {
move( y, x - 1 );
addch( ' ' );
move( y, x - 1 );
break;
}
case KEY_DC: addch( ' ' ); break;
default:
addch( c );
break;
}
}
endwin();
return 0;
}
Это практически полноценный визуальный редактор экрана ... как заготовка визуального текстового редактора может быть.
Код: Выделить всё
[olej@dell ncurses]$ gcc nc1.c -o nc1 -lncurses
[olej@dell ncurses]$ make
gcc -Wall nc1.c -o nc1 -lncurses
- Вложения
-
- ncurses.tgz
- (2.17 КБ) 230 скачиваний
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: ncurses
Но в таком виде ncurses (и во всех где найдёте примеры) будет работать только с английским, латинским (ASCII) текстом.Olej писал(а):А теперь смотрим как красиво (и как просто!) в API ncurses описывается прямое управление курсором, неканонический (посимвольный) режим ввода и мн. другие вещи (для этого только и тема заведена - для напоминания, как памятка):
Для того, чтобы ncurses работал с русскими текстами, нужно использовать API ncurses для работы не с символами char, а с широкими символами wchar_t.
Всё это есть в /usr/include/ncurses.h
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: ncurses
2 полезных ссылки (статьи) по ncurses:
http://alexber220.narod.ru/ncurses/
http://alexber220.narod.ru/ncurses/page2.htm
Только читать - аккуратно, там парень в залихватскости своей много неточностей пишет ... но как подсказка - годится.
А дальше: /usr/include/ncurses.h - там большинство вопросов можно разобрать из заголовков, определений и комментариев.
http://alexber220.narod.ru/ncurses/
http://alexber220.narod.ru/ncurses/page2.htm
Только читать - аккуратно, там парень в залихватскости своей много неточностей пишет ... но как подсказка - годится.
А дальше: /usr/include/ncurses.h - там большинство вопросов можно разобрать из заголовков, определений и комментариев.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: ncurses
Полная инструкция от одного из участников проекта - NCURSES Programming HOWTO
Pradeep Padala
v1.9, 2005-06-20
Table of Contents
1. Introduction
1.1. What is NCURSES?
1.2. What we can do with NCURSES
1.3. Where to get it
1.4. Purpose/Scope of the document
1.5. About the Programs
1.6. Other Formats of the document
1.7. Credits
1.8. Wish List
1.9. Copyright
2. Hello World !!!
2.1. Compiling With the NCURSES Library
2.2. Dissection
3. The Gory Details
4. Initialization
4.1. Initialization functions
4.2. raw() and cbreak()
4.3. echo() and noecho()
4.4. keypad()
4.5. halfdelay()
4.6. Miscellaneous Initialization functions
4.7. An Example
5. A Word about Windows
6. Output functions
6.1. addch() class of functions
6.2. mvaddch(), waddch() and mvwaddch()
6.3. printw() class of functions
6.4. addstr() class of functions
6.5. A word of caution
7. Input functions
7.1. getch() class of functions
7.2. scanw() class of functions
7.3. getstr() class of functions
7.4. Some examples
8. Attributes
8.1. The details
8.2. attron() vs attrset()
8.3. attr_get()
8.4. attr_ functions
8.5. wattr functions
8.6. chgat() functions
9. Windows
9.1. The basics
9.2. Let there be a Window !!!
9.3. Explanation
9.4. The other stuff in the example
9.5. Other Border functions
10. Colors
10.1. The basics
10.2. Changing Color Definitions
10.3. Color Content
11. Interfacing with the key board
11.1. The Basics
11.2. A Simple Key Usage example
12. Interfacing with the mouse
12.1. The Basics
12.2. Getting the events
12.3. Putting it all Together
12.4. Miscellaneous Functions
13. Screen Manipulation
13.1. getyx() functions
13.2. Screen Dumping
13.3. Window Dumping
14. Miscellaneous features
14.1. curs_set()
14.2. Temporarily Leaving Curses mode
14.3. ACS_ variables
15. Other libraries
16. Panel Library
16.1. The Basics
16.2. Compiling With the Panels Library
16.3. Panel Window Browsing
16.4. Using User Pointers
16.5. Moving and Resizing Panels
16.6. Hiding and Showing Panels
16.7. panel_above() and panel_below() Functions
17. Menus Library
17.1. The Basics
17.2. Compiling With the Menu Library
17.3. Menu Driver: The work horse of the menu system
17.4. Menu Windows
17.5. Scrolling Menus
17.6. Multi Columnar Menus
17.7. Multi Valued Menus
17.8. Menu Options
17.9. The useful User Pointer
18. Forms Library
18.1. The Basics
18.2. Compiling With the Forms Library
18.3. Playing with Fields
18.4. Form Windows
18.5. Field Validation
18.6. Form Driver: The work horse of the forms system
19. Tools and Widget Libraries
19.1. CDK (Curses Development Kit)
19.2. The dialog
19.3. Perl Curses Modules CURSES::FORM and CURSES::WIDGETS
20. Just For Fun !!!
20.1. The Game of Life
20.2. Magic Square
20.3. Towers of Hanoi
20.4. Queens Puzzle
20.5. Shuffle
20.6. Typing Tutor
21. References
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя