我想在 bash 脚本中执行一个命令来调整终端窗口的大小。在 xterm 中
xterm -geometry=30x30
将创建一个新的xterm 窗口,以及
lxterminal --geometry=30x30
将创建一个新的lxterminal 窗口。
有没有办法在不打开新窗口的情况下调整任一终端的大小?它看起来是这样的:
if [ $TERMINALTYPE=xterm ]; then
DASH="-"
else
DASH="--"
endif
echo -e $TERMINALTYPE" "$DASH"geometry 30x30"
但:如果有一个命令,它是一行很好的命令,可以与任一终端(可能是 vt100 转义序列)一起使用,那就更好了。
答案1
这有两个步骤。首先,您需要告诉 xterm 允许它发生,因为默认情况下它会忽略托管程序调整窗口大小的请求。将其添加到您的 ~/.Xdefaults:
xterm*allowWindowOps: true
为了使其生效,您必须注销或运行:
xrdb ~/.Xdefaults
然后启动一个新的 xterm,并在 bash 脚本中:
echo -ne "\e[8;30;30t"
答案2
只是想分享:
apt-get install xterm
使用以下调整大小命令20= 行数,40= 列数:
resize -s 20 40
根据要求更改行和列的值。
答案3
此外@Paul 的正确答案:
您可以在不进行编辑的情况下尝试此操作~/.Xdefaults
,方法是运行:
xterm -xrm 'xterm*allowWindowOps: true'
然后,在新窗口中:
printf "\e[8;%d;%dt" $[LINES+5] $[COLUMNS+5]
.Xdefaults
或者.Xresources
根据您的安装,您可能必须将其存储在.Xresources
而不是上.Xdefaults
。
文件
Xrdb 本身并不加载任何文件,但许多桌面环境习惯在会话启动时
xrdb
加载~/.Xresources
文件来初始化资源数据库,作为~/.Xdefaults
文件的通用替代品。
然后
sed -e '$axterm*allowWindowOps: true' -i.bak .Xresources
xrdb <.Xresources
然后...
一些bind
示例
您可以运行此命令或添加到您的.bashrc
:
# Some bind for 'Shift' + <direction> key and allowWindowOps resource
bind -x '"\e[1;2C"':'printf "\e[8;%d;%dt" $LINES $((COLUMNS+5))'
bind -x '"\e[1;2D"':'printf "\e[8;%d;%dt" $LINES $((COLUMNS-5))'
bind -x '"\e[1;2B"':'printf "\e[8;%d;%dt" $((LINES+3)) $COLUMNS'
bind -x '"\e[1;2A"':'printf "\e[8;%d;%dt" $((LINES-3)) $COLUMNS'
分别与以下项一起使用:Shift+ Right 、 Shift+ Left 、 Shift+Down 或 Shift+Up
笔记:就像这样狂欢绑定,这将在交互式命令环境中工作(也就是说不在vim
nor下less
,read
或任何正在进行的工作)