Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Ilya Anfimov                         2:5020/400     22 Jun 2001  17:53:17
 To : Cyril Zlachevsky
 Subject : Re: x-terminal
 -------------------------------------------------------------------------------- 
 
 On Fri, 22 Jun 2001 12:01:56 +0000 (UTC), 
 Cyril Zlachevsky <mazay@phone.dn.ua> wrote:
 
 >Ilya Anfimov wrote:
 >
 >> On Fri, 22 Jun 2001 11:17:04 +0000 (UTC), 
 >> Cyril Zlachevsky <mazay@phone.dn.ua> wrote:
 >> 
 >>>Есть возможность в linux'е заставить эмуляторы терминалов (пробовал и
 >>>Eterm и GNOME Terminal и xterm) воспринимать [Home] [End]?
 >>>
 >> 
 >> Есть. По крайней мере в term.
 >что за term?
 
  Что-то спать хочется :-). В xterm.
 
  Вообще  проще  всего  взять  более-менее  свежий  дистрибутив  и
 терминалки из него. В последнее время таких проблем все меньше.
 
  Hо если все-таки:
 
  Глюки могут быть на трех  этапах:  Первый  --  терминал  генерит
 всякую чушь или ничего не генерит при нажати Home etc.
 
  Второй  --  описание  терминала  (переменная  $TERM  и  то,  что
 хранится в terminfo database или /etc/termcap для  значения  этой
 переменной) не соответствует самому терминалу.
 
  Третий -- у программы сдвиг по фазе, /она не может/в принципе не
 может/ не может по такой charsequence/ делать  что-либо  полезное
 по Home/End.
  Hу,  третье  терминалом  не лечится. Можно посмотреть в man этой
 программы, узнать что там вообще должно быть по Home/End. Скажем,
 в  bash  (и  любой  другой  readline-программе)  эти  клавиши  по
 умолчанию ничего не делают.  Кривость реализации не позволяет.
 
  Первое проверяется довольно просто -- говоришь cat и жмешь  Home
 и End.
 
  Должно получится что-то вроде
 
   [ilan@mbtg2 ~]$cat
   ^[[1~
   [ilan@mbtg2 ~]$cat
   ^[[4~
 
  Конкретные  последовательности могут быть немного другими, но на
 всех vt100-образных они будут начинаться с символа ESC (^[).  Как
 это исправить, если это не так описано немного ниже.
 
  По поводу второго источника посмотри, что написано в terminfo по
 поводу твох клавиш.
 
   [ilan@mbtg2 ~]$echo $TERM
   screen
   [ilan@mbtg2 ~]$infocmp $TERM |grep khome
           khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
   [ilan@mbtg2 ~]$infocmp $TERM |grep kend
           kend=\E[4~, kf1=\EOP, kf10=\E[21~, kf11=\E[23~,
   [ilan@mbtg2 ~]$
 
  При echo $TERM должно появиться что-нибудь типа xterm. Возможно,
 что будет что-нибудь типа 'rxvt'. Hо очень  плохо,  если  напишет
 'vt100'  --  это  очень  бедный  терминал,  найди кто так странно
 установил переменную $TERM и поменяй на что-нибудь приличное.
 
  После этого проверь  соответствие  последовательностей,  которые
 делает  терминал  и  того,  что показало infocmp для khome и kend
 соответственно.
 
  Учти, что cat показывает ESC как ^[, а infocmp как \E.  Если  не
 соответствует  --  приведи в соответствие. Желательно, чтобы коды
 были как в этом примере, т.е. Home <-> \E[1~, End <-> \E[4~.
 
  terminfo приводится следующим образом:  создай  в  /etc  (или  в
 $HOME)  директорию  terminfo.src  (имя  и  место  особой  роли не
 играют).  скажи в этой директории infocmp  $TERM>$TERM.ti  Засунь
 полученный   файл   $TERM.ti  в  RCS  (или  CVS,  как  привык)  и
 отредактируй его (замени khome=... на khome=\E[1~ и  kend=...  на
 kend=\E[4~). Потом скажи:
 
   tic $TERM.ti
 
   Сделай  это от рута если хочешь, чтобы изменения затронули всех
 пользователей системы. Hе рут не сможет писать в  /usr/share/terЅ
 minfo... и положит все только тебе в ~/.terminfo.
 
  Проверь,   что  все  записалось  (infocmp  $TERM  |grep  khome).
 Впрочем, грабли тут крайне редки.
 
  Про приведение xterm:
 
  Он прилично конфигурируется своими ресурсами. man xterm, в самом
 конце -- пример того, как ремапить клавиатуру.
 
  Конкретно для этого примера надо написать
 *VT100.Translations: #override  \
         ~Shift ~Ctrl ~Meta <Key>Home: string("\033[1~")\n\
         ~Shift ~Ctrl ~Meta <Key>End: string("\033[4~")\n\
 
  Это  необходимо  поместить в один из файлов с ресурсами, которые
 будут  скормлены  xterm.  Для  каждого  пользователя  это  обычно
 ~/.Xdefaults  или  ~/.Xresources  (Обычно последний загружается в
 сервер при его запуске, а первый  смотрится  программами  если  в
 сервере,  с  которым  они работают не имеется никаких загруженных
 ресурсов. Hо раз на раз не приходится). В  каждой  системе  также
 есть   глобаьные   ресурсы,  которые  будут  загружены  в  каждый
 запускающийся Xserver, но это очень system-dependent.  Скажем,  в
 debian   это   ресурсы   из   /etc/X11/Xresources/*   в   RH   --
 /etc/X11/xinit/Xresources для startx, /etc/X11/xdm/Xresources для
 xdm, и по-видимому другие для других *dm.
 
  Так  что  найти  откуда  берутся  ресурсы  проще всего посмотрев
 последовательность скриптов запуска  X11  и  найдя  выполняющиесы
 строчки   с   командой  `xrdb'.   В  найденный  файл  и  дописать
 вышеуказанное.
 
  После  этого  стоит  проверить  базу  termcap  на   соответствие
 реалиям.  У  меня  она  всегда  соответствует, так как я на своих
 машинах получаю ее из того же файла, что и  terminfo  (с  помощью
 tic  -C).   Hо  не  могу  рекомендовать  такой же метод -- ходили
 слухи, что это может что-то сломать  в  программах,  использующих
 termcap  (то-ли  цвет  то-ли  графические  рамочки -- не помню. И
 тогда не понял как это). Мне это не актуально,  учитывая  что  во
 многих   современных   linux   практически   нигде   termcap   не
 используется и валяется он так, на всякий случай.
 
  Так  вот,  нужно  найти  описание  своего  терминала   в   файле
 /etc/termcap.   Это  описание,  в  первой  строчке которого буквы
 начинаются с начала строки (и  не  с  комментария,  т.е.  она  не
 начинается с `#') и которая содержит имя твоего терминала ($TERM)
 либо до первого символа `|' либо между такими символами.
 
  В этом описании найди определение клавиши Home  (пункт  `kh')  и
 End  (пункт  `@7').  В  нашем  случае  у  них  должны  быть те же
 значения, что и в terminfo (т.е kh=\E[1~, @7=\E[4~).  Если  такие
 пункты  не  найдены  в  описании,  то  смотри пункт с именем `tc'
 (напр. tc=xterm-xfree86), найди описание  этого  xterm-xfree86  в
 termcap  и  повтори  поиск kh и @7.  (tc=.. это команда включения
 указанного описания в текущее).
 
  Если  они  отличаются  от  требуемых,  то  исправь  (не   забудь
 сохранить предыдущую версию). Если их просто нет, то добавь.
 
  Вот,  собственно,  и  все.  Проверять работоспособность лучше на
 чем-нибудь более или менне приличном в раьоте с терминалом.
 
  Hапример, emacs или vim. Пользоваться для этого mc не стоит -- у
 него  свои  настройки, которые могут скрыть проблемы или наоборот
 не работать когда в системе все в порядке.
 
 Литература: man terminfo, man termcap, man xterm, X  Toolkit  In-
 trinsics  - C Language Interface (это по поиску ресурсов вообще о
 определению translations  в  частности)  (валяется  где-нибудь  в
 /usr/share/doc/xbooks/Xt/intrinsics.ps.gz).
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 x-terminal   Cyril Zlachevsky   22 Jun 2001 15:17:04 
 Re: x-terminal   Ilya Anfimov   22 Jun 2001 15:25:09 
 Re: x-terminal   Cyril Zlachevsky   22 Jun 2001 16:01:56 
 Re: x-terminal   Ilya Anfimov   22 Jun 2001 17:53:17 
 Re: x-terminal   Bohdan Vlasyuk   22 Jun 2001 16:12:06 
 Re: x-terminal   Cyril Zlachevsky   22 Jun 2001 17:08:46 
 Re: x-terminal   Bohdan Vlasyuk   22 Jun 2001 17:24:58 
Архивное /ru.linux/6120bcf5ae3f.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional