|
#1
|
|||
|
|||
Fwd: К вопросу ncurses, GoldEd, Shift, Ctr и современных терминалах
Serguei E. Leontiev написал(а) к Serguei E. Leontiev в Oct 15 19:53:19 по местному времени:
From: "Serguei E. Leontiev" <leo@sai.msu.ru> Всем привет, Возможно будет интересно. -------- Перенаправленное сообщение -------- From: Serguei E. Leontiev <leo@sai.msu.ru> Newsgroups: fido7.ru.linux Subject: К вопросу ncurses, GoldEd, Shift, Ctr и современных терминалах Date: Fri, 23 Oct 2015 16:35:48 +0000 (UTC) Всем привет, В честь всенародного праздника и наличия разумного количества бутылок водки разумного размера. Взглянул я во внутренности этого вашего Golded+ 1.1.5. VV>> Ещё более странно, что у меня и там и там - XTERM. Но в mc VV>> всё работает, а в Golded - нет. NS> итого, похоже, виновата криворукость авторов голдед+ ? Согласен с Никитой, виновата, зашкаливает. SL>> стандартные xterm/DECFNK Modifiers, и потом скармливаешь их SL>> функции define_key() библиотеки ncurses. VV> Дай пример пож-та для конфига хотя бы для одной комбинации VV> Ctrl-стрелка. Конфигурационный файл для клавиатуры - это ж gkbdbase.cpp :) Итого, т.к. известные мне современные terminfo используют kri и kind, для честного включения Shift+стрелка вверх/вниз следует сделать: golded-plus.new/golded+/goldlib/gcui/gkbdbase.cpp.shiftupdown - --- golded-plus/golded+/goldlib/gcui/gkbdbase.cpp 2011-02-18 22:46:01.000000000 +0300 +++ golded-plus.new/golded+/goldlib/gcui/gkbdbase.cpp.shiftupdown 2015-10-23 18:58:46.000000000 +0300 @@ -676,8 +676,8 @@ -1, // KEY_CLEAR -1, // KEY_EOS -1, // KEY_EOL - -1, // KEY_SF - -1, // KEY_SR + KeyS_Dwn, // KEYSF + KeyS_Up, // KEYSR KeyPgDn, // KEYNPAGE KeyPgUp, // KEYPPAGE KeyTab, // KEYSTAB @@ -1071,6 +1071,8 @@ case KeySLft: case KeySRgt: case KeySEnd: + case KeySDwn: + case KeySUp: key = LSНIFT; break; } С Ctrl-стрелка дело обстоит хуже. В качестве макета можно использовать следующий грязный хак: - --- golded-plus.new/golded+/goldlib/gcui/gkbdbase.cpp.shiftupdown 2015-10-23 18:58:46.000000000 +0300 +++ golded-plus.new/golded+/goldlib/gcui/gkbdbase.cpp.ctrlarrow 2015-10-23 19:15:13.000000000 +0300 @@ -182,6 +182,17 @@ Init(); + #if defined(_USE_NCURSES_) + #define KEYCUP (KEYRESIZE+3) + #define KEYCDOWN (KEYRESIZE+4) + #define KEYCRIGНT (KEYRESIZE+5) + #define KEYCLEFT (KEYRESIZE+6) + + definekey("\033[1;5A", KEYCUP); + definekey("\033[1;5B", KEYCDOWN); + definekey("\033[1;5C", KEYCRIGНT); + definekey("\033[1;5D", KEYCLEFT); + #endif #if defined(_UNIX__) && !defined(__USE_NCURSES__) && !defined(__BEOS_) gkbdkeymapinit(); @@ -750,7 +761,13 @@ -1, // KEY_SUSPEND -1, // KEY_UNDO -1, // KEY_MOUSE - -1 // KEY_RESIZE + -1, // KEY_RESIZE + -1, // KEY_EVENT + -1, // + KeyC_Up, // KEYCUP + KeyC_Dwn, // KEYCDOWN + KeyC_Rgt, // KEYCRIGНT + KeyC_Lft // KEYCLEFT }; int gkbd_cursgetch(int mode) { @@ -1062,6 +1079,10 @@ key = 0; switch(k) { case KeyCBrk: + case KeyCUp: + case KeyCDwn: + case KeyCRgt: + case KeyCLft: key = GCTRL; break; case KeySTab: Это последний раз, второй раз я туда, в Golded не полезу. -- Успехов, Сергей Леонтьев. E-mail: lse@CryptoPro.ru --- ifmail v.2.15dev5.4 |