Я хочу выполнить команду в скрипте bash, которая изменит размер окна терминала. В xterm
xterm -geometry=30x30
создастновыйокно xterm и
lxterminal --geometry=30x30
создастновыйокно lxterminal.
Есть ли способ изменить размер любого терминала, не открывая новое окно? Вот как это будет выглядеть:
if [ $TERMINALTYPE=xterm ]; then
DASH="-"
else
DASH="--"
endif
echo -e $TERMINALTYPE" "$DASH"geometry 30x30"
НО:Если есть хорошая однострочная команда, которая будет работать с любым терминалом (например, escape-последовательность 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
Примечание: Как это вБашbind, это будет работать в интерактивной командной среде (т.е. не в vim
nor less
или read
какой-либо незавершенной работе)