Променете екраниращата последователност, генерирана от xterm за клавишни комбинации

Моята цел е да настроя терминал, в който програмата за интерфейс на командния ред да се държи според очакванията за въвеждането от клавиатурата (програмата е написана на xharbour първоначално за Windows, но сега бих искал да я пренеса към linux). Избрах xterm за начало, тъй като е по-просто, няма нужда да деактивирате клавишните комбинации на терминала по подразбиране.

С putty повечето герои работят добре, а за тези, които не, използвам autohotkey, ahk скрипт и това върши работа. Например за Ctrl+F1: ^F1::SendInput ^[O5P

Опитах и ​​модифицирах, прекомпилирах terminfo, промених го и промених типовете клавиатури, но не успях да постигна отговор ^[O5P за натискане на Ctrl+F1 в терминала. Ако знаете някакъв начин да направите тази промяна, моля, кажете ми... Прочетох стотици страници, които уж правят това, но всички тези промени не доведоха до никакъв ефект или не доведоха до очаквания ефект.

Така че оставих да се опитвам да променя настройките на терминала, за да постигна целта си от Ctrl+F1 до ^[O5P, и опитах някои команди и програми, които биха направили нещо подобно на autohotkey:

  • xmodmap, но за клавишни комбинации не работи
  • xdotool windowactivate xyz type ^[O5P, това връща символните кодове на отделните знаци
  • xmacro, не изпраща натискания на клавиши към друг прозорец
  • ironahk, получавам грешка още в началото при опит да изпълня example.ahk и не можах да намеря командите, които исках в лекото му ръководство.
  • bind '\e[1;5P":"\e[O5P"', тук първият ключов код е това, което получавам в момента, когато напиша ctrl+f1 и след този, който искам да получа с тази комбинация. Без ефект.
  • xbindkeys + xvkbd, също не помогна.

Моля, помогнете ми, ако вече знаете, успяхте ли по някакъв начин да постигнете това (променете кода на ключа, върнат за комбинация от клавиши).

Използвам най-новите CentOS и Ubuntu за тестване.


person obeliksz    schedule 07.08.2012    source източник
comment
Не разбрах какво правите, но ако искате да промените екраниращата последователност, генерирана от xterm за ключ, трябва да промените неговата таблица за превод. Намерих хубав пример на in-ulm.de/~mascheck/X11/ xterm/XTerm   -  person Alan Curry    schedule 07.08.2012
comment
Таблицата за превод във връзката ви изглежда интересна... Трябва да открия къде е това в Centos... Вероятно го казах по сложния начин какво правя, но разбрахте какво бих искал да направя: промяна на изходна последователност, генерирана от xterm за КЛЮЧОВА КОМБИНАЦИЯ.   -  person obeliksz    schedule 07.08.2012
comment
Примерният файл, към който се свързах, е X ресурсен файл. Те обикновено се поставят в /etc/X11/app-defaults/ за конфигурация за цялата система или $HOME/.Xresources или $HOME/.Xdefaults за индивидуална потребителска конфигурация. Ако го поставите на правилното място (което и да е за Centos), файлът ще бъде зареден в началото на вашата X сесия и можете да го презаредите по средата на сесия с xrdb -merge filename   -  person Alan Curry    schedule 07.08.2012
comment
И още една опция: можете да добавите преводите към един конкретен екземпляр на xterm, като дадете ресурса на таблицата за превод като -xrm опция. Използване на малка част от примерния файл за демонстрация: xterm -xrm 'XTerm.VT100.translations: #override Ctrl<Key>Left: string(0x1b) string("b") \n Ctrl<Key>Right: string(0x1b) string("f")'   -  person Alan Curry    schedule 07.08.2012
comment
Защо не използвате последователността от знаци, която xterm всъщност генерира и не я интерпретирате във вашата програма като Ctrl+F1? Това ограничение ли е на терминалната библиотека на xHarbour?   -  person echristopherson    schedule 08.08.2012
comment
По този начин е по-лесно, в противен случай генерираната xterm последователност може да варира според дистрибуциите и бих предпочел да запазя кода с минимални промени и да имам малка настройка на системата/средата.   -  person obeliksz    schedule 09.08.2012


Отговори (2)


xterm може да бъде конфигуриран да изпраща персонализирани низове при натискане на определени клавиши чрез модифициране на неговата таблица за превод. Таблицата за превод е част от базата данни с X ресурси, управлявана от командата xrdb.

Има добър пример за персонализирана таблица за превод за xterm тук. Може да се копира във вашия $HOME/.Xdefaults или $HOME/.Xresources и ще се зареди следващия път, когато влезете. За да го заредите незабавно в текущата си сесия, xrdb -merge $HOME/.Xresources. Това няма да засегне всички xterms, които вече се изпълняват. (Може да успеете да промените таблицата за превод на работещ xterm с editres, но това е повече неприятности, отколкото си струва.)

За да предоставите персонализирана таблица за превод за един екземпляр на xterm, използвайте опцията -xrm, както в

xterm -xrm 'XTerm.VT100.translations: #override Ctrl<Key>Left: string(0x1b) string("b") \n Ctrl<Key>Right: string(0x1b) string("f")'
person Alan Curry    schedule 07.08.2012
comment
И някаква идея как да конфигурирате това за Putty? - person obeliksz; 13.08.2012
comment
По-добре го направете отделен въпрос. Не съм оптимист за отговора. xterm дължи своята гъвкавост на инструментариума Xt, който предоставя усъвършенствания език за свързване на клавиши. (xterm просто предоставя функциите за действие, в този случай низ). Никой друг графичен инструментариум не е толкова конфигурируем. Xt: голямо подобрение спрямо своите наследници - person Alan Curry; 14.08.2012
comment
stackoverflow.com/questions/11966534/ тук е отделен въпрос :) - person obeliksz; 15.08.2012

Не отговарям директно на въпроса, но ESC O 5 P е доста грешно нещо за изпращане от терминал.

Накратко: ESC O, иначе наричан SS3 съкратено от Single Shift 3, е последователност, която променя следващия изпратен знак, като го поставя в графичната област G3 вместо стандартната. Това ще промени 5 и ще изпрати директно P. Това не е и никога не е било добра идея.

Правилното нещо, което да изпратите за Ctrl-F1, би било CSI 1;5 P, форма на CSI P (което е клавишът F1) с втория параметър, зададен на 5 (което е битовата маска на модификатора).

person LeoNerd    schedule 13.08.2012
comment
Благодаря, но аз не съм професионалист по терминали и моята грижа е да направя терминала така, че xharbour програма да разбира моите клавишни комбинации, а с 1;5P не разбира. - person obeliksz; 14.08.2012