Skrót do przełączania wyświetlaczy

12

Mam 2 ekrany na moim komputerze - IDE jest otwarty na pełnym ekranie na jednym ekranie, a Firefox jest otwarty na pełnym ekranie na innym ekranie.

Ponieważ używam głównie klawiatury, denerwujące jest to, że muszę chwycić mysz, aby cały czas przestawić fokus na Firefox i z powrotem na IDE.

Czy istnieje skrót, za pomocą którego można przełączyć fokus na „największe okno” na wyświetlaczu 2, jeśli fokus jest gdzieś na wyświetlaczu 1 i odwrotnie?

Puszysty
źródło

Odpowiedzi:

11

Dzisiaj otrzymałem głos na to pytanie, więc publikuję swoje rozwiązanie, z którego korzystam od ponad roku i jestem z tego całkiem zadowolony.

Krok 1: Utwórz skrypt bash (np. Zapisz go ~/swap.shi wykonaj), aby ustawić fokus w oknie, które znajduje się na środku drugiego ekranu:

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

Krok 2: dodaj skrót klawiaturowy, aby wywołać ten skrypt Super-Tab

Krok 3: użyj skrótu, aby przełączać ekrany jak boss

Puszysty
źródło
To bardzo pomaga, jednak mysz nie jest przenoszona na inny ekran, co byłoby wspaniale, gdyby tak było.
samarth,
2
@samarth Możesz to osiągnąć, usuwając mousemove restorez eval, dzięki czemu jest to „eval” xdotool mousemove 1 $ 2 $ getmouselocation --shell` ”
Fluffy
Próbowałem kroku 1, a następnie uruchomiłem sh swap.sh, pojawia się komunikat o błędzie: swap.sh: 17: swap.sh: 288: nie znaleziono swap.sh: 20: swap.sh: Błąd składni: "(" nieoczekiwany , utworzenie tekstu plik z = jako tytuł i nic
Jakiś
@Matifou trybash swap.sh
Fluffy
To jest pomocne; Czy istnieje sposób na wykrycie, kiedy wyświetlacz jest obracany? Mój lewy monitor jest obrócony (z xrandr --rotate), ale xdotool nie używa obrotu i nie wiem, jak to wykryć. Jeśli fokus znajduje się na obróconym wyświetlaczu, muszę użyć klawisza dwa razy zamiast jednego.
GTK,
0

Możesz używać AltTabdo przełączania między oknami.

AltTabpamięta również, które dwa okna ostatnio przełączałeś. Jeśli przełączysz się na jedno okno (nawiguj za pomocą klawiszy strzałek), a następnie przełączysz się z powrotem, wystarczy nacisnąć AltTab, aby przejść między nimi bez dalszej nawigacji.

Aaron Hill
źródło
2
Chcę przełączać wyświetlacze w konfiguracji z dwoma monitorami, a nie w systemie Windows. Mam otwartych wiele aplikacji i nie chcę naciskać klawisza Alt-Tab wiele razy, dopóki nie dojdę do jednej na drugim ekranie.
Fluffy
0

to repozytorium może ci pomóc

https://github.com/Eitol/screen_focus_changer

Umieszczasz lewy skrypt focus_changer.py w ustalonym miejscu (na przykład / opt), a następnie dodajesz skrót klawiszowy / skrót / skrót klawiszowy w swoich ustawieniach

python3 /opt/focus_changer.py left # Focus to left

python3 /opt/focus_changer.py right # Focus to right

Hector Oliveros
źródło