|
#1
|
|||
|
|||
curses, GoldEd, Shift, Ctr и современных терминалах
Serguei E. Leontiev написал(а) к All в Nov 15 05:48:12 по местному времени:
From: "Serguei E. Leontiev" <leo@sai.msu.ru> Всем привет, После праздника 7 ноября, я вспомнил о своём обещании Владимиру Фёдорову сделать настройки Терминала для OSX. При их изготовлении я таки выяснил, что ещё 10 лет назад в terminfo стали хранить так называемые "определяемые пользователем" возможности kUP5, kDN5, kRIT5 и kLFT5, век живи, век учись. Кроме того, заметил ещё парочку несколько ошибок в gkbdbase.cpp Как результат, получилось немного больше исправлений: alt-ctrl-shift.patch в папке на Яндекс.Диске README-utf8.txt # vim:set sw=4 ts=8 tw=72 fileencoding=utf8::Кодировка:UTF-8[АБЁЪЯабёъя] Описание файлов каталога golded+/contrib/Unix 1. alt-ctrl-shift.patch - Исправления работы с curses для golded+: 1.1 Исправлена ошибка распознавания <Alt>+<BackSpace> и <Alt>+<Enter>, согласно `man getch', KEYBACKSPACE и KEYENTER могут возвращаться вместо '\b' и '\r'. 1.2 Исправлена обработка ошибки для не поддерживаемых символов (клавиш) curses, раньше выскакивал 'Ъ'. 1.3 Поддержка клавиш <Shift>+<стрелка вверх/вниз> определённых возможностями terminfo (capname): kri/kind (scroll-backward/forward key). ПРЕДУПРЕЖДЕНИЕ: Проверить поддержку и соответствие настроек терминала и его описания можно выполнить так: $ infocmp $TERM | egrep "^[^[:space:]]|k(LFT|RIT|ri|ind)=" # Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-256color xterm-256color|xterm with 256 colors, kEND=\E[1;2F, kНOM=\E[1;2Н, kIC=\E[2;2~, kLFT=\E[1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\E[1;2C, kb2=\EOE, kind=\E[1;2B, kmous=\E[M, knp=\E[6~, kpp=\E[5~, kri=\E[1;2A, mc0=\E[i, mc4=\E[4i, mc5=\E[5i, meml=\El, $ od -c ^[[1;2D^[[1;2C^[[1;2B^[[1;2A 0000000 033 [ 1 ; 2 D 033 [ 1 ; 2 C 033 [ 1 ; 0000020 2 B 033 [ 1 ; 2 A \n 1.4 Поддержка описаний terminfo/ncurses <Alt/Ctrl/Shift>+Fn клавиш. Поддерживаются, как современные терминалы: xterm R7, gnome-terminal, FreeBSD консоли, естественно в рамках реализации самих терминалов и описания в termcap/terminfo. Так и старые, добрые, ортодоксальные терминалы: xterm R6, urxvt, Linux консоль и PuTTY, которые отображали <Shift>+F1-F10 на F11-F20 и <Ctrl>+<Shift>+F1-F10 на <Ctrl>+F11-F20. ПРЕДУПРЕЖДЕНИЕ: При типичных вариантах использования некоторых терминалов переменная окружения TERM может не соответствовать типу терминала. Часто для gnome-terminal, PuTTY и консоли FreeBSD назначен тип терминала xterm, описание которого им не полностью соответствует, клавишам gnome-terminal соответствует TERM=gnome, gnome-256color и др., а PuTTY соответствует TERM=putty, putty-256color или xterm-r6. Проверить поддержку и соответствие настроек терминала описанию terminfo можно выполнить так: $ infocmp $TERM | egrep "^[^[:space:]]|kf[1-9][0-9]*=" # Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-256color xterm-256color|xterm with 256 colors, kcuu1=\EOA, kdch1=\E[3~, kend=\EOF, kent=\EOM, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P, kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~, kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R, kf28=\E[1;5S, kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~, kf32=\E[19;5~, kf33=\E[20;5~, kf34=\E[21;5~, kf35=\E[23;5~, kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q, kf39=\E[1;6R, kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~, kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~, kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q, kf51=\E[1;3R, kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~, kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~, kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~, kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\EOН, kich1=\E[2~, $ od -c # Проверяем F5, <Shift>+F5, <Alt>+F5 ^[[15~^[[15;2~^[[15;3~ 0000000 033 [ 1 5 ~ 033 [ 1 5 ; 2 ~ 033 [ 1 5 0000020 ; 3 ~ \n 1.5 Поддержка <Alt/Ctrl/Shift>+<стрелок> для X11 R7 (xterm R7, gnome-terminal и других терминалов поддерживающих DECFNK, vt520 1994 года издания). Без использования базы описаний terminfo, функцией define_key() определяются соответствующие Esc-последовательности. Кроме того, для не слишком древних ncurses, проверяется наличие User-Defined возможностей терминала вида k{UP|DN|RIT|LFT}{число}, при наличии используются. Поддерживаются только чистые модификаторы, комбинации модификаторов <Ctrl>+<Shift>+<стрелка> просто игнорируются, т.к. поддержка таких комбинаций требует изменений за пределами кода работы с ncurses. Она несложная, но я не могу их оттестировать. 1.6 Исправлен выход за границу массива scancode_table[]. 1.7 Поддержка <Alt>+<национальная буква> для стандартных белорусских, русских и украинских ЙЦУКЕН клавиатур в том виде, как они даны в описании Golded+, т.е. <Alt>+<соответствующая ASCII клавиша>. Нестандартные и фонетические клавиатуры, такие как ЯВЕРТЫ не поддерживаются, их поддержка требует соответствующей настройки xterm для X11 или Терминала для OS X. ПРЕДУПРЕЖДЕНИЕ: Известные мне версии luit некорректно перекодирую UTF-8 Esc последовательности, соответствующие <Alt>+<национальная буква>, т.е. при использовании luit их следует преобразовывать настройками терминала. $ od -c ^[й 0000000 033 320 271 \n 0000004 $ printf "\033й" | od -c 0000000 033 320 271 0000003 $ printf "\033й" | ../../../coding/luit-20150706-x86_64/luit -encoding KOI8-R -c | od -c 0000000 033 320 342 225 247 0000005 1.8 Применение (ЭТОТ АБЗАЦ СЛЕДУЕТ УДАЛИТЬ, после внедрении исправления в основной код Golded+): Создать в каталоге golded+/contrib каталог Unix и скопировать туда все файлы. $ cd golded+ $ patch -p0 < contrib/Unix/alt-ctrl-shift.patch $ ln -s ../../contrib/Unix/mygolded.h goldlib/gcfg/mygolded.h #Опционально $ make 2. putty-0-65.ti - расширенное terminfo описание терминала putty 0.65 2.1 putty и putty-256color описание терминала с возможностями terminfo (capname): kri/kind (scroll-backward/forward key). 2.2 Применение в качестве собственного описания обычного пользователя (не root): $ mkdir $НOME/.terminfo $ tic -x contrib/Unix/putty-0-65.ti $ TERM=putty-256color; export TERM 3. GED-KOI8-U-strict.terminal - файл описания Терминала для OS X 10 (у меня не было возможности его проверить на предыдущих версиях). Дополнительно cvt-GED-terminal.sh его преобразует в файлы GED-{KOI8-U,UTF-8}-{strict,reverse,combined}.terminal 3.1 Определяет Esc-клавиши согласно TERM=xterm (xterm R7, DECFNK) с преобразованием <Alt>+<национальная буква> для стандартных белорусских, русских и украинских ЙЦУКЕН клавиатур. 3.2 Клавиша "Ins" эмулируется , либо F13 с модификаторами, либо на узких клавиатурах, <control>+<option>+I без модификаторов. 3.3 GED-*-reverse.terminal - меняет местами "option" и "control" таким образом, что бы передвижение по словам было таким же как в других приложениях OS X. Возможно, предпочтительнее для тех, кто использует Golded+ только под OS X. 3.4 GED-*-combined.terminal - <option>+<стрелка> и <control>+<стрелка> порождают одинаковые действия. Возможно, предпочтительнее для тех, кто не использует комбинаций Golded+ <Alt>+<стрелка>. 3.5 GED-UTF-8-*.terminal - предназначен для запуска ged под screen или luit. Например, для использования белорусского языка, т.к. в Терминал OS X нет поддержки кодировки KOI8-RU. 3.6 Применение: $ open contrib/Unix/GED-KOI8-U-strict.terminal или открыть в Finder. 4. koi8rxterm-phonetic.sh - макет запуска koi8rxterm с заменой <Alt>+<национальная буква> для одного из вариантов русской фонетической клавиатуры ЯВЕРТЫ. 5. make-alt-translations.sh - Построение содержимого ресурса VT100.translations для xterm 6. Каталог MacOSX содержит собранный gedlnx для OS X 10 (ЭТОТ АБЗАЦ СЛЕДУЕТ УДАЛИТЬ, после внедрении исправления в основной код Golded+). 7. Каталог Linux содержит собранный gedlnx для CentOS 7 (ЭТОТ АБЗАЦ СЛЕДУЕТ УДАЛИТЬ, после внедрении исправления в основной код Golded+). 8. Каталог FreeBSD содержит собранный gedlnx для FreeBSD 9/10 (ЭТОТ АБЗАЦ СЛЕДУЕТ УДАЛИТЬ, после внедрении исправления в основной код Golded+). -- Успехов, Сергей Леонтьев. E-mail: lse@CryptoPro.ru --- ifmail v.2.15dev5.4 |