ncurses: мышь работает в эмуляторе терминала, но не tty(vt)

  initscr();
  cbreak();
  noecho();
  assert(OK==keypad(stdscr,TRUE));   
  mousemask(BUTTON1_PRESSED|BUTTON1_RELEASED,NULL));
  assert(has_mouse());
  assert(166==mouseinterval(1));
  refresh();
  for(;;){
    int ch=wgetch(stdscr);
    // Detect mouse event and print coordinates
  }  
  endwin();

В эмуляторе терминала (alacritty) координаты мыши обычно сообщаются после нажатия левой кнопки. Однако, если я systemctl start gpm запущу его в tty(vt), никакого ответа не будет, где бы ни щелкнули мышью.

Как я могу заставить его работать и в tty(vt)?


person Darren Ng    schedule 13.06.2020    source источник
comment
ncurses должен быть настроен (во время компиляции) для работы с gpm. Если вы скомпилировали его самостоятельно, это может быть не настроено. Если вы комментируете готовый пакет, ваш вопрос должен содержать соответствующую информацию (версия системы и пакета).   -  person Thomas Dickey    schedule 13.06.2020
comment
Это готовый дистрибутив, и здесь так они его построили.   -  person Darren Ng    schedule 13.06.2020
comment
Скрипт пакета не упоминает gpm, а скрипт настройки не включает это по умолчанию. Если файлы разработки gpm оказались доступны, они могли быть в пакете.   -  person Thomas Dickey    schedule 13.06.2020


Ответы (1)


ncurses должен быть настроен (во время компиляции) для работы с gpm. Если вы скомпилировали его самостоятельно, это может быть не настроено. Если вы комментируете готовый пакет, ваш вопрос должен содержать соответствующую информацию (версия системы и пакета).

Комментарий указывает на пакет Arch Linux, который явно не включает gpm. Функция gpm не включена по умолчанию (подсказка: INSTALL показывает функцию как < strong>--with-gpm) и не имея других подсказок, вряд ли будет частью пакета, если только пакет разработки для gpm не был установлен на сервере сборки.

В следующем комментарии упоминается полночный командир. Независимо от того, использует ли он на самом деле ncurses, midnight Commander уже довольно давно не использует поддержку мыши в ncurses. Кое-что из этого обсуждается в комментариях о ncurses и сленге (S -язык)

Вы можете заставить это работать (ncurses+gpm) либо самостоятельно скомпилировав пакет (используя --with-gpm, позаботившись об установке заголовков и библиотек для разработки), либо, возможно, отчет об ошибке в Arch может изменить это.

person Thomas Dickey    schedule 13.06.2020
comment
Midnight Commander, похоже, использует libgpm напрямую .c mouse.c - person Darren Ng; 13.06.2020
comment
Я знаю об этом, но это отклоняется от вопроса :-) Кстати, если на вопрос есть ответ, вы можете принять его. - person Thomas Dickey; 13.06.2020