# -*- tcl -*- # ### ### ### ######### ######### ######### ## Terminal packages - ANSI ## Generic commands to define commands for code sequences. # ### ### ### ######### ######### ######### ## Requirements namespace eval ::term::ansi::code {} # ### ### ### ######### ######### ######### ## API. Escape clauses, plain and bracket ## Used by 'define'd commands. proc ::term::ansi::code::esc {str} {return \033${str}} proc ::term::ansi::code::escb {str} {esc \[${str}} # ### ### ### ######### ######### ######### ## API. Define command for named control code, or constant. ## (Simple definitions without arguments) proc ::term::ansi::code::define {name escape code} { proc [Qualified $name] {} [list ::term::ansi::code::$escape $code] } proc ::term::ansi::code::const {name code} { proc [Qualified $name] {} [list return $code] } # ### ### ### ######### ######### ######### ## Internal helper to construct fully-qualified names. proc ::term::ansi::code::Qualified {name} { if {![string match "::*" $name]} { # Get the caller's namespace; append :: if it is not the # global namespace, for separation from the actual name. set ns [uplevel 2 [list namespace current]] if {![string equal "::" $ns]} {append ns "::"} set name "$ns$name" } return $name } # ### ### ### ######### ######### ######### namespace eval ::term::ansi::code { namespace export esc escb define const } # ### ### ### ######### ######### ######### ## Ready package provide term::ansi::code 0.1 ## # ### ### ### ######### ######### #########