FreeBSD: не работающие клавиши delete и backspace. Часть #1


Проблема с правильным функционированием клавиш delete и backspace интересует многих пользователей Linux. Это связано с нестандартным поведением этих клавиш, нажимая которые мы хотим увидеть совершенно иное действие.

Перевод.

Цель данного документа сделать правильный функционал клавиши <—- (то есть Backspace на клавиатуре), чтобы стереть влево, и клавиши Delete стирания под курсором. Кажется все дистрибутивы Linux уже решили данную проблему. Однако до сих пор много людей ищут в интернете решение, и поэтому представленная здесь информация, я думаю будет применима и к другим разновидностям UNIX.

Как такового четкого решения проблемы нет, но есть довольно хорошие [s]костыли[/s] обходные пути. Все что необходимо, сказать Xterm как обращаться с ключами, а затем сообщить другим приложениям об этом (то есть как Xterm обрабатывает ключи). База данных TERMINFO содержит описание того, как все виды терминалов обрабатывать ключи. Приложения смотрят на переменную TERM, а затем ищут соответствующую базу данных для значения определенного ключа. Например, клавиша со стрелкой влево, и находит строку соответствующую ей. Это означает, что эти строки в базе данных лучше соответствующих текущих настроек XTerm. Это влечет за собой изменение записи в Terminfo XTerm.

Это кратко, и теория.

В данной таблице приведен список того, что необходимо изменить в различных средах:

Прежде чем что то менять, обязательно делайте резервные копии оригинальных файлов!

Terminfo

Сначала выясним, является ли запись TERMINFO для XTerm в соответствии с вашими настройками XTerm:

infocmp | grep kbs

эта команда должна возвратить строку, которая включает в себя kbs=\177. Это означает DEL (или ^?) или клавишу возврата, это то что нам нужно.

infocmp | grep kdch1

