Создание сочетаний клавиш для перемещения / изменения размера окон в Ubuntu

3

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

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

Herms
источник
Я не буду добавлять его в качестве ответа, потому что это слишком расплывчато, я боюсь - я использую установленный Compiz, и я использовал его, чтобы открыть окно терминала с заданным размером, когда я нажимал сочетание клавиш. Я знаю, что это не совсем то, что вы хотите, но попробуйте заглянуть под Compiz - там что-то может быть.
Andy
Открыть окно определенного размера довольно просто. Хитрость в том, чтобы изменить существующие окна.
Herms
Свернуть и развернуть обычно встроены в ваш оконный менеджер, не уверен насчет перемещения окон - у меня был похожий вопрос для Xubuntu superuser.com/questions/142195/xubuntu-aero-snap-hotkeys )
wag2639
мин и макс не то, что я хочу. Я ищу что-то, где я могу установить конкретные размеры. Например, одна вещь, которую я имел в окнах, состояла в том, чтобы установить размер до 90% текущего экрана.
Herms
Я знаю, что открыть в определенном размере легко, и я знаю, что это не то, что вам нужно ... это лишь мое смутное воспоминание о настройке моего терминала, заставляет меня думать, что там может быть что-то полезное для вас. Если бы я все еще использовал это, я бы проверил это для вас!
Andy

Ответы:

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.

Florian Diesch
источник
Похоже, это дает общую ширину / высоту всего логического экрана, а не только одного монитора. Любой способ получить область экрана размера, которая определена только для одного из мониторов?
Herms
1
И если у вас есть шанс, и вы не будете возражать, не могли бы вы дать краткое объяснение того, для чего каждая его часть (в основном, args to awk)? Будет легче настроить это.
Herms
«xwininfo -root» выводит некоторую информацию о корневом окне. awk получает свои выходные данные, выбирает строки, содержащие «Width:» или «Height:», и печатает значения. Обычно здесь также работает "awk '/ (Width | Height): / {print $ 2}'", мне просто нужно было более длинное, чтобы некоторое время назад обойти ошибку и привыкнуть к ней. Эти два значения затем используются в качестве аргументов для «set -», который устанавливает $ 1 и $ 2 для этих значений. Для лучшей читаемости я хочу использовать $ width и $ height вместо этого, поэтому я установил их соответственно. В вызове wmctrl эти переменные затем используются для вычисления ширины и высоты нового окна.
Florian Diesch
Я не знаю, как получить размер монитора, в котором находится окно, если ваш экран растянут на несколько мониторов, и у меня нет второго монитора, чтобы попробовать немного. Возможно, можно использовать xrandr, чтобы получить разрешение, а затем использовать положение экрана, чтобы выяснить, какой это монитор. Правильно подобрать все параметры поворота, отражения, масштабирования и ... все возможные относительные позиции монитора может быть немного сложнее. Может быть, это стоит вопроса сам по себе ...
Florian Diesch
Спасибо за дополнительную информацию. Я заметил небольшую странность с координатами Y (Ym = 0 в wmctrl находится прямо под строкой меню Ubuntu, в то время как Y = 0 в xwininfo - верхняя часть экрана), но я должен обойти это. Это все еще не так хорошо, как autohotkey, но это, вероятно, ожидается, учитывая фрагментацию WM.
Herms
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))

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

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

Это означает, что он больше не ломается, когда вы хотите использовать такие вещи, как абсолютный верхний левый, в котором есть пробелы. В ответе @ Флориана, ожидая 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>,

KingTide44
источник