web-dev-qa-db-ja.com

現在のワークスペースのアプリケーションのみをランチャーに表示するように設定していますか?

現在のワークスペースの開いているアプリケーションをランチャーで持つことはできますが、他のワークスペースのアプリケーションではありませんか?

28
user165749

Ubuntu 17.10以降に付属するUbuntu Dock(GNOMEを使用)

まあ、他の回答はかなり古いので、最新の回答を追加する価値があると思います。それほど難しいことではありません(Ubuntu 17.10およびGnomeを使用)。

dconf-editorを使用するだけです:

Sudo apt install dconf-editor

org> gnome> Shell> extensions> dash-to-dockに移動し、isolate-workspacesenter image description here

25
Jakub Kopyś

(他の)ワークスペースでアプリケーションを追跡不能にする方法

xdotoolwindowunmapを使用すると、ウィンドウを完全に非表示にすることができます。ウィンドウもそのアプリケーションも、ランチャーアイコンに表示されなくなり、wmctrlの出力にも表示されなくなります。

理論的には、この could は、「 this および this 答えます。それが最もエレガントなソリューションだったでしょう。

ただし、 only 他のワークスペースのウィンドウを非表示にし、現在のワークスペースのウィンドウを自動的に上げるプロセスは、進行中の background スクリプト(現時点では)であり、「風邪を引く」可能性も低いです。エラーが発生するとウィンドウは永久に失われるため、この手順を自動(バックグラウンド)プロセスとして提供しないことにしました。

それでもこの答えが役に立つかどうかは、状況と、他のワークスペースで実行されているアプリケーションのアイコンを非表示にする理由に依存します。決めるのはあなたです。

ソリューション;それが何であり、実際にどのように機能するか

  • 現在のワークスペース(したがってアプリケーション)上のすべてのウィンドウを完全に非表示にするスクリプト。ショートカットキーの下で使用できます。つまり、Unityランチャーのアプリケーションのアイコンには、アプリケーションのアクティビティが表示されません。

    3つの実行中のアプリケーション: enter image description here ショートカットキーを押した後: enter image description here

  • ショートカットキーの組み合わせをもう一度押すと、ウィンドウとそのアプリケーションが再表示されます。

  • キーの組み合わせは、現在のワークスペースからウィンドウとアプリケーションのみを非表示にするため、現在のワークスペースに何が隠れているかを示すことなく、後で別のワークスペースに切り替えることができます。
  • また、 unhiding は現在のワークスペースで(のみ)実行されるため、要するに、非表示と非表示のプロセスは完全に独立した workspace

スクリプト

#!/usr/bin/env python3
import subprocess    
import os
import time

datadir = os.environ["HOME"]+"/.config/maptoggle"
if not os.path.exists(datadir):
    os.makedirs(datadir)
workspace_data = datadir+"/wspacedata_"

def get_wlist(res):
    res = get_res()
    try:
        wlist = [l.split() for l in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()]
        return [w for w in wlist if all([
            0 < int(w[2]) < res[0],
            0 < int(w[3]) < res[1],
            "_NET_WM_WINDOW_TYPE_NORMAL" in subprocess.check_output(["xprop", "-id", w[0]]).decode("utf-8"),
            ])]
    except subprocess.CalledProcessError:
        pass

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def current(res):
    # get the current viewport
    vp_data = subprocess.check_output(
        ["wmctrl", "-d"]
        ).decode("utf-8").split()
    dt = [int(n) for n in vp_data[3].split("x")]
    cols = int(dt[0]/res[0])
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    curr_col = int(curr_vpdata[0]/res[0])+1
    curr_row = int(curr_vpdata[1]/res[1])
    return str(curr_col+curr_row*cols)

res = get_res()

try:
    f = workspace_data+current(res)
    wlist = eval(open(f).read().strip())
    for w in wlist:
        subprocess.Popen(["xdotool", "windowmap", w[0]])
    os.remove(f)
except FileNotFoundError:
    current_windows = get_wlist(res)
    open(f, "wt").write(str(current_windows))
    for w in current_windows:
        subprocess.Popen(["xdotool", "windowunmap", w[0]])

使い方

  1. スクリプトには、wmctrlxdotoolの両方が必要です。

    Sudo apt-get install wmctrl xdotool
    
  2. スクリプトを空のファイルにコピーし、toggle_visibility.pyとして保存します
  3. テスト-スクリプトを実行します。ターミナルウィンドウで、次のコマンドを実行します。

    python3 /path/to/toggle_visibility.py
    

    次に、新しいターミナルウィンドウを開き(最初のウィンドウは地球の表面から見えなくなったように見えるため)、同じコマンドを再度実行します。すべてのウィンドウが再表示されます。

    NB:テスト中に「貴重な」ウィンドウが開いていないことを確認してください

  4. すべて正常に機能する場合は、コマンドをショートカットキーの組み合わせに追加します。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。 「+」をクリックして、コマンドを追加します。

    python3 /path/to/toggle_visibility.py
    

説明

前述のように、スクリプトはxdotoolwindowunmapを使用して、ウィンドウとそれらが属するアプリケーションを(完全に)非表示にします。スクリプト:

  • 現在のワークスペースを読み取ります
  • 現在のワークスペースに存在するウィンドウを読み取ります(のみ)
  • ウィンドウリストを現在のワークスペースにちなんで名付けられたファイルに書き込みます
  • 窓を隠します

次回の実行時に、スクリプトは次のことを行います。

  • 現在のワークスペースに対応するファイルが存在するかどうかを確認します
  • その場合、ウィンドウリストを読み取り、ウィンドウを非表示にします。

したがって、現在のワークスペース上のウィンドウとアプリケーションの可視性を切り替えます。

8
Jacob Vlijm

残念ながらそれは不可能です。

Unityは常にどこからでもすべてのアプリケーションを表示し、これを変更する方法はありません。バグレポートがあります- https://bugs.launchpad.net/ayatana-design/+bug/68317 しかし、開発者は何もしません。おそらく、ページの上部でこのバグがあなたに影響を与えるとマークすると、開発者がそのようなオプションの重要性を理解するのに役立ちます。

6
dofeoct