Как настроить работу клавиш Shift+Стрелки в Midnight Commander при запуске в Konsole
Многие пользователи KDE, запуская Midnight Commander в эмуляторе терминала Konsole, замечают, что в редакторе mcedit сочетания клавиш Shift+Стрелки не работают. Для выделения текста приходится пользоваться непривычной клавишей F3. Это неудобно хотя бы потому, что привыкая к такому выделению, при работе с другими редакторами/IDE, человек ошибается, и нажимая F3 выполняет совсем не то действие, о котором думал.
Проблема неработоспособности клавиш Shift+Стрелки в Konsole возникает из-за того, что в Konsole сочетания этих клавиш используются для других функций. Например, Shift+Up (Shift+Вверх) и Shift+Down (Shift+Вниз) используются для перемещения в истории вывода консоли.
Дело осложняется тем, что в окошках настройки Konsole использование сочетаний этих клавиш невидно.
Приведенные ниже действия справедливы для Konsole (среда KDE3) в дистрибутивах Ubuntu 7.04 и выше, в Debian Lenny 5.0.3 и 5.0.4. В других дистрибутивах Linux не проверялось.
Чтобы заставить работать выделение клавишами Shift+Стрелки, надо:
1. Открыть "Центр управления KDE", найти секцию "Комбинации клавиш", и убедиться, что сочетания Shift+Стрелки нигде не используются. Если используются - перевесить действия на другие клавиши, или если такими действиями не используетесь, вообще снять данное сочетание клавиш с данного действия.
2. Открыть в меню Konsole "Настройки" -> "Комбинации клавиш", и убедиться, что сочетания Shift+Стрелки нигде не используются.
3. Перейти в каталог /usr/share/apps/konsole. В нем есть файлы с расширением *.keytab. Это файлы настройки клавиатуры. Если в меню Konsole выбрать "Настройки" -> "Клавиатура", то можно увидеть список, соответствующий файлам *.keytab. Название каждого пункта в этом списке прописано вначале каждого файла *.keytab (в опции keyboard "...").
Внимательный человек, выполняя этот пункт, заметит одно несоответствие. В свое время, когда я пробовал решить "проблему Shift+Стрелки", я в недоумении останавливался на этом этапе, и дальше настройку сделать не мог. Проблема в том, что файлов с расширением *.keytab в директории /usr/share/apps/konsole будет на единицу меньше, чем в списке. Какого же файла нет? Оказывается, нет файла с настройками "XTerm (XFree 4.x.x)". А на каких настройках у вас стоит галочка? Даю 99% гарантии, что именно на "XTerm (XFree 4.x.x)".
Таким образом получаем, что нужного нам файла настроек, на базе которого мы будем делать свою настройку, в каталоге /usr/share/apps/konsole нет. Если поискать по всему диску еще файлы *.keytab, то окажется, что больше таких файлов нету. Так где же хранятся настройки пункта "XTerm (XFree 4.x.x)"? Оказывается, они вкомпилированы в Konsole. И лежат они в файле библиотеки /usr/lib/kde3/libkonsolepart.so.
Чтобы получить эти настройки, открываем подходящим редактором /usr/lib/kde3/libkonsolepart.so, ищем строку "XTerm (XFree 4.x.x)". И увидим текст нужных нам настроек (правда, без комментариев). У меня настройки такие
keyboard "XTerm (XFree 4.x.x)"
key Escape : "\E"
key Tab -Shift : "\t"
key Tab +Shift+Ansi : "\E[Z"
key Tab +Shift-Ansi : "\t"
key Backtab +Ansi : "\E[Z"
key Backtab -Ansi : "\t"
key Return-Shift-NewLine : "\r"
key Return-Shift+NewLine : "\r\n"
key Return+Shift : "\EOM"
key Backspace : "\x7f"
key Up -Shift-Ansi : "\EA"
key Down -Shift-Ansi : "\EB"
key Right-Shift-Ansi : "\EC"
key Left -Shift-Ansi : "\ED"
key Up -Shift-AnyMod+Ansi+AppCuKeys : "\EOA"
key Down -Shift-AnyMod+Ansi+AppCuKeys : "\EOB"
key Right -Shift-AnyMod+Ansi+AppCuKeys : "\EOC"
key Left -Shift-AnyMod+Ansi+AppCuKeys : "\EOD"
key Up -Shift-AnyMod+Ansi-AppCuKeys : "\E[A"
key Down -Shift-AnyMod+Ansi-AppCuKeys : "\E[B"
key Right -Shift-AnyMod+Ansi-AppCuKeys : "\E[C"
key Left -Shift-AnyMod+Ansi-AppCuKeys : "\E[D"
key Up -Shift+AnyMod+Ansi : "\E[1;*A"
key Down -Shift+AnyMod+Ansi : "\E[1;*B"
key Right -Shift+AnyMod+Ansi : "\E[1;*C"
key Left -Shift+AnyMod+Ansi : "\E[1;*D"
key Enter+NewLine : "\r\n"
key Enter-NewLine : "\r"
key Home -AnyMod -AppCuKeys : "\E[H".. # Эти две точечки надо бы удалить
key End -AnyMod -AppCuKeys : "\E[F".. # Эти две точечки надо бы удалить
key Home -AnyMod +AppCuKeys : "\EOH".. # Эти две точечки надо бы удалить
key End -AnyMod +AppCuKeys : "\EOF".. # Эти две точечки надо бы удалить
key Home +AnyMod : "\E[1;*H"
key End +AnyMod : "\E[1;*F"
key Insert -AnyMod : "\E[2~"
key Delete -AnyMod : "\E[3~"
key Insert +AnyMod : "\E[2;*~"
key Delete +AnyMod : "\E[3;*~"
key Prior -Shift-AnyMod : "\E[5~"
key Next -Shift-AnyMod : "\E[6~"
key Prior -Shift+AnyMod : "\E[5;*~"
key Next -Shift+AnyMod : "\E[6;*~"
key F1 -AnyMod : "\EOP"
key F2 -AnyMod : "\EOQ"
key F3 -AnyMod : "\EOR"
key F4 -AnyMod : "\EOS"
key F5 -AnyMod : "\E[15~"
key F6 -AnyMod : "\E[17~"
key F7 -AnyMod : "\E[18~"
key F8 -AnyMod : "\E[19~"
key F9 -AnyMod : "\E[20~"
key F10 -AnyMod : "\E[21~"
key F11 -AnyMod : "\E[23~"
key F12 -AnyMod : "\E[24~"
key F1 +AnyMod : "\EO*P"
key F2 +AnyMod : "\EO*Q"
key F3 +AnyMod : "\EO*R"
key F4 +AnyMod : "\EO*S"
key F5 +AnyMod : "\E[15;*~"
key F6 +AnyMod : "\E[17;*~"
key F7 +AnyMod : "\E[18;*~"
key F8 +AnyMod : "\E[19;*~"
key F9 +AnyMod : "\E[20;*~"
key F10 +AnyMod : "\E[21;*~"
key F11 +AnyMod : "\E[23;*~"
key F12 +AnyMod : "\E[24;*~"
key Space +Control : "\x00"
key Up +Shift-AppScreen : scrollLineUp
key Prior +Shift-AppScreen : scrollPageUp
key Down +Shift-AppScreen : scrollLineDown
key Next +Shift-AppScreen : scrollPageDown
key ScrollLock : scrollLock
Редактор, в котором открывается *.so должен быть действительно подходящим. Обязательно надо просмотреть, не появились ли лишние символы. У меня, например, было четыре строчки с лишними точечками (на их месте видимо стоят какие-то символы перевода строки).
4. Выдранные из библиотеки настройки помещаем в новый файл с именем mc.keytab, который создаем в директории /usr/share/apps/konsole. Если же настройки из библиотеки выдирать не пришлось, и у вас оказался *.keytab-файл с настройками XTerm (XFree 4.x.x), то просто копируем этот файл под именем mc.keytab в ту же директорию /usr/share/apps/konsole.
5. В начале файла находим опцию keyboard "..." и заменяем ее значение на другое, например
keyboard "Midnight Commander key table"
6. Находим в файле строки вида
key Up +Shift : scrollLineUp
key Prior +Shift : scrollPageUp
key Down +Shift : scrollLineDown
key Next +Shift : scrollPageDown
и комментируем их (ставим в начало каждой строки символ #).
7. В конец файла добавляем строки
# shifted cursor keys
key Up +Shift : "\EO2A"
key Down +Shift : "\EO2B"
key Right +Shift : "\EO2C"
key Left +Shift : "\EO2D"
8. Сохраняем файл, перезапускаем Konsole. После перезапуска в меню "Настройка" -> "Клавиатура" появится пункт "Midnight Commander key table". Выбираем его, и в редакторе MC заработает выделение текста с помощью Shift+Стрелки.
Хинт! Достало два раза нажимать на ESC для отмены действия или для выхода из просмотра/редактирования? Вы не пользуетесь ESC-последовательностями? В консоле вы пользуетесь только консолью и MC? Тогда это решение для вас!
Замените строчку
key Escape : "\E"
на строчку
key Escape : "\E\E"
и вы сможете работать в MC быстрее и комфортнее.