Створіть комбінації клавіш для переміщення / зміни розмірів вікон в Ubuntu


3

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

Більшість пошуків я зробив для Linux версії autohotkey, здавалося, зосереджені навколо просто створення простих комбінацій клавіш (ключові комбо X запускає додаток Y, і т.д.). Я не бачив нічого про розмір вікна сценаріїв і розміщення за його межами / мінімізації.


Не додасть його як відповідь, тому що це занадто розпливчасте Я боюся - я використовую для встановлення Compiz, і я використав його, щоб відкрити вікно терміналу за заданим розміром, коли я натиснув клавішу швидкого доступу. Я знаю, що це не зовсім те, що ви хочете, але спробуйте подивитися під Compiz - там може бути щось.
Andy

Відкриття вікна в певному розмірі досить легко. Хитрість полягає в можливості змінювати вже існуючі вікна.
Herms

Згорнути і розгорнути, як правило, вбудовані у ваш менеджер вікон, не знаєте про переміщення вікон - у мене було схоже питання для Xubuntu ( superuser.com/questions/142195/xubuntu-aero-snap-hotkeys )
wag2639

min та max не те, що я хочу. Я шукаю щось, де я можу встановити певні розміри. Наприклад, у вікні я мав встановити розмір до 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.


Схоже, що дає загальну ширину / висоту всього логічного екрану, а не тільки один монітор. Будь-який спосіб отримати область екрану розміру, що є специфічним для одного з моніторів?
Herms

1
І якщо у вас є шанс і не заперечуєте, чи не могли б ви дати коротко пояснення того, для чого кожна частина (головним чином аргументи до awk)? Це полегшить налаштування цього.
Herms

"xwininfo -root" друкує певну інформацію про кореневе вікно. awk бере свій висновок, вибирає рядки, що містять або "Ширина:", або "Висота:" і друкує значення. Як правило, "awk" / (Width | Height): / {print $ 2} '"працює також, я просто потребував більш довгого, щоб обійти помилку деякий час назад і звикнувши до нього. Два значення потім використовуються в якості аргументів для "set -", який встановлює значення $ 1 і $ 2. Для кращої читаності я хочу використовувати замість $ width і $ height, тому я встановлюю їх відповідно. У виклику wmctrl ці змінні потім використовуються для обчислення ширини та висоти нового вікна.
Florian Diesch

Я не знаю, як отримати розмір монітора вікно, якщо ваш екран розтягнутий на декількох моніторах, і я не маю другий монітор навколо, щоб спробувати трохи. Можливо, можна використовувати xrandr, щоб отримати дозвіл, а потім скористатися позицією екрану, щоб дізнатися, який монітор він є. Отримати це право з усіма варіантами повороту, відображення, масштабування, ... і всі можливі відносні позиції монітора можуть стати трохи складніше. Може бути, це питання власного ...
Florian Diesch

Дякуємо за додаткову інформацію. Я помітив трохи дивацтва з координатами Y (wmctrl Y = 0 прямо під Ubuntu панель меню thingy, в той час як xwininfo Y = 0 є верхній частині екрану), але я повинен бути в змозі обходитися. Це досі є не такий красивий як autohotkey, але це певно очікуване дане WM фрагментація.
Herms

0

Просто затверджую відповідь @ Florian ...

#!/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>.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.