Ярлык для переключения дисплеев


12

У меня есть 2 дисплея на моем ПК - IDE открыт в полноэкранном режиме на одном дисплее, а Firefox открыт на полном экране на другом дисплее.

Поскольку я в основном пользуюсь клавиатурой, раздражает необходимость хватать мышь, чтобы постоянно переключать фокус на Firefox и обратно на IDE.

Можно ли использовать ярлык для переключения фокуса на «самое большое окно» на дисплее 2, если фокус находится где-то на дисплее 1 и наоборот?

Ответы:


11

Сегодня я получил ответ на этот вопрос, поэтому я публикую свое решение, которым я пользуюсь более года, и я вполне доволен.

Шаг 1: создайте скрипт bash (например, напишите его ~/swap.shи сделайте его исполняемым), чтобы установить фокус на окно, которое находится в середине другого экрана:

#!/bin/bash

getwindowat() {
    # move mouse to coordinates provided, get window id beneath it, move mouse back
    eval `xdotool mousemove $1 $2 getmouselocation --shell mousemove restore`
    echo $WINDOW
}

# get active app
active=`xdotool getactivewindow`
# get coordinates of an active app
eval `xdotool getwindowgeometry --shell $active`

# if left border of an app is less than display width
# (e.g. one display is 1920px wide, app has x = 200 - means it's 200px to the right from the left border of left monitor
# if it has x = 1920 or more, it's on the right window), it's on screen 0, and we need to focus to screen 1, otherwise to screen 0
(( $X >= $WIDTH )) && focustoscreen=0 || focustoscreen=1;

# get coordinates of the middle of the screen we want to switch
searchx=$[ ($WIDTH / 2) + $focustoscreen * $WIDTH ]
searchy=$[ $HEIGHT / 2 ]

# get window in that position
window=`getwindowat $searchx $searchy`
# activate it
xdotool windowactivate $window

Шаг 2: добавьте сочетание клавиш для вызова этого скрипта, я помещаю свой в Super-Tab

Шаг 3: используйте ярлык для переключения дисплеев, как босс


Это очень помогает, однако мышь не перемещается на другой экран, что было бы здорово, если бы это было так.
Самар

2
@samarth Этого можно добиться, удалив mousemove restoreиз eval, чтобы он был "eval` xdotool mousemove $ 1 $ 2 getmouselocation --shell` "
Fluffy

Я попытался шаг 1, затем выполняется sh swap.sh, я получаю сообщение об ошибке: swap.sh: 17: swap.sh: 288: не найден swap.sh: 20: swap.sh: Синтаксическая ошибка: "(" неожиданно , создание текста файл с = в качестве заголовка и ничего нет Идея? Спасибо!
Matifou

@Matifou попробуйbash swap.sh
Пушистый

Это полезно; Есть ли способ определить, когда дисплей поворачивается? Мой левый монитор повернут (с xrandr --rotate), но xdotool не использует вращение, и я не знаю, как его обнаружить. Если фокус находится на повернутом дисплее, мне нужно дважды нажать клавишу, а не один раз.
GTK

0

Вы можете использовать AltTabдля переключения между окнами.

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


2
Я хочу переключать дисплеи в настройках с двумя мониторами, а не в Windows. У меня открыто несколько приложений, и я не хочу нажимать alt-tab много раз, пока не достигну того, что на другом дисплее.
Пушистый

0

этот репозиторий может помочь вам

https://github.com/Eitol/screen_focus_changer

Вы помещаете левый скрипт focus_changer.py в фиксированное место (например, / opt), а затем добавляете привязку клавиш / ярлык / горячую клавишу в свои настройки

python3 /opt/focus_changer.py left # Фокус влево

python3 /opt/focus_changer.py right # Фокус направо

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.