(import scheme) (cond-expand (chicken-4 (use srfi-1 data-structures extras sql-de-lite irregex (prefix stfl stfl:))) (chicken-5 (import (chicken base)) (import (chicken format)) (import (chicken irregex)) (import (chicken string)) (import (srfi 1)) (import sql-de-lite) (import (prefix stfl stfl:)))) (define db (open-database "example.db")) (on-exit (lambda () (close-database db))) (stfl:init!) (let* ((count (query fetch-value (sql db "SELECT count(*) FROM people"))) (message (format "~a addresses in database" count)) (template "{vbox tie:c {table{label .border:lrtb text:~a}}}") (layout (format template (stfl:quote-text message)))) (stfl:run! (stfl:create layout) 3000)) (define search-layout #<\"\n" (alist-ref 'rowid tuple) (stfl:quote-text (alist-ref 'name tuple)) (stfl:quote-text (alist-ref 'email tuple)))) tuples)))) (stfl:modify! form "result" "replace_inner" (format "list\n~a" layout)))) (let ((form (stfl:create search-layout))) (let loop () (let ((event (stfl:run! form 0))) (cond ((and (equal? event "ENTER") (irregex-search "^in_" (stfl:get-focus form))) (perform-search! form) (loop)) ((and (equal? event "ENTER") (equal? (stfl:get-focus form) "result")) (let ((match (irregex-search "rowid_(\\d+)" (stfl:get-value form "result_rowid")))) (when match (edit! (irregex-match-substring match 1))) (loop))) ((equal? event "ESC") #f) (else (loop))))))) (define edit-layout #<