From 6fe9264a2ed7b68792a669c19af50c607d8a1649 Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Thu, 30 May 2024 18:49:19 -0400 Subject: print: Add fallback to bare lpr so printer config not needed Fix other quirks. Disable print on back since we don't use it anyway --- virtual-programs/print.folk | 62 ++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 35 deletions(-) (limited to 'virtual-programs') diff --git a/virtual-programs/print.folk b/virtual-programs/print.folk index 84029c40..ed912b8e 100644 --- a/virtual-programs/print.folk +++ b/virtual-programs/print.folk @@ -9,7 +9,7 @@ # Claim printer my-printer can print double-sided a4 paper # Claim printer alt-printer can print single-sided indexcard paper # -# Use "two-sided" if the printer supports printing on both sides of the paper in a single printing operation. +# Use "double-sided" if the printer supports printing on both sides of the paper in a single printing operation. # # Lastly, you need to declare a default printer and default paper format: # (make sure that the default printer supports the default paper format) @@ -252,7 +252,7 @@ When /someone/ wishes to print /code/ with /...options/ { When /someone/ wishes to print program /id/ with /...options/ { if {$::thisNode eq "folk-beads" || $::thisNode eq "folk-convivial"} { # HACK: Forward the print request to folk0. - remotePrintRequest "folk0" [list $::thisNode wishes to print progam $id with {*}$options] + remotePrintRequest "folk0" [list $::thisNode wishes to print program $id with {*}$options] return } @@ -269,51 +269,46 @@ When /someone/ wishes to print program /id/ with /...options/ { if {![dict exists $options format]} { lappend defaultStatements & /someone/ claims paper format /format/ is the default paper format } + # TODO: we don't use /sided/ for anything right now. set query {/someone/ claims printer /printer/ can print /sided/ /format/ paper} # first try to satisfy given constraints and any remaining defaults set results [Statements::findMatchesJoining [list $query $defaultStatements] $options] - if {$results eq ""} { + if {[llength $results] == 0} { # fall back to solving only for explicit constraints set results [Statements::findMatchesJoining [list $query] $options] } - if {$results eq ""} { - error "Couldn't find a matching printer" - } - - set results [lindex $results 0] - dict with results { - set args [list -P $printer -o media=$format] - dict set ::printjobs $jobid [list $id $args] - - set code [dict get $options code] - set ps [programToPs $id $code $format] - if {$sided eq "single-sided"} { - lappend args -o page-ranges=1 + if {[llength $results] > 0} { + set result [lindex $results 0] + dict with result { + set args [list -P $printer -o media=$format] } + } else { + puts stderr "print.folk: Couldn't find a matching configured printer; using bare lpr command" + set args [list] + set format letter + } - # save code and ps to disk - if {[file exists "$::env(HOME)/folk-printed-programs/$id.folk"]} { - error "Program $id already exists on disk. Aborting print." - } - set fp [open "$::env(HOME)/folk-printed-programs/$id.folk" w] - puts $fp $code - close $fp + dict set ::printjobs $jobid [list $id $args] - set fp [open "$::env(HOME)/folk-printed-programs/$id.ps" w] - puts $fp $ps - close $fp + set code [dict get $options code] + set ps [programToPs $id $code $format] - exec ps2pdf $::env(HOME)/folk-printed-programs/$id.ps $::env(HOME)/folk-printed-programs/$id.pdf - puts [list lpr {*}$args $::env(HOME)/folk-printed-programs/$id.pdf] + # save code and ps to disk + if {[file exists "$::env(HOME)/folk-printed-programs/$id.folk"]} { + error "Program $id already exists on disk. Aborting print." } -} + set fp [open "$::env(HOME)/folk-printed-programs/$id.folk" w] + puts $fp $code + close $fp -When /someone/ wishes to print the back of job-id /jobid/ { - lassign [dict get $::printjobs $jobid] id args + set fp [open "$::env(HOME)/folk-printed-programs/$id.ps" w] + puts $fp $ps + close $fp - puts [list lpr {*}$args -o page-ranges=2 $::env(HOME)/folk-printed-programs/$id.pdf] + exec ps2pdf $::env(HOME)/folk-printed-programs/$id.ps $::env(HOME)/folk-printed-programs/$id.pdf + exec lpr {*}$args $::env(HOME)/folk-printed-programs/$id.pdf } # legacy syntax @@ -323,6 +318,3 @@ When /someone/ wishes to print /code/ with job id /id/ { When /someone/ wishes to print program /id/ with /code/ with job id /id/ { Say $::thisNode wishes to print program $id with $code with job-id $id } -When /someone/ wishes to print the back of job id /jobid/ { - Say $::thisNode wishes to print the back of job-id $id -} -- cgit v1.2.3