আমি কীভাবে উইন্ডোটির মাত্রা এবং সজ্জা সহ সঠিকভাবে অবস্থানটি পাই?


37

আমি একটি ছোট স্ক্রিপ্টে ব্যবহারের জন্য একটি উইন্ডোর আকার বের করার চেষ্টা করছি। আমার বর্তমান কৌশলটি wmctrl -lGমাত্রাগুলি খুঁজে পেতে ব্যবহার করছে। তবে সমস্যাটি হ'ল:

এটি প্রদত্ত x এবং y পরিসংখ্যানগুলি উইন্ডো সজ্জার উপরের বাম দিকের জন্য রয়েছে, যখন উচ্চতা এবং প্রস্থ কেবল সামগ্রীর ক্ষেত্রের জন্য। এর অর্থ হ'ল যদি উইন্ডো সজ্জায় উচ্চতা 20px এবং প্রস্থের 2px যোগ করা হয়, wmctrl একটি উইন্ডোটিকে 640x480 বলে রিপোর্ট করবে, এমনকি যদি এটি স্ক্রিনে 660x482 নেয়। এটি একটি সমস্যা কারণ আমার স্ক্রিপ্টের পরবর্তী পদক্ষেপটি সেই অঞ্চলটি স্ক্রিনটি রেকর্ড করতে ffmpeg বলতে ব্যবহার করা হবে। আমি আমার বর্তমান সেটআপ থেকে উইন্ডো সজ্জার আকারে হার্ডকোডিং এড়াতে চাই।

উইন্ডো অলঙ্করণের আকারটি অর্জন করার একটি পদ্ধতি হ'ল আমি কীভাবে এগুলি 640x480 সামগ্রী ক্ষেত্রের অবস্থান বা উইন্ডো সজ্জার মতো নয়, সরাসরি বিষয়বস্তুর ক্ষেত্রের অবস্থান পাওয়ার উপায় খুঁজে পেতে পারি use ।


1
আমি চিত্রের জন্য চিত্রগুলিতে উচ্চতা এবং প্রস্থ মিশ্রিত করেছি।
মাচা

মৃত চিত্রের লিঙ্ক।
সিরো সান্তিলি 新疆 改造 中心 法轮功 六四 事件

কাছাকাছি প্রশ্ন কিন্তু অন্যান্য বিষয়গুলি জিজ্ঞাসা করে: superuser.com/questions/164047/…
Ciro Santilli 事件 改造 中心 法轮功 六四 事件

উত্তর:


36

নিম্নলিখিত স্ক্রিপ্টটি আপনাকে উইন্ডোর শীর্ষ-বাম স্ক্রিন সমন্বয় এবং আকার দেবে (কোনও প্রসাধন ছাড়াই)। । । । xwininfo -id $(xdotool getactivewindow)আপনার জন্য পর্যাপ্ত তথ্য রয়েছে।


#!/bin/bash
# Get the coordinates of the active window's
#    top-left corner, and the window's size.
#    This excludes the window decoration.
  unset x y w h
  eval $(xwininfo -id $(xdotool getactivewindow) |
    sed -n -e "s/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=\1/p" \
           -e "s/^ \+Absolute upper-left Y: \+\([0-9]\+\).*/y=\1/p" \
           -e "s/^ \+Width: \+\([0-9]\+\).*/w=\1/p" \
           -e "s/^ \+Height: \+\([0-9]\+\).*/h=\1/p" )
  echo -n "$x $y $w $h"
#

এটি কাজ করে বলে মনে হচ্ছে কারণ xdotool getactivewindowএটির মধ্যে থাকা ক্লায়েন্ট উইন্ডোটির পরিবর্তে উইন্ডো ম্যানেজার ফ্রেমের উইন্ডো আইডি (যা প্রসাধন অন্তর্ভুক্ত) ফিরিয়ে দেয়।
অ্যাডাম স্পায়ার্স

2
না, এটি সজ্জা ছাড়াই জ্যামিতি ফিরিয়ে দেয় , যা প্রশ্নটি জিজ্ঞাসা করেছিল তা স্পষ্টভাবে নয়। আপনি যদি সজ্জা অন্তর্ভুক্ত করতে চান না, তবে তা করার সহজ উপায় আছে, উদাহরণস্বরূপxdotool getactivewindow getwindowgeometry
২২

1
এটি আমার পক্ষে ভাল কাজ করে না (যেমন সজ্জা অন্তর্ভুক্ত নয়)। এই উত্তর আরও ভাল।
জান ওয়ার্কোł

7

গৃহীত উত্তরটি পুরো উইন্ডোটি পেতে বাড়ানো যেতে পারে:

entire=false
x=0
y=0
w=0
h=0
b=0  # b for border
t=0  # t for title (or top)

# ... find out what user wants then 

eval $(xwininfo -id $(xdotool getactivewindow) |
  sed -n -e "s/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=\1/p" \
         -e "s/^ \+Absolute upper-left Y: \+\([0-9]\+\).*/y=\1/p" \
         -e "s/^ \+Width: \+\([0-9]\+\).*/w=\1/p" \
         -e "s/^ \+Height: \+\([0-9]\+\).*/h=\1/p" \
         -e "s/^ \+Relative upper-left X: \+\([0-9]\+\).*/b=\1/p" \
         -e "s/^ \+Relative upper-left Y: \+\([0-9]\+\).*/t=\1/p" )
if [ "$entire" = true ]
then                     # if user wanted entire window, adjust x,y,w and h
    let x=$x-$b
    let y=$y-$t
    let w=$w+2*$b
    let h=$h+$t+$b
fi
echo "$w"x"$h" $x,$y

যদিও সহজ, উবুন্টুতে Unক্যতে কাজ না করা 14.04 কারণ সম্পর্কিত তথ্য সমস্ত 0. আমি জিজ্ঞাসা করেছি ityক্যে পুরো উইন্ডো মাত্রা (সজ্জা সহ) পান এবং একটি ভাল উত্তর পেয়েছি। এই উত্তরটি আমি কীভাবে ব্যবহার করেছি তা এখানে:

aw=$(xdotool getactivewindow)
eval $(xwininfo -id "$aw" |
      sed -n -e "s/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=\1/p" \
             -e "s/^ \+Absolute upper-left Y: \+\([0-9]\+\).*/y=\1/p" \
             -e "s/^ \+Width: \+\([0-9]\+\).*/w=\1/p" \
             -e "s/^ \+Height: \+\([0-9]\+\).*/h=\1/p" )
if [ "$entire" = true ]
then
    extents=$(xprop _NET_FRAME_EXTENTS -id "$aw" | grep "NET_FRAME_EXTENTS" | cut -d '=' -f 2 | tr -d ' ')
    bl=$(echo $extents | cut -d ',' -f 1) # width of left border
    br=$(echo $extents | cut -d ',' -f 2) # width of right border
    t=$(echo $extents | cut -d ',' -f 3)  # height of title bar
    bb=$(echo $extents | cut -d ',' -f 4) # height of bottom border

    let x=$x-$bl
    let y=$y-$t
    let w=$w+$bl+$br
    let h=$h+$t+$bb
fi

এই দ্বিতীয় পদ্ধতিটি ইউনিটি এবং এক্সফেস উভয় ক্ষেত্রেই কাজ করে এবং জিনোমেও কাজ করা উচিত।


উবুন্টুতে ইউনিটির বাইরেও শীর্ষস্থানটি ভুল because দ্বিতীয় পদ্ধতির আরও ভাল দেখাচ্ছে।
অ্যাডাম স্পায়ার্স

আমি কেবলমাত্র দ্বিতীয় পন্থাটি পরীক্ষা করে দেখেছি - aw=`xdotool getactivewindow`এক্সউইনিনফো কলটিতে ঝুলানো এড়াতে এটি কেবল শীর্ষে যুক্ত হওয়া প্রয়োজন । এটি জানতে পেরে দুর্দান্ত কারণ আমি ইউনিটিতে স্যুইচ করার কথা ভাবছি, যেখানে সেগফোল্টিং ছাড়া আমি চালানোর জন্য ডাব্লিমিফেস পেতে পারি না।
স্লিপ করুন

@ স্লিংক্প, অনুপস্থিত awসংজ্ঞাটি নির্দেশ করার জন্য ধন্যবাদ । আমি লাইনটি যুক্ত করতে এখনই উত্তরটি সম্পাদনা করব।
কলিন কেইনান

এর দ্বিতীয় অংশটি দুর্দান্ত কাজ করে! জিনোম 3-এ কেবল আমাকে পরিবর্তন করতে হবে তা শিরোনামবারের উচ্চতায় যুক্ত না করা h। দেখে মনে হচ্ছে শিরোনামবারটি ইতিমধ্যে যে উচ্চতা থেকে ফিরে এসেছে সেটিতে অন্তর্ভুক্ত রয়েছে xwininfo
জনি আসমার

6

উইন্ডোর আকার এবং অবস্থান পাওয়ার জন্য অনেক সহজ উপায়:

