Revision: 37316 http://trac.macosforge.org/projects/macports/changeset/37316 Author: raimue@macports.org Date: 2008-06-02 16:37:43 -0700 (Mon, 02 Jun 2008) Log Message: ----------- port/port.tcl, macports1.0/macports.tcl: Use current terminal size instead of a hardcoded width. This uses the COLUMNS environment variable which therefore should be preserved by the env cleanup in macports.tcl. See #15488. Modified Paths: -------------- trunk/base/src/macports1.0/macports.tcl trunk/base/src/port/port.tcl Modified: trunk/base/src/macports1.0/macports.tcl =================================================================== --- trunk/base/src/macports1.0/macports.tcl 2008-06-02 22:45:18 UTC (rev 37315) +++ trunk/base/src/macports1.0/macports.tcl 2008-06-02 23:37:43 UTC (rev 37316) @@ -658,6 +658,7 @@ PATCH_SITE_LOCAL PATH PORTSRC RSYNC_PROXY TMP TMPDIR USER GROUP http_proxy HTTPS_PROXY FTP_PROXY ALL_PROXY NO_PROXY + COLUMNS LINES } if {[info exists extra_env]} { set keepenvkeys [concat ${keepenvkeys} ${extra_env}] Modified: trunk/base/src/port/port.tcl =================================================================== --- trunk/base/src/port/port.tcl 2008-06-02 22:45:18 UTC (rev 37315) +++ trunk/base/src/port/port.tcl 2008-06-02 23:37:43 UTC (rev 37316) @@ -397,15 +397,39 @@ } ## +# Makes sure we get the current terminal size +proc set_term_size {} { + global env + + if {![info exists env(COLUMNS)] || ![info exists env(LINES)]} { + if {![catch {exec stty size} err]} { + regexp {(\d+) (\d+)} $err -> rows cols + set env(COLUMNS) $cols + set env(LINES) $rows + } else { + puts stderr "Warning: Unable to get terminal size, using 80x24!" + set cols 80 + set rows 24 + } + } +} + +## # Wraps a multi-line string at specified textwidth # # @see wrapline # # @param string input string -# @param maxlen text width (indent length not counted) +# @param maxlen text width (0 defaults to current terminal width) # @param indent prepend to every line # @return wrapped string proc wrap {string maxlen {indent ""} {indentfirstline 1}} { + global env + + if {$maxlen == 0} { + set maxlen $env(COLUMNS) + } + set splitstring {} foreach line [split $string "\n"] { lappend splitstring [wrapline $line $maxlen $indent $indentfirstline] @@ -419,10 +443,16 @@ # @see wrap # # @param line input line -# @param maxlen text width (indent length not counted) +# @param maxlen text width (0 defaults to current terminal width) # @param indent prepend to every line # @return wrapped string proc wrapline {line maxlen {indent ""} {indentfirstline 1}} { + global env + + if {$maxlen == 0} { + set maxlen $env(COLUMNS) + } + set string [split $line " "] if {$indentfirstline == 0} { set newline "" @@ -1183,7 +1213,7 @@ set ret "Usage: " set len [string length $action] - append ret [wrap "$action$cmds$args" 80 [string repeat " " [expr 8 + $len]] 0] + append ret [wrap "$action$cmds$args" 0 [string repeat " " [expr 8 + $len]] 0] append ret "\n" return $ret @@ -1410,14 +1440,14 @@ set joiner ", " } puts -nonewline "Variants: " - puts [wrap $vars 80 [string repeat " " 13] 0] + puts [wrap $vars 0 [string repeat " " 13] 0] } puts "" if {[info exists portinfo(long_description)]} { - puts [wrap [join $portinfo(long_description)] 80] + puts [wrap [join $portinfo(long_description)] 0] } else { if {[info exists portinfo(description)]} { - puts [wrap [join $portinfo(description)] 80] + puts [wrap [join $portinfo(description)] 0] } } if {[info exists portinfo(homepage)]} { @@ -2100,7 +2130,7 @@ puts -nonewline " ([join $portinfo(categories) ", "])" } puts "" - puts [wrap [join $portinfo(description)] 80 [string repeat " " 4]] + puts [wrap [join $portinfo(description)] 0 [string repeat " " 4]] } } @@ -3050,6 +3080,10 @@ # Global options private to this script array set private_options {} +# Make sure we get the size of the terminal +# We do this here to save it in the boot_env, in case we determined it manually +set_term_size + # Save off a copy of the environment before mportinit monkeys with it global env boot_env array set boot_env [array get env]
participants (1)
-
raimue@macports.org