1# -*- tcl -*- 2# ### ### ### ######### ######### ######### 3## Terminal packages - ANSI 4## Generic commands to define commands for code sequences. 5 6# ### ### ### ######### ######### ######### 7## Requirements 8 9namespace eval ::term::ansi::code {} 10 11# ### ### ### ######### ######### ######### 12## API. Escape clauses, plain and bracket 13## Used by 'define'd commands. 14 15proc ::term::ansi::code::esc {str} {return \033${str}} 16proc ::term::ansi::code::escb {str} {esc \[${str}} 17 18# ### ### ### ######### ######### ######### 19## API. Define command for named control code, or constant. 20## (Simple definitions without arguments) 21 22proc ::term::ansi::code::define {name escape code} { 23 proc [Qualified $name] {} [list ::term::ansi::code::$escape $code] 24} 25 26proc ::term::ansi::code::const {name code} { 27 proc [Qualified $name] {} [list return $code] 28} 29 30# ### ### ### ######### ######### ######### 31## Internal helper to construct fully-qualified names. 32 33proc ::term::ansi::code::Qualified {name} { 34 if {![string match "::*" $name]} { 35 # Get the caller's namespace; append :: if it is not the 36 # global namespace, for separation from the actual name. 37 set ns [uplevel 2 [list namespace current]] 38 if {![string equal "::" $ns]} {append ns "::"} 39 set name "$ns$name" 40 } 41 return $name 42} 43 44# ### ### ### ######### ######### ######### 45 46namespace eval ::term::ansi::code { 47 namespace export esc escb define const 48} 49 50# ### ### ### ######### ######### ######### 51## Ready 52 53package provide term::ansi::code 0.1 54 55## 56# ### ### ### ######### ######### ######### 57