Границы не отображаются должным образом, если в окне более 8 столбцов - PullRequest
0 голосов
/ 09 января 2019

Функции рисования границ, кажется, просто не рисуют верхнюю и нижнюю границы должным образом, когда ширина окна превышает 8. Как предупреждение, я использую KiTTY для SSH на сервере Arch Linux.

Я новичок в ncurses, так что есть большая вероятность, что я делаю что-то не так, но из того, что я прочитал, это должно быть правильно ...

#include <ncurses.h>
int main() {
  initscr(); cbreak();
  WINDOW *win = newwin(1,1, 1,1);
  for(int i=1; i < 16; ++i) {
    wresize(win, i, i);
    wclear(win);
    box(win, 0,0); // I've also tested wborder()
    wrefresh(win);
    mvprintw(0,0, "size: %i", i);
    getch(); //pause
  }
  endwin();
  return 0;
}

Запуск этого кода, вот что я вижу:

size: 8
 +------+
 ¦      ¦ Displays like this (normally)
 ¦      ¦ for both top and bottom borders
 ¦      ¦
 ¦      ¦
 ¦      ¦
 ¦      ¦
 +------+

size: 9
 +-+
 ¦       ¦ Each size up it will continue
 ¦       ¦ to look like this, with the
 ¦       ¦ top and bottom borders looking
 ¦       ¦ like `+-+`
 ¦       ¦
 ¦       ¦
 ¦       ¦
 +-+

1 Ответ

0 голосов
/ 09 января 2019

ncurses использует базу данных возможностей терминала для получения информации о последовательностях управления терминалом, которые поддерживает терминал. Для поиска этой информации используется значение переменной окружения TERM. PuTTY или KiTTY передает требуемое значение переменной среды TERM на SSH-сервер. Часто по умолчанию он установлен на «xterm», но его можно изменить в настройках сеанса в Соединение -> Данные -> Строка типа терминала .

PuTTY и KiTTY достаточно хорошо поддерживали управляющие последовательности для "xterm" в базе данных возможностей терминала, но последние (начиная с середины 2017 года) версии базы данных оптимизировали последовательности, определенные для "xterm", для использования последовательностей, которые в настоящее время не поддерживаются шпатлевкой или китти. В частности, теперь он использует управляющую последовательность ECMA-48 REP (символ повторения), которая не поддерживается PuTTY. Для правильной работы рисования линий в системах с недавней базой данных возможностей терминала необходимо изменить переменную окружения TERM для PuTTY или KiTTY. (Это можно изменить в настройках сеанса, как описано выше.) Подходящие значения для последних версий базы данных возможностей терминала включают в себя «putty» или «putty-256color». Значение «xterm-old» также может работать.

Проверьте каталог "/ usr / share / terminfo" в вашей хост-системе, чтобы увидеть, какие типы терминалов фактически определены системой. Первая буква типа терминала выделяется как подкаталог, так что, например, возможности терминала для типа терминала «шпаклевка» определяются файлом «/ usr / share / terminfo / p / putty».

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

Это относится только к функциям, описанным в описании терминала, и не учитывает различия между эмуляторами терминала. Например, в середине 2017 года в обновлении описания терминала xterm добавлен элемент управления ECMA-48 REP (повторяющийся символ). Он был частью xterm с января 1997 года, но описание терминала с использованием этой функции было частью только xterm (не ncurses ). После добавления его в ncurses было замечено, что:

  • rxvt не изменяется, так как не использует TERM=xterm.
  • mlterm и OSX Terminal поддерживаются REP , используя TERM=xterm.
  • VTE, konsole, PuTTY, iTerm2 не поддерживали эту стандартную, давнюю функцию xterm , хотя они установили TERM в xterm или xterm-256color .
  • screen и tmux используют разные настройки TERM и, похоже, работают (хотя у tmux были другие проблемы с тестом).
...