2

После нескольких часов поисков я все еще не могу понять, как это сделать.

Настроить:

  • Французская клавиатура Windows Comfort Curve 2000 (именно поэтому я хочу переназначить)
  • Ноутбук HP Pavilion dm4 под управлением Kubuntu 12.04.
  • Emacs 24.3.1 cassou-emacs-precision

Я просто хочу, чтобы клавиши ⊞ Win (+ левая клавиша Alt, если это проще) отображались на мета- ключ в Emacs. Я перепробовал все, что мог придумать - xev говорит мне, что ключи сопоставлены с META_L и META_R с точки зрения KDE - с какой стати у меня так много проблем?

Я видел много материала о переназначении "mac -..." и "w32 -...", но у меня нет ни Mac, ни Windows. Почему Alt не подходит для моего ◆ Meta? Alt Gr (справа Alt) используется для большого количества букв на французской клавиатуре, и изменить это нецелесообразно, и я хочу, чтобы ◆ Мета- клавиша находилась на правой стороне клавиатуры.

Поэтому я провел дальнейшее исследование: использование Konsole и emacs -nw не работает, но если я изменю это либо с помощью приложения управления клавиатурой KDE, либо с помощью xmodmap то оно будет работать с Emacs в режиме графического интерфейса. Win_R-w тогда Ch l дает:

Mw Ch l

для Emacs в режиме GUI и

ESC [> 0; 1 1 5; 0 cw Ch l

в emacs -nw в консоли.

1 ответ1

1

Похоже, это связано с тем, как Konsole обрабатывает мета-ключ и требует исправления исходного кода для исправления. (В дальнейшем «a» - это исправленная версия, а «b» - исправленная.)

--- a/konsole/konsole/TEmuVt102.cpp
+++ b/konsole/konsole/TEmuVt102.cpp
@@ -945,7 +945,8 @@  void TEmuVt102::onKeyPress( TQKeyEvent* ev )
                                      encodeMode(MODE_AppScreen     , BITS_AppScreen ) + // VT100 stuff
                                      encodeStat(TQt::ControlButton , BITS_Control   ) +
                                      encodeStat(TQt::ShiftButton   , BITS_Shift     ) +
-                                     encodeStat(TQt::AltButton     , BITS_Alt       ),
+                                     encodeStat(TQt::AltButton     , BITS_Alt       ) +
+                                     encodeStat(TQt::MetaButton        , BITS_Alt   ),
                           &cmd, &txt, &len, &metaspecified ))
 //printf("cmd: %d, %s, %d\n",cmd,txt,len);
   if (connected)
@@ -977,7 +978,7 @@  void TEmuVt102::onKeyPress( TQKeyEvent* ev )
     scr->setHistCursor(scr->getHistLines());

   if (cmd==CMD_send) {
-    if ((ev->state() & TQt::AltButton) && !metaspecified ) sendString("\033");
+    if (((ev->state() & TQt::AltButton) || (ev->state() & TQt::MetaButton)) && !metaspecified ) sendString("\033");
     emit sndBlock(txt,len);
     return;
   }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .