यहाँ UNIX तरीके से पालन करने का एक और उपाय है!
पहली नजर में, यह आपकी तरह सुंदर नहीं है, @ t7ko:
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ | xargs -I{} xdotool search --all --pid {} --name 'TODO' getwindowgeometry | sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
लेकिन मेरे साथ सहन करो! इसमें कुछ छिपा हुआ सौंदर्य है।
संक्षेप में, यह
- एक वृक्ष की संरचना के बजाय एक रैखिक संरचना है , जैसे दो आयामों के बजाय एक
- अधिक प्रसिद्ध शेल सिंटैक्स का उपयोग करता है ।
- वास्तव में आपके प्रश्न का उत्तर देता है: यह खिड़की का पता लगाता है।
(क्या ये बिंदु फायदे हैं संदर्भ पर निर्भर करते हैं - चलो बस इस पहलू को अनदेखा करें * )
मैं नीचे दिए गए अधिक संरचित लेआउट में समान कोड दिखाऊंगा, ताकि चरण दर चरण समझने में आसानी हो।
लेकिन ध्यान दें कि इंडेंटेशन कमांड को समझाने के लिए है - यह नेस्टिंग या ऐसा नहीं दर्शाता है, सभी अभी भी एक रेखीय UNIX पाइपलाइन है।
एक ही कमांड, बस पाइप के बाद विभाजित ( |):
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ |
xargs -I{} xdotool search --all --pid {} --name 'TODO' getwindowgeometry |
sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
पूर्ण कमांड, जैसा कि ऊपर दिखाया गया है, gvimखिड़की के पिक्सेल स्थान देता है , रिटर्निंग पिक्सेल वर्तमान के ऊपरी बाएं कोने (संभवतः आभासी) स्क्रीन के सापेक्ष समन्वय करता है x,y, जैसे 42,433, या शायद -5375,-3809जब यह चार में से चार वर्चुअल स्क्रीन पर हो। , और वर्तमान एक दाईं ओर कहीं नीचे है।
अभी के लिए, मैं केवल एक X11 विंडो आईडी खोजने के लिए कमांड को छोटा करूंगा - हो सकता है कि वह सब कुछ जो ओपी द्वारा आवश्यक था, न कि:
छोटा कमांड पाइप लाइन, प्रत्येक लाइन पर एक अलग शेल कमांड:
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ |
xargs -I{} xdotool search --all --pid {} --name 'TODO'
अब, यह पठनीय होना शुरू होता है:
xdotool \
search --onlyvisible --class 'gvim' \
getwindowpid %@ |
xargs -I{} \
xdotool search --all --pid {} --name 'TODO'
xdotoolआदेश search"के साथ खिड़कियां लगाने के लिए प्रयोग किया जाता है वर्ग " gvimकुछ "आंतरिक" खिड़कियों से बाहर छोड़ रहा है,। परिणाम को PID's (प्रोसेस आइडेंटिफ़ायर) के रूप में सूचीबद्ध किया गया है ।
प्रत्येक के लिए PID, xargsएक और चलाता है xdotool search, हमारे उदाहरण पैटर्न के लिए "नाम" की TODOजाँच - के लिए जाँच करने के बाद PID।
(बस मामले में: अंत होने वाली रेखाएं \- जिन्हें निरंतरता रेखाएं कहा जाता है - वास्तव \में न्यूलाइन से पहले और नहीं व्हाट्सएप के साथ समाप्त होने की आवश्यकता है ।)
अब वापस मूल आदेश पर जाएं:
xdotool \
search --onlyvisible --class 'gvim' \
getwindowpid %@ |
xargs -I{} \
xdotool \
search --all --pid {} --name 'TODO' \
getwindowgeometry |
sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
शेष भाग, स्थिति सहित खिड़की के बारे में कुछ विवरणों को सूचीबद्ध करता है। sedआदेश मैच और रिटर्न केवल x,yस्थिति मूल्य।
उदाहरण के लिए, gvimस्क्रीन पर "TODO" के साथ मेरी 16 वीं वर्चुअल स्क्रीन (4 बाय 4) पर शीर्ष पर कमांड चल रही है :
$ xdotool search --onlyvisible --class 'gvim' getwindowpid %@ | xargs -I{} xdotool search --all --pid {} --name 'TODO' getwindowgeometry | sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
-7653,-4732
*) डिस्क्लेमर: मुझे @ t7ko का कोड पसंद है। बहुत!
xdotoolबेकार है ... यह इतना सरल ऑपरेशन है और इसे सुरुचिपूर्ण तरीके से करने का कोई तरीका नहीं है।