команда должна возвратить строку с kdch1=\E[3~ . Это означает, что \Е[3~ отображает клавишу удаления. Вы можете увидеть kbs=^H и/или kdch1=\177, или там не будет kdch1 вообще. Вы можете либо изменить запись Terminfo, как описано на странице устранения неисправностей (просто изменение или добавление kdch1=\E[3~ и kbs=\177, но сначала сделайте резервную копию!) Поместите файл в ~/.terminfo/x/xterm (для тестирования) и выполните команду:

export TERMINFO=~/.terminfo

и/или для Tcsh:

setenv TERMINFO ~/.terminfo

Убедитесь, что переменная TERM установлена в XTerm:

echo $TERM

должно возвратить "Xterm". Если это так (скрестите пальцы:-) ), то от рута скопируйте этот файл сюда:

/etc/terminfo/x/xterm

(для debian) или

/usr/lib/terminfo/x/xterm

(для RedHat, Slackware).

Сделайте резервные копии оригиналов, и проверяйте работоспособность, прежде чем заменять какие либо файлы!

Xterm

Xterm (и ему подобные) требует совсем немного конфигурации. В /etc/X11/Xresources и ~/.Xdefaults /etc/X11/Xresources или ~/.Xdefaults (или там где он связан с другими Xresources) добавьте строку:


*VT100.Translations: #override \
              <Key>BackSpace: string(0x7F)\n\
              <Key>Delete:    string("\033[3~")\n\
              <Key>Home:      string("\033[1~")\n\
              <Key>End:       string("\033[4~")
*ttyModes: erase ^?

Rxvt использует только Xresources, если он собран с помощью этой опции. Так как rxvt использует Readline, чтобы переходить в начало и в конец вам придется редактировать .inputrc (см. Bash раздел).

Redhat пользователи могут скачать SRPM (исходники) и скомпилировать rxvt у себя с этим feature.h, обеспечивая правильные сочетания клавиш.

Добавление xterm или nxterm перед *vt100.translations
позволяет сделать настройки специфичные для XTerm или nxterm. Но иногда это не работает как надо, поэтому пробуйте использовать оба nxterm*VT100.Translations и xterm*VT100.Translations
Кстати, я говорил вам что Ctrl-v эта последовательность посылается shell? Попробуйте Ctrl-v-Delete, это должно возвратить ^[[3~ в XTerm (попробуйте еще с помощью ESC, и вы увидите ^[[3~, что соответствует для чтения строки приложений, а \033 для Xresources).

1. Синтаксис Xresources файлов очень строг, убедитесь что вы не оставляете пробелы после обратной косой черты в каждой строке. Также следите за символом новой строки (\n\), его не должно быть на последней строке записи.

2. Секции имеют названия, если вы используете только *VT100.Translations он будет работать для всех XTerm и ему подобных.

3. Для получения информации о Xresources и других X связанных с ним, обратитесь к

man X

X

Если вы используете XFree86, убедитесь что вы включили расширения XKB в /etc/X11/XF86Config и /etc/X11/XF86Config. Это должно быть включено по умолчанию, так что я думаю с этим все будет хорошо. Обратите внимание на различные раскладки клавиатуры. Теперь XFree86 будет транслировать консоль, и все должно работать в X. Если у вас есть проблемы, или хотите возиться с дополнительными символами, создайте Xmodmap. Кроме того, если вы хотите набирать специальные символы в X, xmodmap также может быть использован для настройки функциональных клавиш. Это хорошо описано на страницах справки (man xmodmap)

Убедитесь, что следующие строки присутствуют в Xmodmap:

keycode 22 = BackSpace
keycode 107 = Delete

Обратите внимание, что коды клавиш в X не такие как в VT. Используйте

showkey

чтобы посмотреть коды клавиш генерируемые клавиатурой в VT и xev в X.
Существует отличный GUI для конфигурации клавиатуры в иксах: xkeycaps

Другой способ генерации специальных символов в X (без использования xmodmap) является в определении Compose-ключа (для использования в качестве «мертвого ключа») в XF86Config в разделе Keyboard:

RightCtl        Compose

Теперь у вас есть Compose-ключ с такими же свойствами как и в VT разделе. Не забудьте установить переменную окружения

LC_CTYPE=iso-8859-1

(см VT опции). Обратитесь к man XF86Config, если вы хотите узнать больше.

Примечание: это кажется не работает в эмуляторе терминала rxvt.

Кроме того, владельцы windows клавиатур (с дополнительными клавишами, это не обязательно должна быть M$ natural клавиатура) могут включить XKEYBOARD расширение (включено по умолчанию) в XF86Config и раскомментировать строку (следуйте инструкциям в файле):

XkbModel    "microsoft"

Теперь вы можете использовать кнопку с флагом windows, чтобы использовать какие нибудь экзотические действия, например нажмите на нее в сочетании с какой либо другой клавишей (явный недостаток заключается в том, что нет никакой логики в расположении специальных символов)

Еще один способ использования «мертвых клавиш» в X является установка модифицированной версии libx11, которая включает в себя поддержку мертвых клавиш (прозрачный для всех приложений). Во-первых, скачайте модифицированную версию libx11 (убедитесь, что вы скачиваете правильную версию, если вы используете Glibc заменить этим libx11, ELF-libc5 и ELF-libc6). Теперь отключите ХКВ расширение для xfree86 (отредактируйте XF86Config и запустите xmodmap с параметрами на Xmodmap файл с мертвыми клавишами dead_acute, dead_grave, dead_cedilla, dead_ogonek и Multi_keys тоже.

Особым случаем является использование XDM или Slim, вам нужно отключить ХКВ из /etc/X11/xdm/Xservers файла, передавая параметр -kb к X серверу таким образом:

:0 local /usr/X11R6/bin/X -kb

и затем в файле /etc/X11/xdm/Xsetup_0 добавьте строку для загрузки Xmodmap:

if [ -r /etc/X11/xinit/.Xmodmap ]; then
        /usr/X11R6/bin/xmodmap /etc/X11/xinit/.Xmodmap
fi

Теперь символы доступны через клавишу AltGr, неработающие клавиши также могут работать в XDM.

Продолжение следует.


Оцените статью или поделитесь ей в соцсетях:

+ 0 | - 0

Рекомендуемые статьи:


Комментарии

Нет комментариев к данной статье.

Оставьте комментарий!

Поля обозначенные как * требуются обязательно. Перед постингом всегда делайте просмотр своего комментария.