Хороший ответ начинается с объяснения проблемы своими словами, затем выборочно цитируются части, которые имеют отношение к делу. В разделе FAQ по ncurses, представленном @Craig, есть аспект, не описанный подробно, который помогает понять вопрос.
Ссылаясь на раздел Line Graphics страницы руководства terminfo(5) и соответствующий раздел Line Graphics страницы руководства curs_add(3x), библиотека curses имеет предопределенный набор символьных констант с именем ACS_xxxx, которые на различных терминалах рисуются с помощью аналогичных управляющих последовательностей.
Наиболее распространенный вариант основан на VT100, где приложение посылает специальный символ (или управляющую последовательность) для запуска режима линейной графики mode и другой символ (или управляющую последовательность) для завершения линейной графики.
Несколько разработчиков эмуляторов терминалов возражали против понятия режимов при написании текста в режиме UTF-8. Не обращайте внимания на иронию (для запуска/остановки кодировки UTF-8 существуют управляющие последовательности), но в ncurses эта функция поддерживается достаточно эффективно. Чтобы помочь ему решить, как делать построчную графику,
Если ncurses должен использовать только UTF-8 (потому что терминал не поддерживает линейную графику VT100), он использует встроенную таблицу достаточно хороших значений Unicode. Рисование линий с помощью UTF-8 неизбежно в три раза медленнее, чем при использовании линейной графики VT100, просто потому, что на терминал посылается в три раза больше символов.
Все это делает рисование линий UTF-8 "тоже", а не основной задачей библиотеки. В случае OP что-то (вероятно, переменные локали) было неправильно. Fedora инициализировала консоль в режиме UTF-8, а консоль Linux - хорошо известный случай, в котором отсутствует построчная перерисовка VT100, ОП получил странные символы на экране.
Поскольку ncurses интерпретировал среду OP как поддерживающую возможности в описании терминала, он переключился в режим рисования строк VT100 (игнорируемый консолью из-за переопределения режима) и нарисовал символы, которые, как он ожидал, будут отображаться в строки. Поэтому на экране могло появиться следующее:
lqqqqqqqqqqqqqqqk
x Hello world x
mqqqqqqqqqqqqqqqj
а не
┌───────────────┐
│ Hello world │
└───────────────┘
Команда, используемая для перезагрузки терминала, имеет точное название:
reset
Однако это, скорее всего, также очистит терминал.
Вы также можете попробовать
stty echo
, чтобы включить эхо того, что вы печатаете, или
stty sane
, который должен вернуть ваш терминал в нормальное состояние.
Если кажется, что клавиша Enter не работает, вместо нее можно использовать Ctrl+J .