Niestandardowy skrót / skrót do otwierania / wyświetlania aplikacji


11

Nie sądzę, że jest to wbudowane w system, ale czy można to zrobić bez większych problemów?

Powiedzmy, że otwieram określony program za pomocą klawisza skrótu, a kiedy ponownie go naciskam, okno programu jest wyświetlane na pierwszym planie.

Chcę to zrobić w systemie Ubuntu 9.04.

Może z D-Bus? Jacyś eksperci?

Aktualizacja : Oto, z czym skończyłem na wypadek, gdyby komuś to pomogło:

#!/bin/bash
if [ -f "/tmp/myterm.pid" ]; then
  WID=`cat /tmp/myterm.pid`
  xdotool windowactivate $WID
  if [ "$?" != "0" ]; then
    WID=""
  fi
else
  WID=`xdotool search --title "UNIQUE TITLE" | head -1`
fi

if [ "$WID" == "" ]; then
  /usr/bin/gnome-terminal --window-with-profile=MYPROFILE "$@"
  WID=`xdotool search --title "UNIQUE TITLE" | head -1`
  echo $WID > /tmp/myterm.pid
else
  xdotool windowactivate $WID
fi

Z pewnością można to uprościć, ale nie jestem bashczarodziejem. Ponadto, aby mój przykład działał, utworzyłem niestandardowy profil w Terminalu, który stosuje unikalny tytuł do okna, dzięki czemu można go później znaleźć. Możliwości są nieskończone!


1
W przypadku tego prostego zadania metoda jtb działa lepiej, ponieważ xdotools czasami generuje błędy X, a wmctrl jest szybszy.
Ivan

Odpowiedzi:


10

wmctrlProgram jest właśnie to, czego szukasz ( sudo apt-get install wmctrl). Możesz użyć wmctrl -a "AppTitle"polecenia, aby przenieść aplikację na pierwszy plan. wmctrl -lwyświetli listę wszystkich dostępnych okien, więc powinno być łatwe napisanie skryptu powłoki, który sprawdza, czy program jest uruchomiony i albo go uruchamia, albo przesuwa na pierwszy plan. Następnie możesz po prostu powiązać to ze skrótem klawiaturowym.

Najpierw zapisz gdzieś poniższy skrypt, użyję /home/jtb/code/bringToFront. Wymaga dwóch argumentów, pierwszy wpisuje się w terminalu, aby uruchomić program, drugi jest podciągiem tytułu okna programu. Jeśli w tytule nie ma stałego unikalnego ciągu, musisz znaleźć trochę więcej pracy, aby znaleźć okno programu.

#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]  
then
    wmctrl -a "$2"
else
    $1 &
fi
  1. Skrypt w bieżącym katalogu uruchom, chmod +x bringToFrontaby skrypt był wykonywalny. Następnie upewnij się, że działa; aby uruchomić / skoncentrować firefoxa, który możesz uruchomić ./bringToFront firefox "Mozilla Firefox".

  2. Teraz musimy powiązać klawisz skrótu. Uruchom gconf-editori przejdź do struktury folderów w lewo do /apps/metacity/keybinding_commands.

  3. commandPrawdopodobnie dwukrotnie kliknij pierwszy z pustą wartością command_1. Wpisz pełną ścieżkę do skryptu i podaj dwa parametry, np /home/jtb/code/bringToFront firefox Firefox.

  4. Z panelu po lewej wybierz global_keybindingsnastępny folder w górę. runPrawdopodobnie znajdź wpis pasujący do właśnie zdefiniowanego polecenia run_command_1. Kliknij go dwukrotnie i wpisz skrót klawiaturowy, którego chcesz użyć. Umieść modyfikatory w nawiasach kątowych, np <Ctrl><Alt>F.

Teraz Control+ Alt+ Fspowoduje wyświetlenie okna Firefoksa na pierwszym planie lub uruchomienie go, jeśli jeszcze nie jest uruchomione.


Tak, dowiedziałem się o tym kilka minut temu, ale poszedłem z xdotool. Dzięki!
Ivan

Zapomniałem wspomnieć, że użyłem także globalnych skrótów i poleceń w gconf, aby w pełni osiągnąć efekt (konsola Quake biednego człowieka!).
Ivan

