Czy w programie uruchamiającym można otworzyć otwarte aplikacje bieżącego obszaru roboczego, ale nie te z innych obszarów roboczych?
Czy w programie uruchamiającym można otworzyć otwarte aplikacje bieżącego obszaru roboczego, ale nie te z innych obszarów roboczych?
Odpowiedzi:
Cóż, inne odpowiedzi są dość stare, więc myślę, że warto dodać aktualną odpowiedź. Można to zrobić teraz i niezbyt trudne tbh (z Ubuntu 17.10 i posiadającym Gnome).
Wystarczy użyć edytora dconf :
sudo apt install dconf-editor
Przejdź do org> gnome> shell> extensions> dash-to-dock i zaznacz isolate-workspace
Korzystanie xdotool
„s windowunmap
, możliwe jest ukrycie okna całkowicie. Okno, ani jego aplikacja, nie pojawia się już w ikonie programu uruchamiającego i nie jest nawet wymienione na liście wyników wmctrl
.
Teoretycznie można to połączyć z „silnikiem obszaru roboczego”, który został użyty w tej i tej odpowiedzi. To byłoby najbardziej eleganckie rozwiązanie.
Jednak proces ukrywania okien tylko w innych obszarach roboczych i automatycznego podnoszenia okien w bieżącym obszarze roboczym jest zbyt wymagający do użycia w trwającym skrypcie w tle (na razie) i nie jest mało prawdopodobne, aby „złapał przeziębienie”. Ponieważ okna są tracone na zawsze w przypadku błędów, postanowiłem nie oferować procedury jako procesu automatycznego (w tle).
Jeśli ta odpowiedź jest jednak dla Ciebie przydatna lub nie, zależy od sytuacji, a powód, dla którego chcesz ukryć ikony aplikacji działających w innych obszarach roboczych; decyzja jest twoja.
Skrypt dostępny pod klawiszem skrótu, pozornie powodujący całkowite zniknięcie wszystkich okien w bieżącym obszarze roboczym (a więc i aplikacjach). Oznacza to, że ikona aplikacji w programie uruchamiającym Unity pokazuje brak aktywności aplikacji:
Ponowne naciśnięcie kombinacji klawiszy Schortcut spowoduje ponowne pojawienie się okien i ich aplikacji.
#!/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]])
Skrypt potrzebuje zarówno wmctrl
a xdotool
:
sudo apt-get install wmctrl xdotool
toggle_visibility.py
Testuj - uruchom skrypt: w oknie terminala uruchom polecenie:
python3 /path/to/toggle_visibility.py
Teraz otwórz nowe okno terminala (ponieważ pierwsze pozornie zniknęło z powierzchni ziemi) i ponownie uruchom to samo polecenie. Wszystkie okna powinny pojawić się ponownie.
Uwaga : upewnij się, że nie masz otwartych „cennych” okien podczas testowania
Jeśli wszystko działa poprawnie, dodaj polecenie do kombinacji klawiszy skrótu: wybierz: Ustawienia systemu> „Klawiatura”> „Skróty”> „Skróty niestandardowe”. Kliknij „+” i dodaj polecenie:
python3 /path/to/toggle_visibility.py
Jak już powiedziano, skrypt używa xdotool
' windowunmap
, aby (całkowicie) ukryć okna i aplikacje, do których należą. Scenariusz:
Przy następnym uruchomieniu skrypt:
w ten sposób przełącza się widoczność okien i aplikacji w bieżącym obszarze roboczym.
ctrl
+ shift
+arrow key
Niestety jest to niemożliwe.
Unity zawsze pokazuje wszystkie aplikacje z dowolnego miejsca i nie ma sposobu, aby to zmienić. Jest raport o błędzie - https://bugs.launchpad.net/ayatana-design/+bug/683170 Ale wydaje się, że programiści nic nie zrobią. Prawdopodobnie, jeśli zaznaczysz na górze strony, że ten błąd dotyczy ciebie, pomoże to programistom zrozumieć znaczenie takiej opcji.