現在のワークスペースの開いているアプリケーションをランチャーで持つことはできますが、他のワークスペースのアプリケーションではありませんか?
現在のワークスペースの開いているアプリケーションをランチャーで持つことはできますが、他のワークスペースのアプリケーションではありませんか?
回答:
まあ、他の回答はかなり古いので、最新の回答を追加する価値があると思います。今のところそうすることは可能ですが、それほど難しいことではありません(Ubuntu 17.10およびGnomeを使用)。
dconf-editorを使用するだけです:
sudo apt install dconf-editor
使用してxdotool
のwindowunmap
、完全にウィンドウを非表示にすることも可能です。ウィンドウもそのアプリケーションもランチャーアイコンに表示されなくなり、出力にも表示されなくなります。wmctrl
。
理論的には、これはこれとこれで使用された「ワークスペースエンジン」に接続できます。答え。それが最もエレガントなソリューションだったでしょう。
ただし、他のワークスペースのウィンドウのみを非表示にし、現在のワークスペースのウィンドウを自動的に上げるプロセスは、進行中のバックグラウンドスクリプトで使用するには非常に要求が厳しく、「風邪をひく」可能性も低いです。エラーが発生するとウィンドウは永久に失われるため、この手順を自動(バックグラウンド)プロセスとして提供しないことにしました。
それでもこの答えが役に立つかどうかは、状況と、他のワークスペースで実行されているアプリケーションのアイコンを非表示にする理由に依存します。決めるのはあなたです。
現在のワークスペースにすべてのウィンドウを作成しているように見える、ショートカットキーの下で使用可能なスクリプト(およびアプリケーション)を完全に非表示にします。つまり、Unityランチャーのアプリケーションのアイコンには、アプリケーションのアクティビティが表示されません。
ショートカットキーの組み合わせをもう一度押すと、ウィンドウとそのアプリケーションが再表示されます。
#!/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]])
このスクリプトは、両方を必要とするwmctrl
とxdotool
:
sudo apt-get install wmctrl xdotool
toggle_visibility.py
テスト-スクリプトを実行します。ターミナルウィンドウで、次のコマンドを実行します。
python3 /path/to/toggle_visibility.py
次に、新しいターミナルウィンドウを開き(最初のウィンドウは地球の表面から見えなくなったように見えるため)、同じコマンドを再度実行します。すべてのウィンドウが再表示されます。
注意:テスト中に「貴重な」ウィンドウが開いていないことを確認してください
すべてが正常に機能する場合は、コマンドをショートカットキーの組み合わせに追加します。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。「+」をクリックして、コマンドを追加します。
python3 /path/to/toggle_visibility.py
スクリプトが使用する、述べxdotool
さんwindowunmap
(完全に)非表示ウィンドウに、アプリケーションは、彼らが属します。スクリプト:
次回の実行時に、スクリプトは次のことを行います。
したがって、現在のワークスペース上のウィンドウとアプリケーションの可視性を切り替えます。
ctrl
+ shift
+のショートカットキーを置き換えるPythonスクリプトを書くことができますarrow key
残念ながらそれは不可能です。
Unityは常にどこからでもすべてのアプリケーションを表示し、これを変更する方法はありません。バグレポートがあります-https://bugs.launchpad.net/ayatana-design/+bug/683170 しかし、開発者は何もしません。おそらくこのバグがあなたに影響を与えることをページの上部にマークすると、開発者がそのようなオプションの重要性を理解するのに役立ちます。