shift-tab (ISO_left_tab) auf console (tty)...
shift-tab (ISO_left_tab) auf console (tty)...
Hallo,
das ist jetzt wieder sowas, bei dem ich schon gleich gar nicht weiß, wo ich ansetzen soll...
Unter einer X-Umgebung funktioniert im Vim sowohl Tab (einrücken) wie auch Shift-Tab (ausrücken) ohne Probleme. Auf der Console allerdings sind Tab und Shift-Tab identisch belegt, d. h., beide rücken ein. Die Shift-Tab Sequenz "\E[Z" wird aber verarbeitet. Ich müsste also den keycode von Shift-Tab mit "\E[Z" belegen, oder so...
Nur wie? Wo liegen die mappings für's tty?
mutetella
das ist jetzt wieder sowas, bei dem ich schon gleich gar nicht weiß, wo ich ansetzen soll...
Unter einer X-Umgebung funktioniert im Vim sowohl Tab (einrücken) wie auch Shift-Tab (ausrücken) ohne Probleme. Auf der Console allerdings sind Tab und Shift-Tab identisch belegt, d. h., beide rücken ein. Die Shift-Tab Sequenz "\E[Z" wird aber verarbeitet. Ich müsste also den keycode von Shift-Tab mit "\E[Z" belegen, oder so...
Nur wie? Wo liegen die mappings für's tty?
mutetella
Re: shift-tab (ISO_left_tab) auf console (tty)...
(Im xterm:vim macht Shift-Tab aber auch dasselbe wie Tab,
Eventuell braucht es irgendwelche deadkeys-oder-sonstiges als Vorgabe?
Oder braucht eine Einstellung in vim?)
xev:Tab: xev:Shift-Tab / ISO_Left_Tab:
Also 0xff09 <-> 0xfe20
Ein aktuelles 'dumpkeys':
(dumpkeys zeigt eine kmap, die ja aus einer Kombination von Dateien in /usr/share/keymaps/ konstruiert wird.) (Das Alt-Tab (Meta_Tab) macht in meinem Konsolen-vim irgendwie garnix)
Das kann erweitert werden Mit dem keysym resp. dessen numerischen Wert ('man keymaps').
Nach 'dumpkeys -l', sind es bei X wie Konsole dieselben keysym-Werte (an Beispielen a=0x61, e=0x65)
Also hat keysym "ISO_Left_Tab" den numerischen Wert 0xfe20.
'dumpkeys -l' gibt mit aber für Tab 0x0009 und Meta_Tab 0x0809 (?), muß doch noch umgerechnet werden?
Für die keycodes gibt es (bei mir) +8 von Konsole zu X.
Weiter 'man loadkeys',
das führt dann zBsp. zu /etc/consoe-tools/remap / /etc/init.d/console-screen.sh: Jetzt noch etwas sed-"Magie" in remap
Alternativ nach obiger Bemerkung könnten die Templates in /usr/share/keymaps/ modifiziert werden, naja.
Es gibt wohl (noch) keine Möglichkeit, lokale Templates im 'dpkg-reconfigure console-data' einzubinden.
-------------------------------------------------
Mal damit versucht?
http://feitel.indeedgeek.de/2009/9/vim- ... ngerueckt/
Eventuell braucht es irgendwelche deadkeys-oder-sonstiges als Vorgabe?
Oder braucht eine Einstellung in vim?)
xev:Tab:
Code: Alles auswählen
KeyPress event, serial 33, synthetic NO, window 0x1400001,
root 0xc3, subw 0x0, time 443927856, (830,-106), root:(834,699),
state 0x10, keycode 23 (keysym 0xff09, Tab), same_screen YES,
XLookupString gives 1 bytes: (09) " "
XmbLookupString gives 1 bytes: (09) " "
XFilterEvent returns: False
Code: Alles auswählen
KeyPress event, serial 33, synthetic NO, window 0x1400001,
root 0xc3, subw 0x0, time 443921657, (830,-106), root:(834,699),
state 0x11, keycode 23 (keysym 0xfe20, ISO_Left_Tab), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
Ein aktuelles 'dumpkeys':
(dumpkeys zeigt eine kmap, die ja aus einer Kombination von Dateien in /usr/share/keymaps/ konstruiert wird.)
Code: Alles auswählen
keycode 15 = Tab
alt keycode 15 = Meta_Tab
altgr alt keycode 15 = Meta_Tab
control alt keycode 15 = Meta_Tab
altgr control alt keycode 15 = Meta_Tab
Das kann erweitert werden
Code: Alles auswählen
keycode 15 = Tab
shift keycode 15 = 0xfe20
alt keycode 15 = Meta_Tab
...
Nach 'dumpkeys -l', sind es bei X wie Konsole dieselben keysym-Werte (an Beispielen a=0x61, e=0x65)
Also hat keysym "ISO_Left_Tab" den numerischen Wert 0xfe20.
'dumpkeys -l' gibt mit aber für Tab 0x0009 und Meta_Tab 0x0809 (?), muß doch noch umgerechnet werden?
Für die keycodes gibt es (bei mir) +8 von Konsole zu X.
Weiter 'man loadkeys',
das führt dann zBsp. zu /etc/consoe-tools/remap / /etc/init.d/console-screen.sh:
Code: Alles auswählen
# Allow user to remap keys on the console
if [ -r /etc/console-tools/remap ]
then
dumpkeys < ${DEVICE_PREFIX}1 | sed -f /etc/console-tools/remap | loadkeys --quiet
fi
Code: Alles auswählen
# fuegt eine Zeile ein
/keycode 15 = Tab/ a \ shift keycode 15 = 0xfe20
Alternativ nach obiger Bemerkung könnten die Templates in /usr/share/keymaps/ modifiziert werden, naja.
Es gibt wohl (noch) keine Möglichkeit, lokale Templates im 'dpkg-reconfigure console-data' einzubinden.
-------------------------------------------------
Mal damit versucht?
http://feitel.indeedgeek.de/2009/9/vim- ... ngerueckt/
Funktionieren bei mir im xterm:vim wie auf der Konsole.4.1 Ein-/Ausrücken
Ist man gerade im Einfügemodus kann man einfach mit strg+T eine Stufe einrücken bzw. mit strg+D eine Stufe wieder ausrücken.
Viel flexibler ist man allerdings im Befehlsmodus. Hier lassen sich < und > verwenden ...
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
Re: shift-tab (ISO_left_tab) auf console (tty)...
Vielen Dank für Deine ausführliche Antwort!
Ich hatte vor längerem mal ein kleines Pythonskript geschrieben, das mir die keycodes liefert. Das habe ich einmal in einem xterm und einmal in der console gestartet und habe folgendes Ergebnis bekommen:
xterm:
tab: [9]
s-tab: [27, 91, 90]
console:
tab: [9]
s-tab: [9]
Das heißt ja wohl, dass die console ein s-tab überhaupt nicht erkennt und demnach auch überhaupt nicht belegen lässt...
Oder interpretiere ich das falsch?
mutetella
Bei mir eben nicht, das macht mich eben stutzig... Ich habe folgende vim-mappings, die in einem xterm einwandfrei funktionieren:rendegast hat geschrieben:Im xterm:vim macht Shift-Tab aber auch dasselbe wie Tab,...
Code: Alles auswählen
"Indent
map <Tab> >>
vmap <Tab> >
"Outdent
map <S-Tab> <<
vmap <S-Tab> <
xterm:
tab: [9]
s-tab: [27, 91, 90]
console:
tab: [9]
s-tab: [9]
Das heißt ja wohl, dass die console ein s-tab überhaupt nicht erkennt und demnach auch überhaupt nicht belegen lässt...
Oder interpretiere ich das falsch?
mutetella
Re: shift-tab (ISO_left_tab) auf console (tty)...
Habe ich ja eingeräumt, und ein solches Mapping habe ich dann wohl nicht.Ich habe folgende vim-mappings
xterm:
tab: [9]
paßt zum xev "keycode 23 (keysym 0xff09, Tab)"
Aber wie ich
s-tab: [27, 91, 90]
zu "keycode 23 (keysym 0xfe20, ISO_Left_Tab)" deuten soll?
(Nebenbei weiß ich auch nicht, wie ich 0xff09 zu 0xfe20 deuten soll. Hat vielleicht was mit UTF8 zu tun.)
Das ginge dann wie oben dargelegt in remap.und demnach auch überhaupt nicht belegen lässt...
Du solltest noch Dein dumpkey und xev mit dem meinen vergleichen/verifizieren,
ob da eventuell noch irgendwelche Verschiebungen aktiv sind.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
Re: shift-tab (ISO_left_tab) auf console (tty)...
Das bezweifel ich inzwischen. `remap` bedeutet letztlich ja, dass ich dort etwas, das bereits an etwas gemappt ist, zusätzlich an etwas weiteres binde bzw. das Mapping komplett an meine Wünsche anpasse.rendegast hat geschrieben:Das ginge dann wie oben dargelegt in remap.
Das Problem innerhalb der console (tty) ist aber offensichtlich, dass shift-tab an überhaupt nichts gemappt ist, da der keycode derselbe ist wie bei tab. Es lässt sich also schlichtweg nicht zwischen tab und shift-tab unterscheiden.
Falls ich völlig auf dem Holzweg bin, freue ich mich natürlich sehr über weitere Hilfe...
Ansonsten lebe ich vorerst damit, dass die console mir kein backtab gönnt...
mutetella
Re: shift-tab (ISO_left_tab) auf console (tty)...
hi,
Hier (wheezy) kann ich die Zeichenfolge 27,91,90 (= "\033[Z") zumindest über einen Umweg auf Shift-Tab legen. Nachdem mir dumpkeys die aktuelle Tabelle in eine Datei geschrieben hat, definiere ich (ziemlich weit unten) eine freie Funktionstaste, z.B. F40:die kann ich dann wie oben bei rendegast mit Shift-Tab verknüpfen:
das ganze mit loadkeys geladen scheint keine Wirkung zu zeigen, aber das liegt am vim. Beim Einfügen mit CTRL-V werden genau die 3 Zeichen eingefügt. Die Gegenprobe kann man mit den Cursor-Tasten machen, CTRL-V und Cursor links fügt "\033[D" ein, obwohl dumpkeys -l "0x0601 Left" dazu sagt und xev "0xff51".
Da X11 die Rohdaten von der Tastatur selbst umkodiert und das schon konnte, als es den Linux-Kernel noch nicht gab, halte ich jede Ähnlichkeit der Codes mit denen des Kernels für rein zufällig.
remap benutzt aber seinerseits loadkeys -- dem würde ich mehr Möglichkeiten zutrauen, immerhin überschreibt es direkt die Tabellen im Kernel.mutetella hat geschrieben:Das bezweifel ich inzwischen. `remap` bedeutet letztlich ja, dass ich dort etwas, das bereits an etwas gemappt ist, zusätzlich an etwas weiteres binde bzw. das Mapping komplett an meine Wünsche anpasse.rendegast hat geschrieben:Das ginge dann wie oben dargelegt in remap.
Hier (wheezy) kann ich die Zeichenfolge 27,91,90 (= "\033[Z") zumindest über einen Umweg auf Shift-Tab legen. Nachdem mir dumpkeys die aktuelle Tabelle in eine Datei geschrieben hat, definiere ich (ziemlich weit unten) eine freie Funktionstaste, z.B. F40:
Code: Alles auswählen
string F40 = "\033[Z"
Code: Alles auswählen
keycode 15 = Tab
shift keycode 15 = F40
Da X11 die Rohdaten von der Tastatur selbst umkodiert und das schon konnte, als es den Linux-Kernel noch nicht gab, halte ich jede Ähnlichkeit der Codes mit denen des Kernels für rein zufällig.
Beware of programmers who carry screwdrivers.
Re: shift-tab (ISO_left_tab) auf console (tty)...
Hmm... ich glaube, wir reden aneinander vorbei oder mir fehlt ein Teil für's Verständnis...
Die Zeichenfolge "\033[Z" auf shift-tab oder irgendeine andere Taste zu legen funktioniert IMHO deshalb nicht, weil diese Zeichenfolge, die innerhalb von X als backtab (ISO_left_tab) gehandelt wird, außerhalb von X, sprich in der console überhaupt nicht interpretiert wird. Es kommt mir so vor, als würde ein backtab innerhalb der console nicht existieren.
Wenn ich im xterm folgendes eingebewird um 3 tab-Schritte nach rechts gerückt, bei Eingabe vonum 3 tabs nach rechts und 1 tab nach links. Sowohl tab wie auch shift-tab werden innerhalb von X demnach behandelt.
Selbiges innerhalb der console ergibt und Das "\033[Z" wird demnach überhaupt nicht verarbeitet. Im Grunde genommen das, was mein kleines Pythonskript auch schon zu Tage gebracht hat: tab wie auch shift-tab werden in der console schlichtweg als tab erkannt.
Die Sequenz für ein backtab ("\033[Z") an etwas zu binden bringt demnach wohl keinen Erfolg, weil auf consolenebene diese Sequenz ignoriert wird.
mutetella
Die Zeichenfolge "\033[Z" auf shift-tab oder irgendeine andere Taste zu legen funktioniert IMHO deshalb nicht, weil diese Zeichenfolge, die innerhalb von X als backtab (ISO_left_tab) gehandelt wird, außerhalb von X, sprich in der console überhaupt nicht interpretiert wird. Es kommt mir so vor, als würde ein backtab innerhalb der console nicht existieren.
Wenn ich im xterm folgendes eingebe
Code: Alles auswählen
$ echo -e "\tT\tT\tT"
T T T
Code: Alles auswählen
$ echo -e "\tT\tT\tT\033[ZB"
T T B
Selbiges innerhalb der console ergibt
Code: Alles auswählen
$ echo -e "\tT\tT\tT"
T T T
Code: Alles auswählen
$ echo -e "\tT\tT\tT\033[ZB"
T T TB
Die Sequenz für ein backtab ("\033[Z") an etwas zu binden bringt demnach wohl keinen Erfolg, weil auf consolenebene diese Sequenz ignoriert wird.
mutetella
Re: shift-tab (ISO_left_tab) auf console (tty)...
Es gibt eventuell ein systematisches Problem,
console-tools (console-screen.sh / loadkeys / remap) <-> console-setup (setupcon / remap.inc)
Welches System bei Dir letztendlich zum Tragen kommt,
kannst Du durch Setzen von validen, aber unterschiedlichen Werten ausprobieren.
In einer wheezy-VM mit console-setup ohne console-tools, kein X.
zBsp. mit remap.inc(anschl. 'dpkg-reconfigure console-setup', kein Neustart)
kann ich per Shift-Tab die Konsole umschalten.
Nebenbei sehen in einer cached.....kmap.gz numerische Werte so aus: '[+]U+hhhh',
beim 'dumpkeys --numeric' gibt es 'U+hhhh' und '0xhhhh'.
Zu meiner "sed-Magie" bei remap oben:
Die Zeile paßte bei einem squeeze,
bei meinem wheezy sieht die bezugnehmende Zeile aber anders aus der sed-Ausdruck paßt dann (bei mir) immer noch,
müßte aber gegebenenfalls angepaßt werden, um überhaupt ausgeführt zu werden.
(abgesehen von einem validen Wert für die Tastenkombination)
Probe jeweils mit
console-tools (console-screen.sh / loadkeys / remap) <-> console-setup (setupcon / remap.inc)
Welches System bei Dir letztendlich zum Tragen kommt,
kannst Du durch Setzen von validen, aber unterschiedlichen Werten ausprobieren.
In einer wheezy-VM mit console-setup ohne console-tools, kein X.
zBsp. mit remap.inc
Code: Alles auswählen
shift keycode 15 = Incr_Console
kann ich per Shift-Tab die Konsole umschalten.
Nebenbei sehen in einer cached.....kmap.gz numerische Werte so aus: '[+]U+hhhh',
beim 'dumpkeys --numeric' gibt es 'U+hhhh' und '0xhhhh'.
Zu meiner "sed-Magie" bei remap oben:
Die Zeile paßte bei einem squeeze,
bei meinem wheezy sieht die bezugnehmende Zeile aber anders aus
Code: Alles auswählen
keycode 15 = Tab thai_phosamphao
müßte aber gegebenenfalls angepaßt werden, um überhaupt ausgeführt zu werden.
(abgesehen von einem validen Wert für die Tastenkombination)
Probe jeweils mit
Code: Alles auswählen
dumpkeys | sed -f /etc/console-tools/remap | less
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
Re: shift-tab (ISO_left_tab) auf console (tty)...
Ok, ich musste jetzt erstmal noch so einiges lesen und probieren, damit ich das alles auch halbwegs verstehe...
Jedenfalls funktioniert Eure Lösung hervorragend, hier nochmal kurz zusammengefasst:
In die `/etc/console-setup/remap.inc` habe ich folgende Zeilen eingefügt:
Damit das Mapping dann beim Booten auch geladen wird, folgende Zeile in die `/etc/default/keyboard`:
Das war's auch schon. Mein vim-mapping auf <S-Tab> funktioniert wunderprächtig!
Vielen Dank für Eure Hilfe!
mutetella
P.S. Ein junges Mädchen von vielleicht 12 Jahren wurde, nachdem sie ein Violinkonzert beendet hatte, von einem Journalisten gefragt, ob das denn nicht unglaublich schwierig sei. Ihre Antwort darauf: "Wenn man es kann ist es eigentlich ganz einfach!"
Bei Dingen wie dieser keymapping Geschichte fällt mir das immer gern ein...
Jedenfalls funktioniert Eure Lösung hervorragend, hier nochmal kurz zusammengefasst:
In die `/etc/console-setup/remap.inc` habe ich folgende Zeilen eingefügt:
Code: Alles auswählen
# define backtab / shift-tab
shift keycode 15 = F100
string F100 = "\033[Z"
Code: Alles auswählen
KMAP=/etc/console-setup/remap.inc
Vielen Dank für Eure Hilfe!
mutetella
P.S. Ein junges Mädchen von vielleicht 12 Jahren wurde, nachdem sie ein Violinkonzert beendet hatte, von einem Journalisten gefragt, ob das denn nicht unglaublich schwierig sei. Ihre Antwort darauf: "Wenn man es kann ist es eigentlich ganz einfach!"
Bei Dingen wie dieser keymapping Geschichte fällt mir das immer gern ein...