Vielen Dank für Eure guten Erklärungen... damit hab's dann auch ich kapiert
!
Dass Python bereits vor der Ausführung einer Funktion die Synthax prüft, wusste ich nicht.
Was würdet ihr mir zur Lösung der beiden folgenden Probleme raten:
Um ein erweitertes Eingabefeld, quasi ein 'ext_input()', zu realisieren, gehe ich wie folgt vor:
Code: Alles auswählen
___
| stdin: '' -> warte
| Tastatureingabe: 'a'
| ___
___
|stdin: 'a' -> übersetze Zeichen
| lese 'a', übersetze als 'a', zeige 'a' an
| sende '\033[?6n'
| __
___
|stdin: '\x1b[?20;1R' -> übersetze Zeichen
| lese '\x1b' bis 'R', übersetze als (20, 1)
| __
___
|stdin: '' -> warte
| Eingabe aus Zwischenspeicher: 'wort'
| __
___
|stdin: 'wort\x1b[?20;2R' -> übersetze Zeichen
| lese 'w', übersetze als 'w', zeige 'w' an
| sende '\033[?6n'
| __
___
|stdin: 'ort\x1b[?20;2R\x1b[?20;3R' -> übersetze Zeichen
| lese 'o', übersetze als 'o', zeige 'o' an
| sende '\033[?6n'
| __
___
|stdin: 'rt\x1b[?20;2R\x1b[?20;3R\x1b[?20;4R' -> übersetze Zeichen
| lese 'r', übersetze als 'r', zeige 'r' an
| sende '\033[?6n'
| __
...
Nachdem also etwas aus dem Zwischenspeicher eingefügt wird (oder auch dann, wenn Tasten sehr, sehr schnell hintereinander eingetippt(-trommelt) werden) erhält man erst wieder einen xterm-Report, wenn die Zeichen zuvor abgearbeitet sind.
Mein Ansatz:
- Alle Zeichen bis zum xterm-Report auslesen, den Report auswerten und die zwischengespeicherten Zeichen dann wie 'stdin' behandeln und danach wieder auf 'stdin' wechseln.
Mit anderen Worten: Zwischen jedes anzeigbare Zeichen einen xterm-Report einfügen. - Auf die ständige (teure) xterm-Abfrage verzichten, die Koordinaten einmal abfragen und intern aktuell halten.
Wie auch immer ich mich entscheide, ich muss entweder den Zwischenspeicher oder die Koordinaten auf Modulebene ablegen.
Folgende Möglichkeiten fallen mir ein:
- Ich verzichte auf Zuweisungen innerhalb der Funktionen, die Zwischenspeicher und/oder Koordinaten aktualisieren.
- Ich verwende ein dictionary.
- Ich verwende zum Zwischenspeichern ein "echtes" file.
Ich denke mal, die Cursorposition einmalig abzufragen, intern aktuell zu halten und dafür ein dictionary zu verwenden ist am sinnvollsten.
Was meint ihr?
mutetella