Accept strings as well as numbers as parameters.

This commit is contained in:
Tony Garnock-Jones 2011-10-29 09:23:26 -04:00
parent 92628171d2
commit b2ce4d32a0
1 changed files with 10 additions and 3 deletions

View File

@ -16,6 +16,7 @@
CSI CSI
ST ST
OSC OSC
format-parameter
define-variable-arity-escape-sequence define-variable-arity-escape-sequence
define-escape-sequence)) define-escape-sequence))
@ -23,9 +24,15 @@
(define ST "\033\\") (define ST "\033\\")
(define OSC "\033]") (define OSC "\033]")
(define (format-parameter v)
(cond
((number? v) (number->string v))
((string? v) v)
(else (error 'format-parameter "ANSI parameters must be either strings or numbers; got ~v" v))))
(define-syntax-rule (define-escape-sequence (name arg ...) piece ...) (define-syntax-rule (define-escape-sequence (name arg ...) piece ...)
(define (name arg ...) (define (name arg ...)
(let ((arg (number->string arg)) ...) (let ((arg (format-parameter arg)) ...)
(string-append piece ...)))) (string-append piece ...))))
(define-syntax-rule (define-variable-arity-escape-sequence (name args) piece ...) (define-syntax-rule (define-variable-arity-escape-sequence (name args) piece ...)
@ -33,9 +40,9 @@
(if (null? args) (if (null? args)
(let ((args "")) (let ((args ""))
(string-append piece ...)) (string-append piece ...))
(let ((args (string-append (number->string (car args)) (let ((args (string-append (format-parameter (car args))
(foldr (lambda (n acc) (foldr (lambda (n acc)
(string-append ";" (number->string n) acc)) (string-append ";" (format-parameter n) acc))
"" ""
(cdr args))))) (cdr args)))))
(string-append piece ...))))) (string-append piece ...)))))