#1
|
|||
|
|||
Re: Linux Golded+ 1.1.5 bugs fix ctrl/shift
Serguei E. Leontiev написал(а) к Vladislav Vetrov в Nov 15 19:54:58 по местному времени:
From: "Serguei E. Leontiev" <leo@sai.msu.ru> Привет Владислав, От 31 октября 2015 г., 0:44:56 в fido7.ru.golded ты писал: VV> Нint: огромное спасибо Сергею Леонтьеву 2:5020/400 за VV> проделанную работу и за подсказку где копать, чтобы добить до VV> конца. VV> 2All - намекните, где брать определение для комбинации VV> клавиш Shift-Ctrl-стрелки, Shift-end, Shift-home для VV> конструкции типа definekey("\033[1;5D", G_KEYCLEFT)? Я тебя уже посылал к документации на xterm и vt520. Однако есть ещё одно направление. Числа 8-9 во время просветления после всенародного праздника я заметил, что команда `infocmp -x xterm' выдаёт очень много знакомых букв: ... kDC4=\E[3;4~, kDC5=\E[3;5~, kDC6=\E[3;6~, kDC7=\E[3;7~, kDN=\E[1;2B, kDN3=\E[1;3B, kDN4=\E[1;4B, kDN5=\E[1;5B, kDN6=\E[1;6B, kDN7=\E[1;7B, kEND3=\E[1;3F, kEND4=\E[1;4F, kEND5=\E[1;5F, kEND6=\E[1;6F, kEND7=\E[1;7F, kНOM3=\E[1;3Н, kНOM4=\E[1;4Н, kНOM5=\E[1;5Н, kНOM6=\E[1;6Н, kНOM7=\E[1;7Н, kIC3=\E[2;3~, kIC4=\E[2;4~, kIC5=\E[2;5~, kIC6=\E[2;6~, kIC7=\E[2;7~, kLFT3=\E[1;3D, kLFT4=\E[1;4D, kLFT5=\E[1;5D, kLFT6=\E[1;6D, kLFT7=\E[1;7D, kNXT3=\E[6;3~, kNXT4=\E[6;4~, kNXT5=\E[6;5~, kNXT6=\E[6;6~, kNXT7=\E[6;7~, kPRV3=\E[5;3~, kPRV4=\E[5;4~, kPRV5=\E[5;5~, kPRV6=\E[5;6~, kPRV7=\E[5;7~, kRIT3=\E[1;3C, kRIT4=\E[1;4C, kRIT5=\E[1;5C, kRIT6=\E[1;6C, kRIT7=\E[1;7C, kUP=\E[1;2A, kUP3=\E[1;3A, kUP4=\E[1;4A, kUP5=\E[1;5A, kUP6=\E[1;6A, kUP7=\E[1;7A, Таким образом, у не слишком древнего ncurses можно их запросить функцией tigetstr(), если предварительно вызвать useextendednames(TRUE), к сожалению, только для БД терминалов типа terminfo. Структура имени, как я понимаю такова: DC - <Del>; DN - <Down>; END - <End>; НOM - <Нome>; IC - <Ins>; LFT - <Left>; NXT - <PgDn>; PRV - <PgUp>; RIT - <Right>; UP - <Up>. Esc-последовательности без цифры - <Shift>+<кнопка>, они и так распознаются getch(), так же как кнопки без Shift. А с цифрой, это те самые. Цифра N = 1 + (Shift1 + Alt*2 + Ctrl4 + Meta*8), т.е. так же, как в Esc-последовательностях DECFNK. Модификаторы функциональных клавиш устроены немного по иному, ncurses getch() их сам распознаёт и отображает в KEYF(X) (KEY_F0 ... KEYF63 в коде, в terminfo kfX=). Мне известно два способа отображения Fn: 1. Современный, FreeBSD консоль (teken), Терминал Apple (nsterm), gnome-terminal (gnome) и xterm R7 (xterm): X = n + 12(Shift*1 + Ctrl*2 + Alt4) 2. Ортодоксальный, устаревший, Linux консоль (linux), PuTTY (putty), rxvt (rxvt), xterm R6 (xterm-r6): X = n + 10(Shift*1 + Ctrl*2 + Alt4) По сути, он рассчитан на старые клавиатуры, а-ля XT, с 10 функциональными клавишами, а на широких современных клавиатурах <Shift>+F1 можно набрать как F11. :) Лично мне не известно, как различать такие терминалы, кроме как по списку имён. VV> В чём VV> может быть причина, что Shift-del просто удаляет мимо VV> системного буфера Linux? Вот не заметил я в Golded+ кода для взаимодействия с системным буфером (clipboard). Думаю, что твой Shift-insert к Golded+ пришёл уже в виде набираемых символов. Если очень хочется, то, как минимум, у xterm и rxvt есть соответствующие Esc последовательности. Хотя, скажем, vim взаимодействует с X11 или Windows напрямую. -- Успехов, Сергей Леонтьев. E-mail: lse@CryptoPro.ru --- ifmail v.2.15dev5.4 |