DÜZENLE
(Yeni cevap)
YAPILAN.
Aşağıdaki cevap, cilalı bir biçimde, gösterge olarak, Güven, Xenial, Yakkety ve Zesty için bir ppa olarak mevcuttur:
sudo apt-add-repository ppa:vlijm/windowspy
sudo apt-get update
sudo apt-get install windowspy
Th göstergesi (önizleme penceresi dahil) artık meyve suyunda oldukça düşük. Seçenekler arasında bir pencere penceresi, pencere kenarı boyutunu / rengini ayarlama ayarları penceresi bulunur.
Bu arada, AU penceresine göz kulak olmanın yararlı olduğunu gördüm; bakalım mesaj var mı :)
ESKİ CEVAP
( ilk ikinci kaba konsept)
Başka bir çalışma alanında bir pencerenin simge durumuna küçültülmüş şekilde gösterilmesini sağlayın
Sürpriz ve aldatmaca olsun, kendi (büyük) sürprizime göre, etkili bir şekilde yapılabilir; Başka bir çalışma alanında bir pencerenin güncellenmiş bir temsiline sahip olmak Bir filmi izlemek için uygun değil , kesinlikle başka bir pencereye göz kulak olacak kadar iyi (örneğin: TV kartı pencerem):
Uygulamada nasıl çalışır?
Pencerenin önünde, bir kısayol tuşuna basın:
(pencere küçültülür)
Başka bir çalışma alanına gidin, kısayol tuşuna tekrar basın, her 4 saniyede bir güncellenen, pencerenin küçük bir gösterimi görünecektir:
Pencere her zaman diğer pencerelerin üstünde gösterir. Olduğu gibi, pencere 300px (genişlik), ancak herhangi bir boyuta ayarlanabilir.
Sonlandırmak için kısayol tuşuna (tekrar) basın. Küçük pencere kapanacak, orijinal pencerenin görünüm alanına, tekrar görüntülenecek ve küçültülmeyecektir.
Scriptler
Kontrol komut dosyası
#!/usr/bin/env python3
import subprocess
import os
import sys
import time
# paths
imagepath = os.path.join(os.environ["HOME"], ".showcase")
wfile = os.path.join(imagepath, "currentwindow")
vpfile = os.path.join(imagepath, "last_vp")
# setup path
if not os.path.exists(imagepath):
os.mkdir(imagepath)
def get(command):
try:
return subprocess.check_output(command).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
def get_vp():
open(vpfile, "wt").write(get(["wmctrl", "-d"]).split()[5])
def run(command):
subprocess.Popen(command)
def convert_tohex(widxd):
return widxd[:2]+((10-len(widxd))*"0")+widxd[2:]
def check_windowtype(wid):
check = get(["xprop", "-id", wid])
return not any([s in check for s in [
"_NET_WM_WINDOW_TYPE_DOCK",
"_NET_WM_WINDOW_TYPE_DESKTOP"]])
def edit_winprops(wid, convert=True):
run(["xdotool", "windowminimize", wid])
if convert:
widxd = convert_tohex(hex(int(wid)))
else:
widxd = wid
run(["wmctrl", "-i", "-r", widxd, "-b", "add,sticky"])
get_vp()
open(os.path.join(imagepath, "currentwindow"), "wt").write(widxd)
def initiate_min():
# if not, minmize window, write the file
wid = get(["xdotool", "getactivewindow"])
if check_windowtype(wid):
edit_winprops(wid)
else:
pidinfo = [l.split() for l in wlist.splitlines()]
match = [l for l in pidinfo if all([
get(["ps", "-p", l[2], "-o", "comm="]) == "VirtualBox",
not "Manager" in l])]
if match:
edit_winprops(match[0][0], convert=False)
# windowlist
wlist = get(["wmctrl", "-lp"])
if "Window preview" in wlist:
# kill the miniwindow
pid = get(["pgrep", "-f", "showmin"])
run(["kill", pid])
window = open(wfile).read().strip()
viewport = open(vpfile).read().strip()
run(["wmctrl", "-o", viewport])
time.sleep(0.3)
run(["wmctrl", "-i", "-r", window, "-b", "remove,sticky"])
run(["wmctrl", "-ia", window])
os.remove(wfile)
else:
# check if windowfile exists
wfileexists = os.path.exists(wfile)
if wfileexists:
# if file exists, try to run miniwindow
window = open(wfile).read().strip()
if window in wlist:
# if the window exists, run!
run(["showmin", window])
else:
# if not, minmize window, write the file
initiate_min()
else:
# if not, minmize window, write the file
initiate_min()
Pencere temsilcisi temsil
#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GObject
from PIL import Image
import os
import subprocess
import time
from threading import Thread
import sys
wid = sys.argv[1]
xsize = 300
imagepath = os.path.join(os.environ["HOME"], ".showcase")
if not os.path.exists(imagepath):
os.mkdir(imagepath)
img_in = os.path.join(imagepath, "image.png")
resized = os.path.join(imagepath, "resized.png")
def get_img():
subprocess.Popen([
"import", "-window", wid, "-resize", str(xsize), resized
])
get_img()
class Splash(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Window preview")
maingrid = Gtk.Grid()
self.add(maingrid)
self.image = Gtk.Image()
# set the path to the image below
self.resized = resized
self.image.set_from_file(self.resized)
maingrid.attach(self.image, 0, 0, 1, 1)
maingrid.set_border_width(3)
self.update = Thread(target=self.update_preview)
self.update.setDaemon(True)
self.update.start()
def update_preview(self):
while True:
get_img()
time.sleep(3)
GObject.idle_add(
self.image.set_from_file, self.resized,
priority=GObject.PRIORITY_DEFAULT
)
def miniwindow():
window = Splash()
window.set_decorated(False)
window.set_resizable(False)
window.set_keep_above(True)
window.set_wmclass("ShowCase", "showcase")
window.connect("destroy", Gtk.main_quit)
GObject.threads_init()
window.show_all()
window.move(70, 50)
Gtk.main()
miniwindow()
Nasıl kullanılır
Yükleme python3-pil
, xdotool
vewmctrl
sudo apt-get install xdotool wmctrl python3-pil
Henüz mevcut değilse, dizini oluşturun ~/bin
.
- Komut 1'i kopyalayın, komut dosyasını kontrol edin (tam olarak)
showcase_control
(uzantı yok) ~/bin
ve çalıştırılabilir hale getirin .
- Komut dosyası 2'yi, mini pencere komut dosyasını (tam olarak)
showmin
(uzantı yok) içine kopyalayın ~/bin
ve yürütülebilir hale getirin .
Oturumu kapatın ve tekrar açın ve aşağıdaki komutu seçtiğiniz bir kısayola ekleyin:
showcase_control
Seçin: Sistem Ayarları> "Klavye"> "Kısayollar"> "Özel Kısayollar". "+" İşaretini tıklayın ve şu komutu ekleyin:
showcase_control
ve çalışması gerekir!
- Mevcut pencereyi kapmak için tuşa bir kez basın.
- Mini pencereyi istediğiniz diğer çalışma alanına taşıyın
- Mini pencereyi göstermek için tekrar basın
- Orijinal çalışma alanına geri dönmek için tekrar basın, (otomatik olarak) orijinal pencereyi küçültün ve mini -on'u kapatın.
Downsides?
Kur, şu anda olduğu gibi, işlemciniz için bazı işler ekler . Bununla birlikte (çok) eski sistemimde, (ortalama) appr. % 4-5, sanırım hiçbir şekilde farketmedim .
Güncelleme: Görünüşe göre import
, bir adımda görüntüyü, pencere görüntüsünü getirerek yeniden boyutlandırabilirsiniz . Bu, işlemci yükünde önemli bir azalma anlamına gelir. Aynı zamanda, yenileme süresi daha kısadır (şimdi 3 saniye), hala daha düşük "maliyetler" altındadır.
açıklama
- Başlangıç noktam, OP'nin başka bir çalışma alanındaki bir pencerede göz tutma seçeneğini ya da bir şeyin bitmesini bekleyen seçeneği kullanmak istediğinden bahsetti.
- İken anlamıyla tam (mini) başka çalışma alanında bir pencerenin kopya sahip imkansız görünüyor, biz olabilir , mevcut bir pencerenin bir görüntü yapmak
import
pencereyi kimliğe sahip bir kez, -Komut. Her ikisi de odaklanmayan küçültülmüş pencerelerde veya pencerelerde çalışırken, bununla ilgili bir sorun var: pencerenin geçerli çalışma alanında olması gerekiyor .
- İşin püf noktası geçici olarak (mini-pencere kullanılırken) pencereyi "yapışkan" yapmak (
wmctrl
aynı anda tüm çalışma alanlarında hemen hemen kullanılabilir) yapmak , ancak aynı anda en aza indirmektir.
- Her şey otomatik olarak yapıldığından, fark etkin değildir, çünkü başlangıç görünüm penceresine geri dönülür, orijinal pencereyi "un" kaldırır ve küçültür, otomatik olarak yapılır.
Kısacası:
- Kısayola bir kez basıldığında: hedeflenen pencere yapışkan yapılır, ancak simge durumuna küçültülür
- Tekrar basıldığında (muhtemelen başka bir çalışma alanında): pencerenin küçük bir sürümü sol üst köşede dört saniyede bir güncellenir.
- Tekrar basıldığında: mini pencere kapatılır, masaüstü pencerenin ilk çalışma alanına gider, pencere sabitlenmez ve simge durumuna küçültülür.
Özellikle VirtualBox için
VBox penceresi öndeyken, Ubuntu kısayol tuşlarının devre dışı bırakıldığı (!) Olduğu için kontrol komut dosyasının başka bir şekilde başlatılması gerekir. Birkaç kısa olanın altında.
seçenek 1
Kontrol komut dosyasını düzenledim. Şimdi sadece VirtualBox durumunda:
Masaüstünde herhangi bir yeri tıklayın , sonra kısayol tuşuna basın. Ondan sonra, sadece pencereyi göstermek ve çıkmak için kısayol tuşunu kullanın.
Açıklama: Masaüstünü simge durumuna küçültmek istemeyeceğiniz için, pencere "desktop" türündeyse, kontrol komut dosyası çıkmak için yapıldı. Şimdi, komut dosyası, şu anda etkin olan pencerenin masaüstüyse hedeflenmesini hedefleyen VirtualBox pencerelerini arar.
seçenek 2
Aşağıdaki simgeyi kopyalayın (sağ tıklayın -> farklı kaydet), farklı kaydet minwinicon.png
Aşağıdaki satırları boş bir dosyaya kopyalayın, minwin.desktop
içindeki gibi kaydedin ~/.local/share/applications
:
[Desktop Entry]
Type=Application
Name=Window Spy
Exec=showcase_control
Icon=/path/to/minwinicon.png
StartupNotify=false
Başlatıcının yerel ~/bin
yolu "bulması" için oturumu kapatıp tekrar açmanız gerekir !
Kullanmak için simgeyi başlatıcıya sürükleyin.
İkinci çözümün önemli bir dezavantajı vardır: başlatıcıdan kullandıktan sonra, birkaç saniye boyunca yanıp sönmeye devam eder ve bir pencerenin görünmesini bekler. Bu sırada, tekrar tıklamanın hiçbir etkisi olmaz. Yani olabilir açıklandığı gibi, çözülecek burada , ama bu cevap gerçekten çok uzun bunu yapacağını dahil. İkinci seçeneği kullanmak istiyorsanız, lütfen bağlantıya bakınız.