Tangentbindningar i terminalen

Hur Terminal använder tangentbindningar

Introduktion
Terminal använder *.keytab-filer för att översätta tangentkombinationer till kontrolltecken och escape-följder som skickas till skalet eller till interaktiva program (typiskt program som använder den alternativa skärmbufferten, t.ex. vim, less, screen) som kör i ett skal.
Användare kan anpassa tangentbindningarna i Terminal med Tangentbindningseditorn. En tangentkombination kan ställas in att skicka en specifik kontroll- eller escape-följd till terminalen.
Tangentbindningseditorn kan öppnas med menyalternativet Inställningar Redigera nuvarande profil, och gå till fliken Tangentbord. Där listas de tangentbindningsscheman som normalt levereras med Terminal.

Tangentkombinationer och lägen
Tangentkombinationer följer mönstret:

Tangent (+|-) Lägen

exempelvis:

Up+Shift+AppScreen
Down+Shift-AppScreen
Space+Ctrl

Tangentnamn definieras i deklarationsfilen qnamespace.h, med prefixet Qt::Key_ borttaget. Titta på Qt::Key enumeration i -dokumentationen för en lista med tangentnamn.
Ett + som föregår ett lägesnamn betyder att läget används. För en väljartangent betyder det att den hålls nere, medan för alla andra lägen betyder det att det specifika läget är i kraft (dvs. aktivt). Exempelvis betyder +Ctrl att tangentkombinationen bara fungerar om -tangenten hålls nere.
Ett - som föregår ett lägesnamn betyder att läget återställs. I huvudsak är det motsatsen av att placera + framför ett lägesnamn, och för en väljartangent betyder det alltså att tangenten inte hålls nere, medan för alla andra lägen betyder det att det specifika läget är inaktivt. Exempelvis betyder -Ctrl att tangentkombinationen bara fungerar om -tangenten inte hålls nere.
Om ett lägesnamn inte finns med i en tangentkombination ignoreras dess tillstånd.
Tangentbindningslägen som stöds listas nedan:
Alt, Ctrl, Shift 	 En eller flera av dessa lägen kan användas i en tangentkombination. Om någon av dem är aktiv använder tangentkombinationen respektive väljartangent, och vice versa om den är inaktiv.
AnyModifier 	 Om läget är aktivt, använder tangentkombinationen vilken som helst av väljartangenterna (någon av de tre tidigare väljartangenterna), och vice versa om det är inaktivt.
Ansi 	 Om läget är aktivt, skickar Terminal ANSI escape- och kontrollföljder.
Om läget är inaktivt, skickar Terminal VT52 escape- och kontrollföljder.
AppScreen 	 Om läget är aktivt, påverkar tangentkombinationen bara interaktiva program som använder den alternativa skärmbufferten.
Om läget är inaktivt, påverkar tangentkombinationen bara terminalen när den använder den normala skärmbufferten.
Terminal använder sig av två skärmbuffertar:
Den normala skärmbufferten (förvald): Låter dig rulla bakåt för att titta på tidigare utmatade rader. Den är den normala bufferten som oftast används för att utföra kommandon, etc.
Den alternativa skärmbufferten: Terminalen byter till denna buffert när ett interaktivt program körs (t.ex. less, vim, screen, tmux... etc.).
KeyPad 	 Om läget är aktivt, använder tangentkombinationen en tangent på det numeriska tangentbordet. Läget är användbart för att skilja på tangenter på tangentbordet och tangenter på det numeriska tangentbordet. Exempelvis kan två separata tangentkombinationer ställas in när Num Lock är på, en med tangenten betecknad med 1 på tangentbordet (oftast under tangenten F1) och den andra med tangenten betecknad med 1 på det numeriska tangentbordet. Samma koncept gäller när Num Lock är av för piltangenterna och tangenterna End, Home, etc. på det numeriska tangentbordet.
AppCursorKeys 	 Läget implementerar VT100 piltangentläget (DECCKM). Det bestämmer escape-sekvenser som varje piltangent (upp, ner, höger, vänster) skickar, beroende på om läget är aktivt eller inaktivt.
Normalt följer Terminal beteendet hos XTerm att behandla tangenterna Home och End som piltangenter med avseende på DECCKM.
AppKeyPad 	 Om läget är aktivt, fungerar bara tangentkombinationen när det numeriska tangentbordet är i programläge (DECKPAM).
Om läget är inaktivt, fungerar bara tangentkombinationen när det numeriska tangentbordet är i numeriskt läge (DECKPNM).
NewLine 	 Om läget är aktivt, skickar Retur (Enter)-tangenten på tangentbordet både kontrolltecknen vagnretur "\r" och nyrad "\n".
Om läget är inaktivt, skickar Retur-tangenten bara vagnretur "\r".
Samma sak gäller för tangenten Enter på det numeriska tangentbordet.
Läget emulerar LNM - Line Feed/New Line.
Observera att varje kombination av tangent och läge (aktivt/inaktivt) måste vara unikt. Betrakta exempelvis följande två regler:
A+Shift : A
a : a
Terminal accepterar inte regeln för den lilla bokstaven a, utan -Shift måste läggas till i regeln för att få den att fungera.

Utmatningsfältet
I utmatningsfältet kan escape-sekvenser eller kontrolltecken som du vill att Terminal ska skicka till terminalen när den associerade tangentkombinationen används.
Du kan också använda något av följande nyckelord, som vart och ett har en särskilt betydelse i Terminal:
scrollUpLine : rulla upp en rad i bufferten med skalhistorik
scrollUpPage : rulla upp en sida i bufferten med skalhistorik
scrollDownLine : rulla ner en rad i bufferten med skalhistorik
scrollDownPage : rulla ner en sida i bufferten med skalhistorik
scrollUpToTop : rulla upp till början av bufferten med skalhistorik
scrollDownToBottom : rulla ner till slutet av bufferten med skalhistorik
Du kan också använda strängar med C-strängsyntax, och följande Escape-sekvenser kan användas:
\E : Escape
\\ : Bakstreck
\" : Dubbla citationstecken
\t : Tabulator
\r : Vagnretur
\n : Nyrad
\b : Baksteg
\xHH : där HH är två hexadecimala siffror
Detta kan användas för att skicka -kontrolltecken, t.ex. \x00 som är tecknet NUL.

Andra systemresurser
Det finns andra systemresurser som kan påverka terminalens tangentbindningar:
Se databaserna terminfo eller termcap för förväntade escape-sekvenser och kontrolltecken som varje tangentkombination förväntas skicka.
Troligtvis har systemet andra tangentbordsdatabaser som också måste vara synkroniserade (t.ex. /etc/inputrc och readline för skalet BASH) eftersom de påverkar åtgärderna (interaktionen) kopplade till tangentkombinationer.

Ytterligare läsning
För mer information om escape-sekvenser och kontrolltecken, se följande dokumentation:
VT100 användarguide
VT102 användarguide
Den omfattande och oumbärliga dokumentationen XTerm Control Sequences