Я могу переместиться/изменить размер окна пиксель за один раз с моей клавиатурой?

В Windows (по крайней мере, начиная с XP, вероятно, прежде) при использовании клавиатуры, чтобы переместить или изменить размер Окна, можно получить очень точные местоположения и размеры – еще больше, чем с мышью – при помощи клавиши Ctrl в сочетании с клавишами со стрелками (после того, как вызвал Move или Resize функциональность из меню окна [Alt+Space]) для перемещения границ окна пиксель за один раз.

Существует ли способ сделать то же (или подобное) вещь в Ubuntu?

4
задан 29 December 2014 в 16:00

2 ответа

Перемещение/изменение размеров окон на 1 пкс

Принятие Вас использует Единицу, сценарий ниже перемещает или изменяет размер окон на 1 пкс. Скрипт может быть запущен с 8 различными аргументами. В зависимости от move/re-size опций Вы хотите использовать, можно добавить команды к комбинации сочетания клавиш. Обзор опций и соответствующих команд ниже:

enter image description here


Исключения/ограничения

Существует несколько ограничений:

  • gnome-terminal окна могут только быть изменены на шагах. В результате увеличение/уменьшение размера окна на 1 пкс не работает с gnome-terminal.
  • Окно, чтобы быть moved/re-sized должно быть по крайней мере некоторыми пкс и от средства запуска Единицы и от верхней панели.

Как использовать

  • Сначала установите wmctrl, который необходим, чтобы получить геометрию окна и переместить окно.

    sudo apt-get install wmctrl
    
  • Создайте каталог ~/bin (таким образом в Вашем корневом каталоге)

  • Скопируйте сценарий ниже в пустой файл, сохраните его как move_window (никакое расширение)
  • Сделайте это исполняемым файлом (щелкните правой кнопкой по файлу> Свойства> Полномочия (вкладка), галочка "позволяет, выполняются"),

    Для тестирования откройте окно терминала и работайте впоследствии:

    move_window l
    move_window r
    move_window u
    move_window d
    

    Так как окно терминала является передней стороной больше всего, оно должно переместить 1 пкс в левое/правильное//вниз.

    (Как упомянуто, изменение размеров не работает с gnome-terminal)

  • Если это работает правильно, добавьте команды к сочетаниям клавиш;
    выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команды к четырем различным комбинациям сочетания клавиш. Это могло бы быть хитро, так как команды, которые Вы упомянули, вероятно, заняты. Что работало над моей системой:

    • Ключ Shift+Ctrl+arrow оставлен
    • Право ключа Shift+Ctrl+arrow
    • Shift+Ctrl+arrow настраивают
    • Ключ Shift+Ctrl+arrow вниз

    для действий перемещения.
    Для изменить размер действий необходимо будет попробовать дополнительные комбинации.

Сценарий

#!/usr/bin/env python3
import subprocess
import sys
# calibration
cal = 4
# direction, as argument from user input (l, r, u, d / h+, h-, v+, v-)
direction = sys.argv[1]
# move step size 
mv = -1 if  direction in ["l", "d", "h-", "v-"] else 1

def get(command):
    return subprocess.check_output(["/bin/bash", "-c", command])\
           .decode("utf-8")

def execute(command):
    subprocess.call(["/bin/bash", "-c", command])
# find the top shift (height of the panel = resolution - working area)
res_output = get("xrandr").split(); idf = res_output.index("current")
res = (int(res_output[idf+1]), int(res_output[idf+3].replace(",", "")))[-1]
topshift = int(res) - int(get("wmctrl -d").split()[8].split("x")[-1])+cal
# find frontmost window
def get_windowid():
    cmd = "xprop -root"
    frontmost = [l for l in get(cmd).splitlines() if\
                 "ACTIVE_WINDOW(WINDOW)" in l][0].split()[-1]
    return frontmost[:2]+"0"+frontmost[2:]
# get window geometry, create move command
set_w = [w.split()[0:6] for w in get("wmctrl -lG").splitlines()\
          if get_windowid() in w][0]
set_w[0] = "wmctrl -ir "+set_w[0]+" -e 0"
set_w.pop(1)

if direction in ["l", "r"]:
    set_w[1] = str(int(set_w[1])+mv); set_w[2] = str(int(set_w[2])-topshift)  
elif direction in ["u", "d"]:
    set_w[2] = str(int(set_w[2])-topshift-mv) 
elif direction in ["v-", "v+"]:
    set_w[2] = str(int(set_w[2])-topshift); set_w[4] = str(int(set_w[4])+mv)
elif direction in ["h-", "h+"]:
    set_w[2] = str(int(set_w[2])-topshift); set_w[3] = str(int(set_w[3])+mv)

execute((",").join(set_w))

Примечание:

Существует немного различия в пути wmctrl сообщают геометрия окна и путь wmctrl устанавливает геометрию окна. В первом случае это вычисляет с полного экрана (разрешение) во втором случае только от рабочей области (??). Даже затем сценарий должен был "калибровать" 4 пкс вертикально, которых я не нашел удовлетворяющего объяснения. Хорошие новости - то, что на различных компьютерах, я не видел различия в отклонении.

Если в Вашем случае окно делает неожиданные переходы, оставьте комментарий.


Объяснение

Как это работает

  1. Переднее больше всего окно ищется с помощью xprop:

    xprop -root
    

    Где-нибудь в (обширном) выводе, существует строка как:

    _NET_ACTIVE_WINDOW(WINDOW): window id # 0x4600a8d
    

    от которого может быть проанализирован наш идентификатор окна: 0x4600a8d. Так как формат несколько отличается от wmctrl, мы должны добавить нуль на третьем положении: 0x04200085

  2. Идентификатор окна используется для поиска окна и его текущих данных геометрии в выводе wmctrl -lG. После того как у нас есть корректная строка, данные, которые мы имеем на окне, похожи:

    0x04200085  0 322  52   823  998  <computer_name> <window_name> 
    

    где столбец 2, 3, 4, 5 впоследствии:

    • x координата верхнего левого угла окна
    • y координата
    • ширина окна
    • высота окна
  3. путем управления этими числами мы можем переместиться/изменить размер окно с командой:
    (пример для перемещения окна направо на 1 пкс, изменяясь "322" в "323")

    wmctrl -ir 0x04200085 -e 0,323,52,823,998
    

Существует несколько сложностей для контакта с, но это в основном, как это работает.

5
ответ дан 1 December 2019 в 09:23

По-видимому, это не работает в XFCE также. У меня есть косвенная идея, которая могла бы работать хотя...

я предложил бы пробовать опции Accessibility за управление мышью с клавиатурой , установив его для перемещения очень медленно, и использование что заставить окно перемещаться немного за один раз.

Каждый рабочий стол, кажется, помещает опции Accessibility, где-нибудь отличающиеся в XFCE, это находится под контролем общего менеджера по Настройкам, но не должно быть трудно найти в Единице & другие...

1
ответ дан 17 November 2019 в 04:15

Другие вопросы по тегам:

Похожие вопросы: