web-dev-qa-db-ja.com

wmctrlは他のワークスペースを無視します

私の質問は wmctrlが現在のワークスペース以外のウィンドウを無視するようにする と非常に似ています。

事実、私はXFCEを使用しているため、wmctrlは実際により多くのデスクトップを表示します。

petr@sova:~$ wmctrl -d
0  * DG: 1600x900  VP: 0,0  WA: 62,21 1538x879  1
1  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  2
2  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  3
3  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  4
4  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  5
5  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  6
6  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  7
7  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  8
8  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  9

このようなショートカットがたくさんあります:

wmctrl -xa Chromium || chromium-browser

wmctrlに現在のワークスペースのみを検索させるにはどうすればよいですか?カスタムコマンドでwmctrlをラップすることはできます。

5
mreq

わかりました、私は自分のスクリプトを思いついた。少なくとも、Ubuntu bashスクリプトをいくつか学びました;)

#!/bin/bash
num=`wmctrl -d | grep '\*' | cut -d' ' -f 1`
name=`wmctrl -lx | grep $1 | grep " $num " | tail -1`
Host=`hostname`
out=`echo ${name##*$Host}`

if [[ -n "${out}" ]]
    then
        `wmctrl -a "$out"`
    else
        $2
fi

それが何をする:

  1. 現在のデスクトップ番号を取得します
  2. 現在のデスクトップで特定の名前を検索します(パラメーター1)
  3. 次に、結果に応じて:

    • どちらかが見つかったアプリに切り替わります
    • または特定のアプリを起動します(パラメーター2)

使用法(スクリプト名はswitch_to_app

switch_to_app LookForThisString LaunchThisIfNotFound

例えば

switch_to_app Chromium chromium-browser

編集:より素晴らしいバージョン-コマンドを再度起動する(たとえば、もう一度キーストロークを押す)と、ウィンドウの別のインスタンスに切り替わります

#!/bin/bash
app_name=$1
workspace_number=`wmctrl -d | grep '\*' | cut -d' ' -f 1`
win_list=`wmctrl -lx | grep $app_name | grep " $workspace_number " | awk '{print $1}'`

active_win_id=`xprop -root | grep '^_NET_ACTIVE_W' | awk -F'# 0x' '{print $2}' | awk -F', ' '{print $1}'`
if [ "$active_win_id" == "0" ]; then
    active_win_id=""
fi

# get next window to focus on, removing id active
switch_to=`echo $win_list | sed s/.*$active_win_id// | awk '{print $1}'`
# if the current window is the last in the list ... take the first one
if [ "$switch_to" == "" ];then
    switch_to=`echo $win_list | awk '{print $1}'`
fi

if [[ -n "${switch_to}" ]]
    then
        (wmctrl -ia "$switch_to") &
    else
        if [[ -n "$2" ]]
            then
                ($2) &
        fi
fi

exit 0
8
mreq