Спеціальна гаряча клавіша / ярлик, щоб відкрити / перенести перед програмою


11

Я не думаю, що це вбудовано в систему, але чи можна це зробити без зайвих клопотів?

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

Я хочу це зробити на Ubuntu 9.04.

Може, з D-Bus? Будь-які експерти?

Оновлення : Ось що я закінчив, якщо це комусь допоможе:

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

Звичайно, це може бути спрощено, але я не bashчарівник. Крім того, щоб мій приклад працював, я створив спеціальний профіль у Terminal, який застосовує унікальний заголовок до вікна, щоб його можна було знайти згодом. Можливості безмежні!


1
Для цього простого завдання метод jtb працює краще, оскільки xdotools іноді викидає помилки X, а wmctrl - швидше.
Іван

Відповіді:


10

wmctrlПрограма тільки те , що ви шукаєте ( sudo apt-get install wmctrl). За допомогою wmctrl -a "AppTitle"команди можна перенести додаток на фронт. wmctrl -lбуде перераховано всі доступні вікна, тож слід легко написати сценарій оболонки, який перевіряє, чи працює ваша програма, або запускає її, або виводить її на передню частину. Тоді ви можете просто прив’язати це до комбінації клавіш.

Спочатку збережіть десь такий скрипт, який я використаю /home/jtb/code/bringToFront. Це потребує двох аргументів, перший - це те, що ви введете в терміналі для запуску програми, другий - підрядний заголовок вікна програми. Якщо в заголовку немає постійного унікального рядка, знадобиться зробити трохи більше роботи, щоб знайти вікно програми.

#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]  
then
    wmctrl -a "$2"
else
    $1 &
fi
  1. Зі скриптом у вашому поточному каталозі запустіть, chmod +x bringToFrontщоб зробити сценарій виконуваним. Потім переконайтеся, що воно працює; для запуску / фокусування Firefox ви могли запустити ./bringToFront firefox "Mozilla Firefox".

  2. Тепер нам потрібно зв'язати ярлик клавіші. Запустіть gconf-editorта перейдіть до структури папки ліворуч до /apps/metacity/keybinding_commands.

  3. Двічі клацніть на першому commandз порожнім значенням, напевно command_1. Введіть повний шлях до сценарію та введіть два параметри, наприклад /home/jtb/code/bringToFront firefox Firefox.

  4. На панелі зліва виберіть global_keybindingsнаступну папку вгору. Знайдіть runзапис, що відповідає команді, яку ви тільки що визначили run_command_1. Двічі клацніть по ньому та введіть комбінацію клавіш, яку ви хочете використовувати. Покладіть модифікатори в кутові дужки, наприклад <Ctrl><Alt>F.

Тепер Control+ Alt+ Fприведе ваше вікно Firefox на передню панель або запустить його, якщо воно ще не працює.


Так, я дізнався про це пару хвилин тому, але поїхав з xdotool. Дякую!
Іван

Я забув згадати, що я також використав глобальні ярлики та команди в gconf, щоб повністю досягти ефекту (консоль Quake бідолахи!).
Іван

Ага, так, я ще не використовував xdotool, але, схоже, це дасть вам більше гнучкості. Хороший момент щодо gconf. Оскільки це досить очевидно, я можу також редагувати відповідь, щоб включити більше деталей для тих, хто хоче це зробити.
jtb

Консоль Quake Poort Man? Ти маєш на увазі, як Тільда? freshmeat.net/projects/tilda
престомація

Так, я також використовую Tilda, але я працюю над декількома проектами протягом тижня, і для кожного я завжди відкриваю три-чотири вкладки, тому швидке перемикання на консоль проекту ("робочу область") без захаращення для мене Tilda дуже корисно.
Іван

3

Ось ще один спосіб зробити це xdotools. Процес спливаючого вікна розпізнається в командному рядку, виданому для його запуску (не потрібен pid-файл або унікальна назва вікна).

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

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

http://somanov.wordpress.com/2009/12/02/window-shortcuts-for-linux-desktops/

ура :)


0

Відповідь, опублікована раніше jtb , відмінна, але іноді ви хочете відповідати точним заголовкам (наприклад, ви хочете відкрити "GitKraken", але назва вашого браузера "GitKraken vs CLI" також відповідає запиту).

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

Тож тепер ви можете зателефонувати своєму сценарію doneToFront таким чином:

#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

Це рішення не параметризоване, але я використовував його для приведення в фокус або запуск калькулятора гнома.

Опція -R знаходить вікно або виходить з ладу, якщо його знайшли, його переміщують на поточний робочий стіл, піднімають і надають фокус. Калькулятор gnome називає це вікно з іменем Calculator , його можна легко параметризувати, але я ніколи не знаходжу необхідності в цьому. У мене це відображено 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

У мене була така ж проблема, і оскільки я не знайшов жодного підходящого рішення, я зробив таке:

https://hyperkeys.xureilab.com

https://github.com/xurei/hyperkeys

Ви можете закріпити вікно за допомогою визначеного вами ярлика. Я особисто використовую SHIFT + ALT + [QWER] для підключення та ALT + [QWER] для виведення на передню частину. Ви не можете відкрити додаток, якщо він не відкритий.

Це інструмент з відкритим кодом, перший для linux. Також доступна версія Windows.

Сподіваюся, це допомагає! Я шукаю відгуки, тому якщо у вас виникли питання, створіть питання ;-)

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