Quero executar um comando em um script bash que redimensionará a janela do terminal. Em xterm
xterm -geometry=30x30
criará umnovojanela xterm e
lxterminal --geometry=30x30
criará umnovojanela lxterminal.
Existe uma maneira de redimensionar qualquer terminal sem abrir uma nova janela? Seria assim:
if [ $TERMINALTYPE=xterm ]; then
DASH="-"
else
DASH="--"
endif
echo -e $TERMINALTYPE" "$DASH"geometry 30x30"
MAS:Se houver um comando que seja de uma única linha que funcione com qualquer terminal (talvez a sequência de escape vt100), então isso é ainda melhor.
Responder1
Existem duas etapas para isso. Primeiro, você precisa dizer ao xterm para permitir que isso aconteça, porque por padrão ele ignora solicitações de programas hospedados para redimensionar a janela. Adicione isto ao seu ~/.Xdefaults:
xterm*allowWindowOps: true
Para que isso tenha efeito, você precisa sair ou executar:
xrdb ~/.Xdefaults
Em seguida, inicie um novo xterm e em seu script bash:
echo -ne "\e[8;30;30t"
Responder2
Só quero compartilhar:
apt-get install xterm
Use o seguinte comando de redimensionamento onde20= número de linhas,40= número de colunas:
resize -s 20 40
Altere o valor das linhas e colunas conforme a necessidade.
Responder3
Além deResposta correta de @Paul:
Você poderia tentar isso sem editar ~/.Xdefaults
, executando:
xterm -xrm 'xterm*allowWindowOps: true'
Então, em nova janela:
printf "\e[8;%d;%dt" $[LINES+5] $[COLUMNS+5]
.Xdefaults
ou.Xresources
Dependendo da sua instalação, pode ser necessário armazená-lo .Xresources
em vez de .Xdefaults
.
ARQUIVOS
O Xrdb não carrega nenhum arquivo por si só, mas muitos ambientes de desktop usam
xrdb
para carregar~/.Xresources
arquivos na inicialização da sessão para inicializar o banco de dados de recursos, como um substituto generalizado para~/.Xdefaults
arquivos.
Então depois
sed -e '$axterm*allowWindowOps: true' -i.bak .Xresources
xrdb <.Xresources
Então...
Algumas bind
amostras
Você poderia executar isso ouadicione ao seu.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'
para ser usado com respectivamente: Shift+ Right , Shift+ Left , Shift+ Down ou Shift+Up
Observação: Como isso emfestabind, isso funcionará em ambiente de comando interativo (também conhecido como não sob vim
nem less
ou read
qualquer trabalho em andamento)