3

В окнах у меня есть несколько сценариев AutoHotkey, которые позволяют мне нажимать различные комбинации клавиш, чтобы изменить размеры окон до определенных заранее заданных размеров или переместить их в определенные области экрана (или в оба). Мне интересно, как я мог бы сделать это в Ubuntu (гном).

Похоже, что большинство поисков, которые я проводил для linux-версии autohotkey, были сосредоточены вокруг настройки простых сочетаний клавиш (комбинация клавиш X запускает приложение Y и т.д.). Я ничего не видел о размере окна скрипта и размещении за пределами максимизации / минимизации.

2 ответа2

2

В сценариях оболочки вы можете использовать wmctrl (по умолчанию не установлен в Ubuntu, но вы можете установить его с помощью менеджера пакетов) для перемещения и изменения размера окон.

Следующий скрипт изменяет размеры текущего окна до 90% ширины и высоты экрана:

#!/bin/sh

set -- $(xwininfo -root| awk -F '[ :]+' '/ (Width|Height):/ { print $3 }')
width=$1
height=$2

wmctrl -r :ACTIVE: -e 0,-1,-1,$((width*90/100)),$((height*90/100))

Это должно работать и в Xubuntu.

0

Просто чтобы одобрить ответ @ Флориана ...

#!/bin/bash

$(xwininfo -root | awk -F ': +' '/ (Width|Height):/ { print $2 }')
width=$1
height=$2

wmctrl -r :ACTIVE: -e 0,-1,-1,$((width*90/100)),$((height*90/100))

Почему это лучше?

Изменение с [ :]+ в качестве разделителя полей на : + заставляет его использовать двоеточие, затем пробел в указанном порядке, а не только один или несколько из них.

Это означает, что он больше не ломается, когда вы хотите использовать такие вещи, как абсолютный верхний левый, в котором есть пробелы. В ответе @ Florian, awk'ing для Absolute upper-left X: 123 приведет к upper-left , а не 123 .

Продолжать дальше о том, как расширить это лучше; Вы можете взять пример выше и сделать что-то вроде ...

set -- $(xwininfo -root | awk -F ': +' '/ (Absolute upper-left X|Absolute upper-left Y|Width|Height):/ { print $2 }')
posX=$1
posY=$2
width=$3
height=$4

wmctrl -r :ACTIVE: -e 0,$((posX+someNumX)),$((posY+someNumY)),$((width+someNumW)),$((height+someNumH))

переместить его на <someNumX, someNumY> и изменить его размер на <someNumW, someNumH> .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .