यह काम किस प्रकार करता है
नीचे दी गई स्क्रिप्ट माउस पॉइंटर के दो स्थानों के बीच एक क्षेत्र के आकार को मापती है।
यह निम्नानुसार काम करता है:
माउस पॉइंटर को पहली स्थिति में रखें (बिना क्लिक किए)
अपनी पसंद के प्रमुख संयोजन को दबाएं (नीचे देखें)
माउस को दूसरी स्थिति में रखें (फिर बिना क्लिक किए)
अपने कुंजी संयोजन को फिर से दबाएं। एक सूचना आपको क्षेत्र का सटीक आकार (px) बताएगी।
विकल्प
आप चुन सकते हैं (लाइनों में से किसी एक को अनइंस्टॉल करके) आप कैसे सूचित करना चाहते हैं; अधिसूचना द्वारा या तो:
या एक ज़ेनिटी जानकारी विंडो:
(उदाहरण विभिन्न क्षेत्रों से हैं)
कैसे इस्तेमाल करे
स्क्रिप्ट का उपयोग करता है xdotool
:
sudo apt-get install xdotool
एक खाली फ़ाइल में नीचे दी गई स्क्रिप्ट को कॉपी करें, या तो लाइनों में से कोई एक:
command = ['notify-send', 'Area size', str(w)+' x '+str(h)]
( notify-send
विकल्प द्वारा अधिसूचित किया जाना है)
या:
command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]
के लिए Zenity
विकल्प।
स्क्रिप्ट को इसमें सहेजें ~/bin
(आपको संभवतः निर्देशिका बनाना होगा) measure_area
(कोई विस्तार नहीं) और इसे निष्पादन योग्य बनाएं ।
स्क्रिप्ट चलाने के लिए अपनी पसंद का एक मुख्य संयोजन जोड़ें: चुनें: सिस्टम सेटिंग्स> "कीबोर्ड"> "शॉर्टकट"> "कस्टम शॉर्टकट"। "+" पर क्लिक करें और कमांड जोड़ें:
measure_area
टिप्पणियाँ
- आपको पहले / पहले लॉग आउट करना होगा
- इससे कोई फ़र्क नहीं पड़ता कि आप पहले / दूसरे स्थान पर क्या लेते हैं; स्क्रिप्ट निरपेक्ष मूल्यों को मापता है।
लिपी
#!/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)
व्याख्या
जब स्क्रिप्ट को पहली बार कहा जाता है, तो उसे xdotool
कमांड के साथ वर्तमान माउस पोजीशन मिलती है :
xdotool getmouselocation
यह तब स्थिति को एक (अदृश्य) फ़ाइल में बचाता है .measure_area.txt
, दूसरी कॉल की प्रतीक्षा करता है।
दूसरी कॉल पर, यह फ़ाइल को पढ़ता है, इसे हटाता है और संग्रहीत x/y
निर्देशांक की नवीनतम लोगों से तुलना करता है, और उनके बीच के क्षेत्र के आकार की गणना करता है।
संपादित करें
कई सुधारों के साथ स्क्रिप्ट अद्यतित:
- अनुकूलित
subprocess.Popen()
/subprocess.check_output()
कमांड (@muru, @ ट्रेंगॉट के लिए धन्यवाद)
- पहली-डेटा फ़ाइल के साथ कुछ गलत हो जाने की स्थिति में मरम्मत की प्रक्रिया को जोड़ा गया (जैसे यदि उपयोगकर्ता ने पहली बार बिना स्क्रिप्ट चलाने की कोशिश की
xdotool
)
- जब पहला संयोजन के लिए कुंजी संयोजन दबाया जाता है, तो एक छोटा सा पुष्टि स्क्रीन मंद-फ्लैश जोड़ा जाता है। उपयोगकर्ता को किसी प्रकार की कार्रवाई की पुष्टि करने के लिए यह थोड़ा अधिक उपयोगकर्ता के अनुकूल लगता है ।