Nasıl çalışır
Aşağıdaki komut dosyası, fare işaretçisinin iki konumu arasındaki bir alanın boyutunu ölçer.
Aşağıdaki gibi çalışır:
Fare işaretçisini ilk konumuna getirin (tıklatmadan)
İstediğiniz tuş kombinasyonuna basın (aşağıya bakınız)
Fareyi ikinci pozisyona getirin (tekrar tıklatmadan)
Tuş kombinasyonunuza tekrar basın. Bir bildirim size alanın tam boyutunu (px) söyleyecektir.
Seçenekler
Sizden nasıl haberdar edilmek istediğinizi (satırlardan birini açarak) seçebilirsiniz; ya bir bildirim ile:
Veya bir Zenity bilgi penceresi:
(Örnekler farklı alanlardandır)
Nasıl kullanılır
Komut xdotool
şunları kullanır :
sudo apt-get install xdotool
Aşağıdaki betiği boş bir dosyaya kopyalayın, satırlardan herhangi birini yorumlayın
command = ['notify-send', 'Area size', str(w)+' x '+str(h)]
( notify-send
seçenek tarafından bilgilendirilmek için )
veya:
command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]
için Zenity
seçenek.
Komut dosyasını ~/bin
(muhtemelen dizini oluşturmanız gerekecektir) measure_area
(uzantı yok ) olarak kaydedin ve çalıştırılabilir hale getirin .
Komut dosyasını çalıştırmak için istediğiniz bir tuş kombinasyonu ekleyin: Seçin: Sistem Ayarları> "Klavye"> "Kısayollar"> "Özel Kısayollar". "+" İşaretini tıklayın ve şu komutu ekleyin:
measure_area
notlar
- Önce çıkış yapmanız / giriş yapmanız gerekecek
- Birinci / ikinci pozisyon olarak aldığınız şeyi değiştirmez; komut dosyası mutlak değerleri ölçer .
Senaryo
#!/usr/bin/env python3
import subprocess
import os
import math
home = os.environ["HOME"]
area = home+"/"+".measure_area.txt"
def get_pos():
pos_data = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8")
return [m[2:] for m in pos_data.split()[:2]]
def confirm():
get = subprocess.check_output(["xrandr", "--verbose"]).decode("utf-8").split()
for s in [get[i-1] for i in range(len(get)) if get[i] == "connected"]:
br_data = float(get[get.index("Brightness:")+1])
brightness = lambda br: ["xrandr", "--output", s, "--brightness", br]
flash = ["sleep", "0.1"]
for cmd in [brightness(str(br_data-0.1)), flash, brightness(str(br_data))]:
subprocess.call(cmd)
if not os.path.exists(area):
with open(area, "wt") as measure:
measure.write(str(get_pos()))
confirm()
else:
second = get_pos()
with open(area) as first_m:
try:
first = eval(first_m.read())
w = int(math.fabs(int(second[0]) - int(first[0])))
h = int(math.fabs(int(second[1]) - int(first[1])))
#--- uncomment either one of the lines below:
# command = ['notify-send', 'Area size', str(w)+' x '+str(h)]
command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]
#---
confirm()
except SyntaxError:
text = "Please try again, there was an error in the data"
command = ['zenity', '--info', '--title', 'Please try again', '--text', text]
subprocess.Popen(command)
os.remove(area)
açıklama
Betik ilk kez çağrıldığında, şu anki fare pozisyonunu şu xdotool
komutla alır:
xdotool getmouselocation
Daha sonra pozisyonu .measure_area.txt
, ikinci aramayı bekleyerek (görünmez) bir dosyaya kaydeder .
İkinci çağrıda dosyayı okur, kaldırır ve kaydedilen x/y
koordinatları en son olanlarla karşılaştırır ve aralarındaki alanın boyutunu hesaplar.
Düzenle
Komut dosyasını bir dizi iyileştirme ile güncellendi:
- Optimize edilmiş
subprocess.Popen()
/ subprocess.check_output()
komutlar (@muru, @Trengot sayesinde)
- İlk veri dosyasında bir şeyler ters gittiğinde onarım prosedürü eklendi (örneğin, kullanıcı ilk önce komut dosyasını yüklemeden çalıştırmayı
xdotool
denerse)
- İlk koordinatlar için tuş bileşimine basıldığında, küçük bir onay ekranı karartması eklendi. Kullanıcıya vermek için biraz daha kullanıcı dostu görünüyor bazı eylemin onay tür.