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


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` "
Пухнастий

Я спробував крок 1, потім запустивши sh swap.sh, я отримую повідомлення про помилку: swap.sh: 17: swap.sh: 288: не знайдено swap.sh: 20: swap.sh: Синтаксична помилка: "(" несподівано , створюючи текст файл з = як заголовок і нічого Не
маєте

Спробуй @Matifoubash swap.sh
Fluffy

Це корисно; чи є спосіб виявити, коли дисплей обертається? У мене лівий монітор повернутий (з xrandr --rotate), але xdotool не використовує обертання, і я не знаю, як його виявити. Якщо фокус знаходиться в обертовому дисплеї, мені потрібно два рази використовувати клавішу, а не один раз.
GTK

0

Ви можете використовувати AltTabдля перемикання між вікнами.

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


2
Я хочу перемикати дисплеї в налаштуваннях подвійного монітора, а не Windows. У мене відкрито кілька додатків, і я не хочу багато разів натискати клавішу alt, поки не дістанусь до тієї на іншому дисплеї.
Пухнастий

0

це сховище може вам допомогти

https://github.com/Eitol/screen_focus_changer

Ви розміщуєте лівий скрипт focus_changer.py у встановленому місці (/ вибираєте, наприклад), а потім додаєте в свої налаштування клавіш / ярлик / гарячу клавішу

python3 /opt/focus_changer.py зліва # Фокус вліво

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

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