Команда Bash для фокусування конкретного вікна


50

Чи є у командному рядку bash спосіб зосередити увагу на певному вікні запущеного процесу. Припустимо, я знаю ім'я, номер та все, що мені потрібно.

Наприклад, якщо у мене працює один екземпляр Firefox, але він зведений до мінімуму (або поверх нього є якесь інше вікно). Мені потрібна команда bash, яка відображає і фокусує вікно Firefox, роблячи його активним вікном.

Відповіді:


78

Здається, команда wmctrl виконала цю роботу. Він уже був встановлений для мене, але він доступний у сховищах на випадок, коли комусь це потрібно.

wmctrl -l 

Наразі відкриті вікна (включаючи панелі gnome).

wmctrl -a STRING

Зосереджує увагу на вікні, яке містить заголовку STRING. Я не впевнений, що станеться, якщо цій умові відповідає більше ніж одне вікно.
У моєму випадку командою було:

wmctrl -a Firefox

6
Приємно бачити, як хтось читає, і я не просто нарікаю на себе. =)
Малабарба

1
Спробуйте також xdotool .
Андрес Ріофріо

Це дивовижно для повернення фокусу назад до gdb (налагоджувача), коли він запускає ціль налагодження з вікном, яке краде фокус, як kvm. Використовуйте команду gdb shell wmctrl -a something, де щось є у назві терміналу налагодження.
doug65536

Велике спасибі, це чисте золото, я побоювався, що я втратив усі свої очікувані роботи в якомусь вікні Chrome, яке якимось чином зникло на задньому плані, воно спрацювало!
Осмар

9

За допомогою wmctrlкомбінації xdotoolможна переключити фокус на Firefox, а потім виконати дії клавіатури чи миші.

У цьому прикладі:

wmctrl -R firefox && \
  xdotool key --clearmodifiers ctrl+t ctrl+l && \
  xdotool type --delay=250 google && \
  xdotool key --clearmodifiers Tab Return

Виконуються наступні дії:

  1. Наведіть фокус на перше відповідне вікно Firefox
  2. Відкрийте нову вкладку браузера
  3. Поставляє фокус в адресному рядку
  4. Введіть "google"
  5. Вкладка на перший результат браузера автоматично заповнить результат
  6. Натисніть клавішу Return (або Enter)

4

Як описаний нижче сценарій, який я використовую на своєму ПК ubuntu? випадок використання такий.

   $ ./focus_win.sh 1            # focus on a application window that executed at first
   $ ./focus_win.sh 2            # second executed application window

Я використовую його після призначення його в спеціальній ярлиці клавіатури. ctrl + 1, ctrl + 2, ...

кішка focus_win.sh

#! /bin/sh

if [ "" = "$1" ] ; then
    echo "usage $0 <win index>"
    exit 1;
fi

WIN_ID=`wmctrl -l | cut -d ' ' -f1 | head -n $1 | tail -n 1`

if [ "" = "$WIN_ID" ] ; then
    echo "fail to get win id of index $1"
    exit 1;
fi
wmctrl -i -a $WIN_ID
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.