From 91406d878a665c00064c03b523aaa1350e7515ed Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Fri, 29 May 2026 16:22:38 -0400 Subject: [PATCH 1/3] WIP: Add /./ support to QueryOne; remove lindex-Query! mess --- builtin-programs/calibrate/calibrate-page.folk | 7 ++----- builtin-programs/calibrate/calibrate.folk | 4 ++-- builtin-programs/web/new.folk | 6 +++--- lib/folk.js | 6 +++--- prelude.tcl | 4 +++- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/builtin-programs/calibrate/calibrate-page.folk b/builtin-programs/calibrate/calibrate-page.folk index d882e0b7..e3ce77f9 100644 --- a/builtin-programs/calibrate/calibrate-page.folk +++ b/builtin-programs/calibrate/calibrate-page.folk @@ -5,9 +5,6 @@ fn codeToPostScript Wish the web server handles route "/calibrate" with hidden true handler { package require base64 - set defaultGeom [dict get [lindex [Query! /someone/ claims the default program geometry is /defaultGeom/] 0] defaultGeom] - fn defaultGeomGet {key} { return [string map {mm ""} [dict get $defaultGeom $key]] } - set camera $QUERY(camera) set display $QUERY(display) @@ -120,7 +117,7 @@ Wish the web server handles route "/calibrate" with hidden true handler { - [dict get [QueryOne! the web navigation HTML is /nav/] nav] + [QueryOne! the web navigation HTML is /./] [HtmlWhen the collected results for [list /programName/ has program code /programCode/] are /programs/ { emitHtmlForPrograms $programs diff --git a/builtin-programs/web/page.folk b/builtin-programs/web/page.folk index 506e45bf..8c84feaf 100644 --- a/builtin-programs/web/page.folk +++ b/builtin-programs/web/page.folk @@ -1,5 +1,5 @@ Wish the web server handles route {/page/(.*)$} with handler { - set programDir [dict get [QueryOne! the program save directory is /saveDir/] saveDir] + set programDir [QueryOne! the program save directory is /./] set program_id $1 set filenames [list \ "$programDir/$program_id.folk" \ diff --git a/builtin-programs/web/printed-programs.folk b/builtin-programs/web/printed-programs.folk index e66550bf..41264c92 100644 --- a/builtin-programs/web/printed-programs.folk +++ b/builtin-programs/web/printed-programs.folk @@ -1,5 +1,5 @@ Wish the web server handles route {/printed-programs/([^/]+)\.folk$} with handler { - set programDir [dict get [QueryOne! the program save directory is /programDir/] programDir] + set programDir [QueryOne! the program save directory is /./] set filename "$programDir/$1.folk" set fp [open $filename r] set data [read $fp] diff --git a/prelude.tcl b/prelude.tcl index 3c6312aa..15e27ad1 100644 --- a/prelude.tcl +++ b/prelude.tcl @@ -701,7 +701,21 @@ proc Query! {args} { return $results } proc QueryOne! {args} { + set pattern [list] + for {set i 0} {$i < [llength $args]} {incr i} { + set arg [lindex $args $i] + if {$arg eq "-default"} { + incr i + set default [lindex $args $i] + } else { + lappend pattern $arg + } + } + set results [Query! {*}$args] + if {[llength $results] == 0 && [info exists default]} { + return $default + } if {[llength $results] != 1} { error "QueryOne! of ($args) had [llength $results] results. Should be one result!" } From 620fd796cb13ab258a0f8afd2fd5cacedd40d7b7 Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Sat, 30 May 2026 15:50:13 -0400 Subject: [PATCH 3/3] Add Expect! and use everywhere we can. Thanks to s-ol for the suggestion. We can use it almost anywhere that we don't have a default, and it reads a lot cleaner. --- .../calibrate/calibrate-page.folk | 8 +++--- builtin-programs/calibrate/calibrate.folk | 4 +-- .../calibrate/calibration-board.folk | 2 +- builtin-programs/editor/print-editor.folk | 12 ++++----- builtin-programs/esc-pos.folk | 4 +-- builtin-programs/print/print.folk | 2 +- builtin-programs/web/new.folk | 9 +++---- builtin-programs/web/page.folk | 2 +- builtin-programs/web/printed-programs.folk | 2 +- builtin-programs/web/program.folk | 2 +- lib/folk.js | 6 ++--- prelude.tcl | 27 +++++++++++++++++++ 12 files changed, 51 insertions(+), 29 deletions(-) diff --git a/builtin-programs/calibrate/calibrate-page.folk b/builtin-programs/calibrate/calibrate-page.folk index e3ce77f9..4fb0cb37 100644 --- a/builtin-programs/calibrate/calibrate-page.folk +++ b/builtin-programs/calibrate/calibrate-page.folk @@ -9,9 +9,7 @@ Wish the web server handles route "/calibrate" with hidden true handler { set display $QUERY(display) # Query the camera resolution for proper aspect ratio in preview (defaults to 1920x1080) - set cameraOpts [QueryOne! camera $camera has width /width/ height /height/] - set cameraWidth [dict get $cameraOpts width] - set cameraHeight [dict get $cameraOpts height] + Expect! camera $camera has width /cameraWidth/ height /cameraHeight/ upvar ^html ^html html [csubst { @@ -117,7 +115,7 @@ Wish the web server handles route "/calibrate" with hidden true handler {