Настройка и работа в Linux
adb5321d

Termcap


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

Для этого в Юниксе существует специальная "база данных свойств терминалов" - termcap. Каждый тип терминала в этой "базе данных" имеет свое название и перечень его "свойств".

Свойствами терминала могут быть

  • общие характеристики терминала, например

  • co#80 - количество колонок (в данном случае - 80)
  • li#25 - количество строк (в данном случае - 25)
  • pt - терминал сам отрабатывает код Tab
  • ...

  • коды, которые нужно выводить на экран для управления курсором, очистки экрана (или части экрана), смены цветов, атрибутов и т.п., например
    • up=\E[A - как сдвинуть курсор вверх
    • cl=\E[H\E[J - как очистить экран
    • mb=\E[5m - как включить "мерцание"
    • ...
    • коды, которые выдают "специальные" клавиши терминала, например
      • k1=\E[M - код от клавиши F1
      • kD=\177 - код от клавиши Delete
      • ku=\E[A - код от клавиши "стрелка вверх"
      • ...

        Естественно, названия "свойств" (co, li, up, cl, k1, kD ...) являются стандартом, а вот их значения как раз зависят от конкретного типа терминала.
        Программа должна

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

        Если ей, например, нужно очистить экран, она должна найти "свойство" cl

        и вывести на терминал соответствующую последовательность кодов. А если на ввод от терминала пришла последовательность кодов "Esc[M", она должна найти - какому из "свойств" соответствует эта строчка и, обнаружив, что это - k1, сделать вывод, что пользователь нажал клавишу F1.

        Надо сразу заметить, что для выполнения всех этих действий существуют различные библиотеки (ncurses, slang и т.п.). Поэтому, если вы возьметесь писать свою программу (типа редактора), то совсем не обязательно самому делать подробный разбор "свойств" терминала и поиск в них различных клавиш.

        Главное, что вам нужно знать - чтобы программы (ваши и чужие) правильно работали с терминалом

        • нужно "сообщить" программам - как называется ваш терминал в "базе данных"
        • описание "свойств" этого терминала должно точно соответствовать реальным свойствам вашего терминала.



        Содержание раздела