web-dev-qa-db-ja.com

アプリを開く/前面に表示するカスタムホットキー/ショートカット

これがシステムに組み込まれているとは思いませんが、それほど面倒なことなく行うことは可能ですか?

ホットキーを使用して特定のプログラムを開き、そのホットキーをもう一度押すと、プログラムウィンドウが前面に表示されます。

Ubuntu9.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ウィズではありません。また、私の例が機能するように、後で見つけられるようにウィンドウに一意のタイトルを適用するカスタムプロファイルをターミナルで作成しました。可能性は無限大!

11
Ivan

wmctrlプログラムはまさにあなたが探しているものです(Sudo apt-get install wmctrl)。 wmctrl -a "AppTitle"コマンドを使用して、アプリを前面に表示できます。 wmctrl -lは使用可能なすべてのウィンドウを一覧表示するため、プログラムが実行されているかどうかを確認し、プログラムを起動するか前面に表示するシェルスクリプトを簡単に作成できます。次に、それをキーボードショートカットにバインドできます。

まず、次のスクリプトをどこかに保存します。/home/jtb/code/bringToFrontを使用します。 2つの引数を取ります。1つはプログラムを起動するために端末で入力するもので、2つ目はプログラムウィンドウのタイトルの部分文字列です。タイトルに一定の一意の文字列がない場合は、プログラムのウィンドウを見つけるためにもう少し作業を行う必要があります。

#!/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でダブルクリックします。スクリプトへのフルパスを入力し、2つのパラメータを指定します。 /home/jtb/code/bringToFront firefox Firefox

  4. 左側のパネルから、次のフォルダであるglobal_keybindingsを選択します。定義したコマンドに一致するrunエントリ、おそらくrun_command_1を見つけます。それをダブルクリックして、使用するキーボードショートカットを入力します。修飾子を山かっこで囲みます。例: <Ctrl><Alt>F

今 ControlAltF Firefoxウィンドウを前面に表示するか、まだ実行されていない場合は起動します。

10
jtb

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
3
etuardu

jtb 以前に投稿された回答は優れていますが、正確なタイトルを一致させたい場合があります(たとえば、「GitKraken」を開きたいが、ブラウザのタイトル「GitKraken vsCLI」もクエリと一致しています)。

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

これで、次のようにbringToFrontスクリプトを呼び出すことができます。

#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
Sufian

このソリューションはパラメーター化されていませんが、bring-to-focusまたはstart gnome-calculatorに使用しました。

-Rオプションは、ウィンドウを見つけるか失敗します。見つかった場合は、現在のデスクトップに移動され、上げられてフォーカスが与えられます。 gnome-calculatorは、ウィンドウに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
X Tian

それをありがとう。私はそれの修正バージョンを使用して、複数のインスタンスの循環もサポートするウィンドウショートカットスクリプトを作成します。興味があれば:

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

乾杯:)

0
Soma