MMC и XTerm

Наверняка многие, кто использовал mmc на *nix-системах, столкнулись с некоторыми проблемами при использовании совместно с X-Window, а именно отсутствием цветов и невозможностью использовать сочетания клавиш типа Ctrl+Alt+F5. Я решил эти проблемы для себя и хочу поделиться своим опытом.

Во-первых, цвета. MMC запускается в цветном режиме, если определена переменная окружения COLOR_TERM или текущий терминал называется "xterm-color". Так как я использую xterm, то воспользовался вторым способом - за одно многие другие программы "научились" узнавать, что им можно использовать цвета. Добавьте в файл ~/.Xdefaults строку следующего вида:

XTerm*TermName
xterm-color

Далее, клавиатура. Для того, чтобы корректно работал keypad (клавиши k0..k9, k*, k/, k+. k-) необходимо в ~/.Xdefaults добавить строки:

if ServerNumLock in XF86Config, these lines useless

XTerm*VT100*translations: #override @Num_Lock KP_Multiply: string("\033Oj")\n @Num_Lock KP_Add: string("\033Ok")\n @Num_Lock KP_Decimal: string("\033Ol")\n @Num_Lock KP_Subtract: string("\033Om")\n @Num_Lock KP_Divide: string("\033Oo")\n

!/

XTerm*VT100*translations: #override @Num_Lock KP_0: string("\033Op")\n @Num_Lock KP_1: string("\033Oq")\n @Num_Lock KP_2: string("\033Or")\n @Num_Lock KP_3: string("\033Os")\n @Num_Lock KP_4: string("\033Ot")\n @Num_Lock KP_5: string("\033Ou")\n @Num_Lock KP_6: string("\033Ov")\n @Num_Lock KP_7: string("\033Oy")\n @Num_Lock KP_8: string("\033Ow")\n @Num_Lock KP_9: string("\033Ox")\n

Теперь при нажатой клавише NumLock будут возвращаться нужные последовательности. Учтите только, что в конфигурации X-Window не должна быть выставлена опция ServerNumLock!

Теперь, нужно научить MMC должным образом реагировать на возвращаемые последовательности. Пропишите в ~/.mmc4rc команду:

CL::addkey("\033O" . chr($_ + ord('p')), "k" . chr($_ + ord('0'))) for 0..9;

или в приглашении MMC напишите

/perl {CL::addkey("\033O" . chr($_ + ord('p')), "k" . chr($_ + ord('0'))) for 0..9}

Теперь научи MMC правильно реагировать на функциональные клавиши в сочетании с различными модификаторами:

my @metaname = ("S", "M", "S-M", "C", "S-C", "C-M", "S-M-C");

for my $mod (2..8) {

CL::addkey("\033O${mod}". chr($_ + ord('P') - 1), ${metaname}[$mod - 2] ."-f". $_ ) for

CL::addkey("\033[". scalar $_+10 .";${mod}~" , ${metaname}[$mod - 2] ."-f". $_ ) for 5;

CL::addkey("\033[". scalar $_+11 .";${mod}~" , ${metaname}[$mod - 2] ."-f". $_ ) for 6..1

CL::addkey("\033[". scalar $_+12 .";${mod}~" , ${metaname}[$mod - 2] ."-f". $_ ) for 11..

}

Удобно вынести все команды MMC в отдельный модуль и подключать его из ~/.mmc4rc. У меня он называется xterm.pm, подключается (в ~/.mmc4rc) командой

use xterm;

В заключение полностью приведу содержимое моего файла Xdefaults и xterm.pm:


~/.Xdefaults ----

XTerm*VT100*numLock: true

XTerm*TermName: xterm-color

if ServerNumLock in XF86Config, these lines useless

XTerm*VT100*translations: #override @Num_Lock KP_Multiply: string("\033Oj")\n @Num_Lock KP_Add: string("\033Ok")\n @Num_Lock KP_Decimal: string("\033Ol")\n @Num_Lock KP_Subtract: string("\033Om")\n @Num_Lock KP_Divide: string("\033Oo")\n !/

mmc: CL::addkey("\033O" . chr($_ + ord('p')), "k" . chr($_ + ord('0'))) for 0..9;

XTerm*VT100*translations: #override @Num_Lock KP_0: string("\033Op")\n @Num_Lock KP_1: string("\033Oq")\n @Num_Lock KP_2: string("\033Or")\n @Num_Lock KP_3: string("\033Os")\n @Num_Lock KP_4: string("\033Ot")\n @Num_Lock KP_5: string("\033Ou")\n @Num_Lock KP_6: string("\033Ov")\n @Num_Lock KP_7: string("\033Oy")\n @Num_Lock KP_8: string("\033Ow")\n @Num_Lock KP_9: string("\033Ox")\n Ctrl Return: string("\033OM")\n

XTerm*VT100*font: -screen-fixed-medium-*-*-*-*-*-*-*-*-*-koi8-r

XTerm*VT100*deleteIsDEL: true

XTerm*VT100*background: black

XTerm*VT100*foreground: white


end ----


~/xterm.pm ----

# k0..k9

CL::addkey("\033O" . chr($_ + ord('p')), "k" . chr($_ + ord('0'))) for 0..9;

# mod-Fx

my @metaname = ("S", "M", "S-M", "C", "S-C", "C-M", "S-M-C");

for my $mod (2..8) {

CL::addkey("\033O${mod}". chr($_ + ord('P') - 1), ${metaname}[$mod - 2] ."-f". $_ ) for

CL::addkey("\033[". scalar $_+10 .";${mod}~" , ${metaname}[$mod - 2] ."-f". $_ ) for 5;

CL::addkey("\033[". scalar $_+11 .";${mod}~" , ${metaname}[$mod - 2] ."-f". $_ ) for 6..1

CL::addkey("\033[". scalar $_+12 .";${mod}~" , ${metaname}[$mod - 2] ."-f". $_ ) for 11..

}

1;


end ----

--

Andrew I Baznikin

Информация взята из connect.mud.ru Если вы имеете контакты с авторами - свяжитесь с нами пожалуйста

 

Русский !МАД-коннектор
The Russian MUD Connector
mudconnector.su

This site is powered by the TWiki collaboration platform Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.