|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/6120bcf5ae3f.html, оценка из 5, голосов 10
|