172 lines
5.6 KiB
Plaintext
172 lines
5.6 KiB
Plaintext
|
|
Input-fields
|
|
============
|
|
|
|
1. Erstellen und installieren
|
|
-----------------------------
|
|
|
|
(make-input-field x-dim y-dim) -> <input-field>
|
|
|
|
erstellt ein Input-field mit x-dim Spalten und y-dim Zeilen.
|
|
Make-input-field können weitere optinale Parameter übergeben
|
|
werden:
|
|
|
|
(make-input-field x-dim y-dim
|
|
[default-text
|
|
[behavior
|
|
[insert-active
|
|
[x-scroll-enabled
|
|
[y-scroll-enabled]]]]])
|
|
|
|
default-text: ist ein String, der am Anfang und nach einem Reset (s.u.)
|
|
der Inhalt des Input-fields ist.
|
|
(Default: "")
|
|
behavior: ist eine Liste von Paaren. Der car eines solchen Paares
|
|
ist die Nummer eines Zeichens oder einer Tastenkombination,
|
|
wie sie von wgetch (aus ncurses) zurückgegeben werden.
|
|
Der cdr des Paares ist ein Symbol, das eine Nachricht an ein
|
|
Input-field darstellt, so würde ein Input-field, das mit dem
|
|
Behvior
|
|
(list (cons 27
|
|
'clear))
|
|
erzeugt worden ist beim drücken der ESC-Taste seinen Inhalt
|
|
löschen.Es stehen zwei Standardlisten zu Verfügung:
|
|
standard-behavior und standard-behavior-pro (s.u.).
|
|
(Default: standard-behavior)
|
|
insert-active: ist ein Boolean und gibt an ob das sich das Input-field am
|
|
Anfang im Insert- oder im Overwrite-Modus befindet.
|
|
(Default: #t)
|
|
x-scroll-enabled: ist ein Boolean und gibt an ob horizontales Scrollen
|
|
erlaubt ist.
|
|
(Default #f)
|
|
y-scroll-enabled: ist ein Boolean und gibt an, ob vertikales Scrollen erlaubt ist.
|
|
(Default #f)
|
|
|
|
|
|
|
|
(install-input-field input-field
|
|
window
|
|
x-loc y-loc)
|
|
Ordnet das Input-field input-field dem (ncurses-)Fenter window zu und
|
|
platziert es mit der linken oberen Ecke in der Spalte x-loc und der
|
|
Zeile y-loc.
|
|
Will man das Input-field später nicht direkt verwenden, sondern nur
|
|
über cursor-over-input-field? (s.u.) so kann man es auch mittels
|
|
make&install-input-field auf einmal erzeugen und installieren:
|
|
|
|
(make&install-input-field window
|
|
x-loc y-loc
|
|
x-dim y-dim
|
|
[...])
|
|
|
|
|
|
2. Typpredikat und Feldselektoren
|
|
----------------------------------
|
|
|
|
Input-fields exportirt außerdem ein Typpredikat:
|
|
input-field?
|
|
und die folgenden Selektoren
|
|
input-field-default-text: default-text
|
|
input-field-text: der aktuelle Inhalt des Input-fields
|
|
als String
|
|
input-field-x-location: x-loc
|
|
input-field-y-location: y-loc
|
|
input-field-x-size: x-dim
|
|
input-field-y-size: y-dim
|
|
input-field-x-scroll: x-scroll-enabled
|
|
input-field-y-scroll: y-scroll-enabled
|
|
input-field-line: die Zeile, in der der Cursor steht
|
|
input-field-column: die Spalte, in der der Cursor steht
|
|
input-field-insert: insert-active
|
|
|
|
|
|
3. Bahaviors
|
|
----------------------
|
|
|
|
standard-behavior führt die folgenden Bindungen ein:
|
|
Pfeil-Hoch : Cursor um eine Zeile nach oben bewegen.
|
|
Pfeil-Runter: Cursor um eine Zeile nach unten bewegen.
|
|
Pfeil-links: Cursor nach links bewegen.
|
|
Pfeil-Rechts: Cursor nach rechts bewegen.
|
|
Home: An den Anfang der Zeile springen.
|
|
End: Ans Ende der Zeile springen.
|
|
Backspace: Zeichen vor dem Cursor löschen.
|
|
Delete: Zeichen unter dem Cursor löschen
|
|
|
|
standard-behavior-pro erweitert standard-behavior um die
|
|
folgenden Bindungen:
|
|
C-p: Cursor um eine Zeile nach oben bewegen.
|
|
C-n: Cursor um eine Zeile nach unten bewegen.
|
|
C-b: Cursor nach links bewegen.
|
|
C-f: Cursor nach rechts bewegen.
|
|
C-a: An den Anfang der Zeile springen.
|
|
C-e: Ans Ende der Zeile springen.
|
|
C-d: Zeichen unter dem Cursor löschen.
|
|
C-k: alles rechts vom Cursor löschen.
|
|
|
|
die folgenden (hoffentlich) selbsterklärenden Symbole stehen
|
|
zum Erstellen von Behaviors zu verfügung:
|
|
|
|
'move-prev-line
|
|
'move-next-line
|
|
'move-left
|
|
'move-right
|
|
|
|
'move-forawrd - wie move-right, springt aber nach Ende der Zeile
|
|
auf den Anfang der Nächsten.
|
|
'move-backward - equivalent zu 'move-forward
|
|
|
|
'goto-begin-of-line
|
|
'goto-end-of-line
|
|
'goto-begin-of-first-line
|
|
'goto-begin-of-last-line
|
|
'goto-begin-of-word-forward
|
|
'goto-begin-of-word-backward
|
|
|
|
'delete-left
|
|
'delete-right
|
|
'delete-all-left
|
|
'delete-all-right
|
|
'delete-line
|
|
|
|
'restore: Synchronisiert inrterne Daten mit externer Darstellung
|
|
und Zeichent das Input-field neu.
|
|
(war bisher nicht nötig, aber sobald Sonderzeichen erlaubt
|
|
sind.... ;-)
|
|
|
|
Außerdem zeichnet die Funktion
|
|
(input-field-refresh input-field)
|
|
das Input-field neu.
|
|
|
|
4. Cursor-over-inputfield? und send-input-field
|
|
-----------------------------------------------
|
|
|
|
(cursor-over-input-field? window) -> #f | input-field
|
|
liefert, wenn der Cursor im Fenster window über einem zuvor installiertem
|
|
Input-field steht, dieses Input-field zurück, ansonsten #f.
|
|
|
|
(send-input-field input-field integer) -> (values boolean boolean)
|
|
übergibt dem Input-field input-field die Zahl integer. Das Input-field
|
|
schaut zuerst, ob es sich um eine im Behavior gebundene Zahl handelt und
|
|
führt, falls dies der Fall ist die entsprechende Aktion aus. Falls integer
|
|
nicht im Behavior gebunden ist überprüft das Input-field ob es sich um einen
|
|
gültigen zum Einfügen gültigen Ascii-code (32-126) handelt und fügt das
|
|
entsprechende Zeichen gegebenenfalls an der aktuellen Cursorposition ein.
|
|
|
|
|
|
5. Position, Größe, Scrolleigenschaften nachträglich verändern
|
|
--------------------------------------------------------------
|
|
|
|
;; TODOOO
|
|
|
|
hierzu stehen folgende Funktionen zur Verfügung:
|
|
|
|
(input-field-reset input-field) - stellt den default-text wieder her
|
|
(input-field-clear input-field) - löscht den Inhalt
|
|
(input-field-move input-field x-loc y-loc) - setzt die linke, obere Ecke auf (x-loc y-loc)
|
|
(input-field-resize input-field x-dim y-dim) - setzt ...
|
|
(input-field-toggle-x-scroll input-field)
|
|
(input-field-toggle-y-scroll input-field)
|
|
|
|
|