Here we go with another question, due to my lack of tcl knowledge.
What i would like to achieve is to be able to use variables in text printed to stderr inside a tcl command like module-whatis.
Very often in modulefiles you have to refer to the same information in more than one place and therefore it is convenient to use a variable.
as an example in a module installing tool XXX version YYY you write something like:
module-whatis (This module sets up software XXX version YYY}
and
proc ModulesHelp {} {
puts stderr {This module sets up software XXX version YYY}
}
Instead of writing "Version YYY" any times in different places it would be nice to be able to use:
set ver "Version YYY"
and then
module-whatis (This module sets up software XXX $ver}
this would reduce errors and add maintainability to the modulefile, in the sense that if a new version ZZZ of software XXX comes out i would (probably) use the same modulefile just replacing a few general variables.
Unfortunately in using
module-watis {This module sets up software XXX $ver} will not expand the variable $ver.
A workaround i found is to write it in the following way:
module-whatis "This module sets up software XXX $ver"
which expands variables (but you have to escape special characters).
Is this correct or does it have some unwanted consequences?
Along with this question there is a second one i would like to ask:
Is there a way to print text to stderr using colors?
I found a way to do it defining a procedure and some variables:
proc color {color text} {
return [exec tput setaf $color]$text[exec tput sgr0]
}
set red 1
set green 2
set yellow 3
set blue 4
and then in the module file i will use:
module-whatis "This module sets up software [color $green XXX] $ver"
which will print XXX in green.
Is there a native way to do the same?
Is it fine to use it in the way i described?
Again, many thx in advance for all the answers.
Roberto
|