xdotool getwindowfocus getwindowgeometry

3

স্বীকৃত উত্তরটি সুস্পষ্টভাবে উইন্ডো সজ্জা অন্তর্ভুক্ত করে না। এই প্রশ্নের শিরোনাম অনুসারে, এখনও কীভাবে সমস্ত সজ্জা সহ জ্যামিতিটি পাওয়া যায় তার জন্য , আপনি এই অন্যান্য প্রশ্ন অনুসারে wmiface ব্যবহার করতে পারেন https://superuser.com/questions/164047/how-to-get-accurate-window -অনফর্মেশন-মাত্রা-ইত্যাদি-ইন-লিনাক্স-এক্স । উদাহরণ:

wmiface frameGeometry `wmiface activeWindow`

এটি জ্যামিতি এবং শীর্ষ বামের মতো আপেক্ষিক অবস্থানটি প্রত্যাবর্তন করে:

650x437+0+1003

ডাব্লুএমএফেস সমস্ত লিনাক্স ডিস্ট্রো নিয়ে আসে না বলে মনে হয় না (আমি এটি কোনও প্যাকেজ মিন্ট বা উবুন্টুতে সরবরাহ করিনি) তবে আমি এখানে প্যাকেজগুলি থেকে এটি ইনস্টল করতে সক্ষম হয়েছি: http://kde-apps.org/content/show .php? বিষয়বস্তু = 40425

এবং এটি কোনও দস্তাবেজ বা এমনকি নিয়ে আসে না --help, তবে README এখানে রয়েছে:

https://gitorious.org/wmiface/wmiface/source/ea941eeb2076124734f6a3d3079326c826b462d7:README


দুঃখিত - আমি এটির জন্য আমার আপোসটির জন্য আফসোস করছি কারণ স্বীকৃত উত্তরটিতে আমার মন্তব্য অনুসারে উইন্ডো সজ্জা অন্তর্ভুক্ত রয়েছে।
অ্যাডাম স্পায়ার্স

আমি আশা করি যে সত্য ছিল, কিন্তু দুর্ভাগ্যক্রমে যে মন্তব্যটি ভুল। তারা সক্রিয় উইন্ডো আইডি সম্পর্কে একমত: $ ডাব্লিমিফেস অ্যাক্টিভ উইন্ডো 6291772 $ xdotool getactivewindow 6291772 তবে তারা জ্যামিতির বিষয়ে একমত নয় এবং আমি উদাহরণ দিয়ে নিশ্চিত করতে পারি। স্ক্রিনরোলার যা ডাব্লিমিফেসে উইন্ডো সজ্জা এবং xdotool অন্তর্ভুক্ত নয়। নিজের জন্য চেষ্টা করুন। m wmiface ফ্রেম জ্যামিতি wmiface activeWindow570x434 + 870 + 31 $ এক্সডটুল getwindowgeometry xdotool getactivewindowউইন্ডো 6291772 অবস্থান: 878,77 (পর্দা: 0) জ্যামিতি: 562x407
স্লিঙ্কপ

দুঃখিত, আশা করি আপনি সেখানে কী বোঝাতে চেয়েছিলেন তা ধাঁধা দিতে পারেন ... ইচ্ছুক স্ট্যাকওভারফ্লো মন্তব্যগুলিতে ব্লক কোড নমুনাগুলির অনুমতি দেবে।

3

এক্সডটুল ব্যবহার:

  • প্রথমে আপনার উইন্ডো আইডি নেওয়া দরকার:

sleep 3s && xdotool getactivewindow, আপনার উইন্ডোটি খুলতে আপনার কাছে 3 সেকেন্ড রয়েছে

  • তারপরে আপনার ব্যবহার করা দরকার:
    1. আউটপুট তথ্য পেতে এটি ব্যবহার করুন: xdotool getwindowgeometry $WINDOW_ID
    2. অথবা আপনি যদি শেল প্যারামিটার চান এটি ব্যবহার করুন: xdotool getwindowgeometry -shell $WINDOW_ID

0

এই পৃষ্ঠায় উত্তরগুলির সংমিশ্রণটি আমি এটি ব্যবহার করেছি:

$ sleep 3 && xdotool getwindowfocus getwindowgeometry

Window 88080400
  Position: 4565,2345 (screen: 0)
  Geometry: 1186x885

ওয়ান-লাইনার চালান এবং তারপরে 3 সেকেন্ডের মধ্যে আপনি যে অবস্থান এবং জ্যামিতিটি চান তার উইন্ডোতে ক্লিক করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.