#c #ncurses
#c #ncurses ( проклятия )
Вопрос:
Я использую ncurses в C / C . Я пытаюсь получить несколько мигающих курсоров, но пока мне это не удавалось. Возможно ли это в ncurses? Предложения по аналогичной библиотеке (C / C или Python), которая поддерживает это, также приветствуются.
Обновление: под «курсором» я подразумеваю мигающий символ блока / строки, а не объект, который получает ввод с клавиатуры.
Комментарии:
1. Зачем вам нужно несколько мигающих курсоров?
2. Как насчет размещения мигающих символов подчеркивания на экране. (Имеется только один текстовый курсор.)
3. С помощью какого курсора вы ожидаете ввода? Вы имеете в виду мигающий символьный атрибут?
4. @EdHeal Например, некоторые текстовые редакторы (например, SublimeText) имеют функцию «несколько курсоров», которая позволяет пользователям вводить текст и выделять его в нескольких местах одновременно. Я мог бы представить, что кто-то пытается реализовать эту функцию в текстовом редакторе на основе терминала.
Ответ №1:
Как упоминалось в принятом ответе, вы не можете на самом деле иметь несколько курсоров в своем терминале, но вы можете имитировать это.
Используя ncurses, вы могли бы скрыть фактический курсор и использовать chgat(3)
семейство функций для изменения атрибутов символов, которые вы хотите отобразить в качестве курсоров. Делая это в нескольких позициях, ваша программа, похоже, использует несколько курсоров.
Эта программа выделяет «H» в «Hello» и «w» в world обратным выделением, что создает впечатление наведения курсора на каждый символ. Затем он переходит в спящий режим на 5 секунд и завершается.
#include <ncurses.h>
#include <unistd.h>
int main() {
initscr();
noecho();
curs_set(FALSE);
mvprintw(0, 0, "Hello, world!");
mvchgat(0, 0, 1, A_REVERSE, 0, NULL);
mvchgat(0, 7, 1, A_REVERSE, 0, NULL);
refresh();
sleep(5);
endwin();
}
Ответ №2:
коротко: нет, вы не можете этого сделать
long: curses могут только запрашивать терминалы что-то делать (а терминалы этого не делают).
Каждое окно в окне curses может иметь свою собственную позицию курсора, но терминал будет отображать только один курсор одновременно. Если вы запросите ввод, например, с помощью getch
, curses поместит курсор терминала в последнюю позицию в окне, куда вы его переместили.