Ach, tak, sam nie korzystałem z xdotool, ale wygląda na to, że dałoby ci to większą elastyczność. Dobra uwaga na temat gconf. Ponieważ jest to dość nieoczywiste, równie dobrze mogę edytować odpowiedź, aby podać więcej szczegółów dla każdego, kto chce to zrobić.
jtb

Konsola Quake Poort Man? Masz na myśli jak Tilda? freshmeat.net/projects/tilda
prestiż

Tak, również używam Tilda, ale pracuję nad kilkoma projektami w ciągu tygodnia i dla każdego z nich zawsze otwieram trzy lub cztery zakładki, więc szybkie przejście do konsoli projektu („obszaru roboczego”) bez bałaganu Tilda jest dla mnie bardzo przydatna.
Ivan

3

Oto inny sposób, aby to zrobić xdotools. Proces wyskakujący jest rozpoznawany przez wiersz polecenia wydany w celu jego uruchomienia (nie jest potrzebny plik pid ani unikalny tytuł okna).

#!/bin/bash

cmd="$@"
# command line to be run. Note that the resulting
# process will hold this in /proc/PID/cmdline 

pid=`pgrep -nf "^$cmd$"`
# most recent process having "$cmd" in /proc/PID/cmdline

if [ -z "$pid" ]; then # no pid
    exec $cmd
    # run command
else
    winid=`xdotool search --all --pid $pid --onlyvisible | head -1`
    # first visible window owned by pid
    xdotool windowactivate $winid
    # give window focus
fi


0

Odpowiedź opublikowana wcześniej przez jtb jest doskonała, ale czasami chcesz dopasować dokładne tytuły (np. Chcesz otworzyć „GitKraken”, ale tytuł przeglądarki „GitKraken vs CLI” również pasuje do zapytania).

#!/bin/bash
if [ $1 == "-exact" ]
then
    additional_arguments="-F "
    app_launch_command=$2
    app_title=$3
else
    additional_arguments=""
    app_launch_command=$1
    app_title=$2
fi

if [ `wmctrl -l $additional_arguments| grep -c "$app_title"` != 0 ]
then
    wmctrl $additional_arguments -a "$app_title"
else
    $app_launch_command &
fi

Teraz możesz wywołać skrypt bringToFront w następujący sposób:

#exact match
./bringToFront.sh -exact "flatpak run com.axosoft.GitKraken" "GitKraken"
#or
./bringToFront.sh -exact <command_to_launch_the_app> <app_title

#partial match like the old script
./bringToFront.sh "flatpak run com.axosoft.GitKraken" "GitKraken"
#or
./bringToFront.sh <command_to_launch_the_app> <app_title>

0

To rozwiązanie nie jest sparametryzowane, ale użyłem go do skupienia się lub uruchomienia kalkulatora gnome.

Opcja -R znajduje okno lub kończy się niepowodzeniem, jeśli zostanie znalezione, zostanie przeniesione na bieżący pulpit, podniesione i podane fokus. Nazwy kalkulatora gnome to okno z nazwą Kalkulator , można go łatwo sparametryzować, ale nigdy nie znalazłem takiej potrzeby. Mam to zmapowane Ctrl-Alt-c.

#!/bin/bash
# start the calculator and raise and focus (requires wmctrl)
# X Tian 06sep2017 created

wmctrl -R Calculator
if [[ $? -ne 0 ]]
  then 
    gnome-calculator &
fi

0

Miałem ten sam problem i ponieważ nie znalazłem żadnego odpowiedniego rozwiązania, stworzyłem jeden:

https://hyperkeys.xureilab.com

https://github.com/xurei/hyperkeys

Możesz przypiąć okno za pomocą zdefiniowanego skrótu. Ja osobiście używam SHIFT + ALT + [QWER] do przypięcia i ALT + [QWER] do przeniesienia na przód. Nie możesz jednak otworzyć aplikacji, jeśli nie jest otwarta.

Jest to narzędzie typu open source, pierwsze w Linuksie. Dostępna jest również wersja dla systemu Windows.

Mam nadzieję, że to pomoże ! Szukam opinii, więc jeśli masz jakieś pytanie, stwórz problem ;-)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.