|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Zahar Kiselev 2:5030/382.1 20 Jan 2001 13:59:22 To : Dmitry Morozhnikov Subject : using ncurses -------------------------------------------------------------------------------- At 17 Jan 01 05:45:44, Dmitry Morozhnikov wrote to Ivan Shmakov: >>> Может быть есть какая то функция опрашивающая состояние ctrl и alt? Или >>> вообще не использовать getch(), а, всместо этого, использовать что то >>> более низкоуровневое? IS>> Такой возможности ни в терминальном драйвере Linux'а, ни на IS>> каком из известных мне терминалов нет. DM> А вот интересно -- насколько неплохо это добавить? То есть говоришь DM> терминалу DM> фразу -- кидай теперь кейкоды, а он и рад -- кидается кейкодами и флажком DM> нажато/отпущено. А? Такой надобности в действительности нет, если только _настроить_ имеющийся ncurses. Просто написав более полную секцию terminfo и поместив все описанные в этой секции дополнительные esc-последовательности в карту кодов клавиатуры(keymap) можно потом программно отличать и f1 от Сtrl-F1 и многое другое - большинство из того, что мы привыкли различать на клавиатуре IBM PC. Причем такая перенастройка терминала нисколько не помешает "классическим" юниксовым программам работать. Просто будем использовать разные установки переменной TERM. Что касается разнообразных терминальных программ и telnet`а, то в нем тоже легко настроить - какие коды выдавать на какие клавиши. Это настраивалось еще в telix for DOS образца 91 года. Для того, чтобы решить эту проблему - нам достаточно _договориться_ о том, какие клавиши и их комбинации будут соответствовать каким макросам ncurses - это наиболее важно, а также неплохо бы договориться - каким esc-последовательностям будут соответствовать эти макросы. В начале декабря я кидал сюда в эху пример того, как создатели QNX установили соответствие макросов ncurses и клавишных комбинаций. К сожалению я выбрал неудачный момент и в связи с многочисленными праздниками обсуждение заглохло. Тем не менее, один из читателей эхи, Александр (2:4651/51.14), несколько упорядочил опубликованную мной информацию и привел ее к более удобному для восприятия виду. Так что предлагаю всем, кто заинтересован в придании текстовому режиму Линукса привычных возможностей - продолжить обсуждение. Я так понимаю, что это наиболее важно для авторов учетно-бухгалтерского софта, который уже имеет свои традиции в области интерфейса, сложившиеся за последние 10 лет. Так может быть все-таки победим свою лень, напряжем мозги, и доделаем наконец механизм, позволяющий получить нужные нам возможности не создавая противоречий с идеологией системы? >===== Start cut [/tmp/terminfo.ted] =====< Area: RU.LINUX Date: 23 Dec 00 16:41:16 From: Alexandr Demeshko (2:4641/51.14) To : All Subj: Клавиатура и коды клавиш Доброздравствуйте, All. Я немного упорядочил информацию по сабжу. Hиже то что получилось. Есть вопросы . Всё ли правильно в первой таблице? Все ли комбинации-кандидаты перечислены во второй таблице? Какие terminfo-entr ies от qnx оставить, а какие выбросить? Чем заполнить пустые места? В таблице 1 приведены такие соответствия между клавишами и кодами terminfo, ко торые либо присутствуют в стандартной раскладке линукса и terminfo для linux, либо не присутствуют, но очевидны (кроме функциональных клавиш). Таблица 2 - комбинации клавиш, которые, по-моему, имеет смысл заводить в termi nfo. Плюс поставлен для комбинаций, описанных в таблице 1. Минус для тех, кото рые трогать не следует. Коды terminfo взяты из ранее запощенной Захаром Киселёвом таблички для qnx и немного мною подправлены. Hекоторые из ни х очень хороши, а некоторые нет. Hапример, keypad они используют, мягко говоря , странно. Вопросы проставлены в клетках, которые ещё предстоит заполнить. Таблица 3 - коды клавиш из terminfo, не упоминаемые в таблице 1. Быть может, с ледует использовать в первую очередь коды, имеющие шифтованную пару? Hа Alt-Кл авишу назначать простую terminfo-entry, а на Ctrl-Клавишу -- шифтованную? Кста ти, таких пар осталось ровно 20. Клавиш в таблице 2 -- тоже 20. *Таблица 1=============================================* Комбинация Код Код Описание клавиш term term info cap ============ ====== ==== ============================= <S-Tab> kcbt kB back-tab key <Right> kcuf1 kr right-arrow key <S-Right> kRIT %i shifted right-arrow key <PgUp> kpp kP previous-page key <PgDn> knp kN next-page key <Left> kcub1 kl left-arrow key <S-Left> kLFT #4 shifted left-arrow key <Ins> kich1 kI insert-character key <S-Ins> kIC #3 shifted insert-character key <Del> kdch1 kD delete-character key <S-Del> kDC *4 shifted delete-character key <Down> kcud1 kd down-arrow key <S-Down> kind kF scroll-forward key <End> kend @7 end key <S-End> kEND *7 shifted end key <Home> khome kh home key <S-Home> kHOM #2 shifted home key <Up> kcuu1 ku up-arrow key <S-Up> kri kR scroll-backward key <PrtScrn> kprt %9 print key <S-PrtScrn> kPRT %f shifted print key <Backspace> kbs kb backspace key *======================================================* *Таблица 2==============================* Клавиша Plain Shift Ctrl Alt ============== ===== ===== ===== ===== <Tab> - + kctab ? <Backspace> + ? ? ? <Return> - ? kent ? <PrtScrn> + + kRDO krdo <Ins> + + kil1 krmir <Del> + + kdl1 ked <Home> + + ? kbeg <End> + + kext kel <PgUp> + - kPRV kprv <PgDn> + - kNXT knxt <Up> + + ? ? <Down> + + ? ? <Right> + + kMOV kmov <Left> + + kMSG kmsg <KP/> - ? ? ? <KP*> - ? ? ? <KP-> - ? kCAN kSPD <KP+> - ? kCMD kSAV <KPEnter> - ? ? ? <KP5> kcmd ? kcpy kcrt *=======================================* *Таблица 3======================================* Код Код Описание term term info cap ====== ==== =================================== ka1 K1 upper left of keypad ka3 K3 upper right of keypad kb2 K2 center of keypad kc1 K4 lower left of keypad kc3 K5 lower right of keypad ktbc ka clear-all-tabs key kctab kt clear-tab key khts kT set-tab key kclr kC clear-screen or erase key kclo @3 close key krmir kM sent by rmir or smir in insert mode kent @8 enter/send key kf0 k0 F0 function key kil1 kA insert-line key kll kH lower-left key (home down) kmrk %2 mark key kopn %6 open key kref &1 reference key krfr &2 refresh key krst &4 restart key kslt *6 select key kbeg @1 begin key kBEG &9 shifted begin key kcan @2 cancel key kCAN &0 shifted cancel key kcmd @4 command key kCMD *1 shifted command key kcpy @5 copy key kCPY *2 shifted copy key kcrt @6 create key kCRT *3 shifted create key kdl1 kL delete-line key kDL *5 shifted delete-line key ked kS clear-to-end-of-screen key kel kE clear-to-end-of-line key kEOL *8 shifted clear-to-end-of-line key kext @9 exit key kEXT *9 shifted exit key kfnd @0 find key kFND *0 shifted find key khlp %1 help key kHLP #1 shifted help key kmsg %3 message key kMSG %a shifted message key kmov %4 move key kMOV %b shifted move key knxt %5 next key kNXT %c shifted next key kopt %7 options key kOPT %d shifted options key kprv %8 previous key kPRV %e shifted previous key krdo %0 redo key kRDO %g shifted redo key krpl &3 replace key kRPL %h shifted replace key kres &5 resume key kRES %j shifted resume key ksav &6 save key kSAV !1 shifted save key kspd &7 suspend key kSPD !2 shifted suspend key kund &8 undo key kUND !3 shifted undo key *===============================================* C уважением, Александр. --- All you need is _____ /fill in here/ * Origin: Sweet home: adem<at>argon2<dot>zp<dot>ua (2:4641/51.14) >===== End cut [/tmp/terminfo.ted] =====< IS>> Control применяется для генерации управляющих символов IS>> (англ. control codes, откуда и название) из алфавитных, так IS>> ^A == \001, ^B == \002, ..., ^Z == \032, ^[ == ESC == \033, IS>> ^6 == ^^ == \036, ^7 == ^_ == \037, и тому подобное. IS>> А F1 -- это вообще ^[[[A ;) DM> Тут усё от таблиц зависить.... IS>> а работа с клавой через raw-mode сделает твою прогу нерабочей IS>> через терминал эмулятор или телнет, чего следует избегать. DM> Hу а в качестве расширения -- неужто-ж помешало-б? DM> -- DM> DM, Дмитрий Морожников Zahar --- QDed alpha v3.57pl9.1e/Linux * Origin: (Empty...) (2:5030/382.1) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/3288e9a59c12.html, оценка из 5, голосов 10
|