当我调整终端大小时,如何让终端重新绘制内容?

当我调整终端大小时,如何让终端重新绘制内容?

默认终端宽度可能是 80 个字符,但是命令的输出可能有 100 个字符(比终端的宽度宽),因此它会溢出并将 80 个字符放在一行上,并可能在下一行上放置 20 个字符。当我将终端宽度调整为 200 个字符时,屏幕上已经显示的所有内容都保持原样(一行 80 个字符,另一行 20 个字符)。我想知道是否有任何解决方案可以让终端重新绘制内容,以便所有 100 个字符都可以放在一行上。

我当前的系统是 Ubuntu Linux,我使用 bash。我感觉有一个解决方案,因为当我使用 OSX 时,它似乎能够重新绘制终端的内容并重新排列前几行。

答案1

自从我提出这个问题以来,我已经找到了解决这个问题的代码片段。

我已经在 RHEL5 中测试过它,它成功地解决了我的需求。因此,当 get 命令输出一些文本时。例如:ls -al然后您可以使用鼠标将窗口大小调整为大于或小于 80 像素,如果屏幕上没有足够的可见空间,则输出将换行到下一行,或者在您扩大窗口时展开以仅占用一行。

找到于: http://codesnippets.joyent.com/posts/show/1645

tput lines
tput cols

echo $LINES
echo $COLUMNS

stty size
stty size | awk '{print $1}'    # lines
stty size | awk '{print $NF}'   # columns

stty size | cut -d" " -f1   # lines
stty size | cut -d" " -f2   # columns 

stty -a | awk '/rows/ {print $4}'      # lines
stty -a | awk '/columns/ {print $6}'   # columns

stty -a | sed -E -n -e 's/^.*[^[:digit:]]([[:digit:]]+)[[:space:]]+rows;.*$/\1/p;q;'
stty -a | sed -E -n -e 's/^.*[^[:digit:]]([[:digit:]]+)[[:space:]]+columns;.*$/\1/p;q;'



# automatically resize the Terminal window if it gets smaller than the default size

# positive integer test (including zero)
function positive_int() { return $(test "$@" -eq "$@" > /dev/null 2>&1 && test "$@" -ge 0 > /dev/null 2>&1); }


# resize the Terminal window
function sizetw() { 
   if [[ $# -eq 2 ]] && $(positive_int "$1") && $(positive_int "$2"); then 
      printf "\e[8;${1};${2};t"
      return 0
   fi
   return 1
}


# the default Terminal window size: 26 lines and 107 columns
sizetw 26 107


# automatically adjust Terminal window size
function defaultwindow() {

   DEFAULTLINES=26
   DEFAULTCOLUMNS=107

   if [[ $(/usr/bin/tput lines) -lt $DEFAULTLINES ]] && [[ $(/usr/bin/tput cols) -lt $DEFAULTCOLUMNS ]]; then
      sizetw $DEFAULTLINES $DEFAULTCOLUMNS
   elif [[ $(/usr/bin/tput lines) -lt $DEFAULTLINES ]]; then
      sizetw $DEFAULTLINES $(/usr/bin/tput cols)
   elif [[ $(/usr/bin/tput cols) -lt $DEFAULTCOLUMNS ]]; then
      sizetw $(/usr/bin/tput lines) $DEFAULTCOLUMNS
   fi

   return 0
}


# SIGWINCH is the window change signal
trap defaultwindow SIGWINCH    


sizetw 26 70
sizetw 10 107
sizetw 4 15

出于某些原因,OSX(至少在我当前的 10.7.2 中)似乎原生支持调整大小。

相关内容