Как сделать символы в C используя библиотеку ncurses.h "blink" - PullRequest
2 голосов
/ 25 февраля 2020

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

На многих веб-сайтах объясняется, что у моего компилятора не включено мигание, и что мне просто нужно скачать пакет, чтобы включить его, или что-то, что может повлиять на

Однако, из всех тех, что я видел, ни один из них go не содержит подробностей о том, где и как получить пакет, который мне нужно разрешить мигать, или, если они это сделают, то это не с моим компилятором.

Так что, если кто-то может мне помочь, как мне включить мигание в Ubuntu с помощью такой функции, как

attron(A_BLINK);

Я знаю, что подобные вопросы получат отрицательные голоса. Мне все равно, я просто хочу знать, как решить мою проблему.

Буду признателен за любые отзывы

-Редакт

#include <string.h>
#include <ncurses.h>

int main(void)
{
  char text[] = "Please Blink";
  size_t len = strlen(text);
  int i, row, col;
  initscr();
  getmaxyx(stdscr, row,col);
  keypad(stdscr, TRUE);
  noecho();
  curs_set(0);

  move((row / 2), (col / 2) - (len / 2));

  attron(A_BLINK);
  for(i = 0; i < len; ++i)
  {
    printw("%c", text[i]);
  }

  refresh();
  getch();

  attroff(A_BLINK);

  endwin();

  return 0;
}

-Райан

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Мигание является собственностью вашего эмулятора терминала. Если ваш терминал не поддерживает его, этого не произойдет.

FWIW, простое окно xterm поддерживает для меня мигание.

Однако, если вы хотите, чтобы текст мигал, Вы можете сделать это вручную, периодически перезаписывая текст пробелами. Что-то вроде:

int toggle = 0;
halfdelay(5);

do {
    toggle = !toggle;
    move((row / 2), (col / 2) - (len / 2));
    printw("%*.*s", len, len, toggle ? text : "");
    refresh();
} while (getch() == ERR);

nocbreak();

Вызов halfdelay() заставит getch() вернуться через 5/10 тыс секунды. Если за это время ни одна клавиша не была нажата, возвращается ERR. Вызов nocbreak() отключит halfdelay().

0 голосов
/ 25 февраля 2020

escape-последовательности ANSI

в качестве примера использования:

от типа терминала:

echo -e "\x1b[5;32;43m"

это приводит к мигающему зеленому передний план над желтым фоном

, затем введите:

echo "test"

, чтобы отобразить слово test в виде зеленых букв на желтом фоне

тогда, если экран не вернулся к нормальный режим, введите:

echo -e "\1b[0m"

, чтобы сбросить экран до нормального значения

Примечание: те же escape-последовательности ANSI могут быть выведены с использованием функции printf() через:

printf( "%s\n", "\x1b[5;32;43m" );

и т. Д.

...