ডাব্লুএমটিআরটিএল উইন্ডো মুভ কমান্ডে কি বিচ্যুতি ঘটায়


13

Wmctrl সম্পর্কে

সঙ্গে wmctrl(ডিফল্ট দ্বারা ইনস্টল করা), আমরা উইন্ডোজ, তাদের আইডি, তাদের জ্যামিতি সম্পর্কে তথ্য পেতে পারেন, PID তারা ইত্যাদি আমরা করতে অন্তর্গত সরাতে বা পুনরায় আকার দেওয়ার বিভিন্ন কমান্ড দিয়ে জানালা। তবে কিছু দিক থেকে এর আচরণ যৌক্তিক বলে মনে হয় না। আমার প্রশ্ন উইন্ডো সরিয়ে নিয়ে যাওয়া সম্পর্কে wmctrl:

তথ্য প্রাপ্তি

আমি যখন আদেশটি চালাচ্ছি:

wmctrl -lG

আমি নীচে (উইন্ডো) ছবিতে উইন্ডো সম্পর্কে নিম্নলিখিত তথ্য পেয়েছি:

0x04200085  0 746  443  468  205  jacob-System-Product-Name Niet-opgeslagen document 1 - gedit

3-5 কলামে জ্যামিতির তথ্য আমাদের x / y স্থানাঙ্ক এবং প্রস্থ / উচ্চতা বলে।

উইন্ডোটি সরানো / পুনরায় আকার দেওয়া হচ্ছে

যখন আমি এই সমন্বয়গুলি একটি উইন্ডোটি সরানোর / পুনরায় আকারwmctrl দেওয়ার জন্য কমান্ডটিতে রাখি , তখন এটি কিছুই করা উচিত নয়, যেহেতু স্থানাঙ্কগুলি অপরিবর্তিত থাকে:

wmctrl -ir 0x04200085 -e 0,746,443,468,205

চ্যুতি

তবে নীচের ছবিগুলি উইন্ডোটিকে নীচের দিকে সরানো হয়েছে (২৮ পিক্সে যথাযথ হতে হবে) show আমি ধরে নিয়েছিলাম কারণটি ছিল wmctrl উইন্ডো মুভ কমান্ডটি কার্যকারী অঞ্চল (স্ক্রিন বিয়োগ প্যানেল উচ্চতা) wmctrl -lGদিয়ে গণনা করা হয়েছিল , যখন কমান্ডটি মোট পর্দার আকারের সাথে গণনা করা হয়েছিল । তারপরে 4px তবে অব্যক্ত নয় (প্যানেলটি 24px উচ্চ)।

যদিও স্ক্রিপ্টগুলিতে বিচ্যুতিটি খুব ভালভাবে ক্ষতিপূরণ দেওয়া যেতে পারে, আমি কারণটি বুঝতে পারি না তা সন্তুষ্ট নয়, সুতরাং প্রশ্নটি হ'ল:

ঠিক এই বিচ্যুতির কারণ কী?


এর আউটপুটে সঠিক স্থানাঙ্কের সাথে উইন্ডো wmctrl -lGসরিয়ে নেওয়া উইন্ডোটি সরানো উচিত নয়, তবে তা করে it

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন


আমার "অদ্ভুত" সমাধানটি হ'ল বর্তমান স্থানাঙ্কগুলি সংরক্ষণ করা, সেই স্থানাঙ্কগুলিতে সরে যাওয়া, নতুন স্থানাঙ্ক পাওয়া, পার্থক্যগুলি পাওয়ার জন্য সংরক্ষিত স্থানাঙ্কগুলি বিয়োগ করা। তারপরে পার্থক্যগুলি মূল স্থানাঙ্কগুলিতে প্রয়োগ করুন এবং সমন্বিত স্থানাঙ্কগুলিতে যান move এটি যত শোনাচ্ছে তার চেয়ে সহজ।
WinEunuuchs2Unix

উত্তর:


18

যা ঘটছে তা হ'ল ডাব্লুএমটিআরএল সজ্জায় অভ্যন্তরের উইন্ডোর জ্যামিতি ফিরিয়ে দিচ্ছে (যেমন শিরোনাম বার এবং সীমানা সহ নয়) তবে সরানোর জন্য বৃহত্তর উইন্ডো অবস্থানটি ব্যবহার করছে।

(কিছু কমান্ড আউটপুট লাইন সরানো হয়েছে: xdotoolসম্ভবত ইনস্টল করা যাবে না)

$ wmctrl -lG
0x04000040  0 702  23   900  950  KMatrix dave@KMatrix: test – Konsole

$ xdotool getwindowgeometry 0x04000040
Window 67108928
  Position: 702,23 (screen: 0)
  Geometry: 900x950

পরবর্তী কমান্ডটি আগ্রহের উইন্ডোর জন্য অনুরোধ জানায় এবং মূল উইন্ডোটি দেয় যা সমস্ত সজ্জা অন্তর্ভুক্ত করে এবং উইন্ডো থিমের ব্যবহারের ভিত্তিতে পরিবর্তিত হয়।

$ xdotool selectwindow
25166060

$ xdotool getwindowgeometry 0x18000ec
Window 25166060
  Position: 700,0 (screen: 0)
  Geometry: 904x977

আপনি দেখতে পাচ্ছেন, এটি একটি ভিন্ন উইন্ডো; এক্স অবস্থানটি 2px বাম দিকে (702-2) থেকে শুরু হয় এবং মোট প্রস্থ 4px (900 + 2 + 2) দ্বারা বড় হয় কারণ ডান সীমানাটি 2pxও হয়। Y উচ্চতর (শীর্ষ সীমানার উপরে, যদি থাকে তবে, এবং শিরোনাম বার); উচ্চতা বৃহত্তর কারণ সমস্ত প্লাস নীচের সীমানা।

ডাব্লুএমটিআরএল শিশু উইন্ডোর পছন্দসই [এক্স, ওয়াই] অবস্থানে প্যারেন্ট উইন্ডোটিকে সরায়; নীচে "আগে এবং পরে" দেখানো হয়েছে প্রস্থ এবং উচ্চতা শিশুকে সঠিকভাবে প্রয়োগ করা হয়।

$ wmctrl -lG
0x04000040  0 702  23   900  950  KMatrix dave@KMatrix: test – Konsole

$ xdotool getwindowgeometry 0x18000ec   # (PARENT)
Window 25166060
  Position: 700,0 (screen: 0)
  Geometry: 904x977

$ xdotool getwindowgeometry 0x04000040  # (CHILD)
Window 67108928
  Position: 702,23 (screen: 0)
  Geometry: 900x950

$ wmctrl -ir 0x04000040 -e 0,702,23,900,950   # <----- "MOVE/RESIZE" *****

$ wmctrl -lG
0x04000040  0 704  46   900  950  KMatrix dave@KMatrix: test – Konsole

$ xdotool getwindowgeometry 0x18000ec   # (PARENT)
Window 25166060
  Position: 702,23 (screen: 0)    <----- Desired [X,Y] applied to parent
  Geometry: 904x977

$ xdotool getwindowgeometry 0x04000040  # (CHILD)
Window 67108928
  Position: 704,46 (screen: 0)
  Geometry: 900x950               <----- Desired [W,H] applied to child

সম্পাদনা করুন: অতিরিক্ত তথ্য।

ডেস্কটপ জ্যামিতি, ভিউপোর্ট এবং ওয়ার্কারিয়া

$ wmctrl -d    # (KDE)
0  * DG: 1680x1050  VP: 0,0  WA: 0,0 1680x1015  Desktop 1
$ xdotool -v
xdotool version 3.20140217.1

https://github.com/jordansissel/xdotool

পুনঃ @ মন্তব্যে স্নিটারের টিপ

$ xprop | grep FRAME
_KDE_NET_WM_FRAME_STRUT(CARDINAL) = 2, 2, 23, 4
_NET_FRAME_EXTENTS(CARDINAL) = 2, 2, 23, 4

এটি একটি দুর্দান্ত উত্তর মত দেখাচ্ছে! আমি আজ রাতে এর বিশদটি খতিয়ে দেখব।
জ্যাকব Vlijm

আমার বোঝার জন্য, আউটপুট xdotool selectwindowহয় 25166060, কিন্তু পেতে পদক্ষেপ কি 0x18000ec? আমি হেক্সাডেসিমাল থেকে রূপান্তর চেষ্টা করেছি, তবে এটি এটি বলে মনে হয় না।
জ্যাকব Vlijm

আউটপুট xdotool getwindowgeometry 0x18000ec25166060 (পিতামাতার) দশমিক উইন্ডো আইডি প্রদান করে। আমি 0x18000ec এর হেক্স মানটি ইনপুট করে দেখাব যে এটি 0x04000040 (শিশু) নয়। যাইহোক, আপনি সন্ধান করছেন না এমন আশায় আমি সহজ পরীক্ষার সাথে পুরো সংখ্যাটি আবার চালিয়েছি। আপনি কোনও কিছুর মাঝে থাকলে পূর্ববর্তী সম্পাদনা সংশোধনটি দেখুন।
ডেক্সএক্স

2
@ জ্যাকবভিজিম, xpropসজ্জা প্যাডিং দেখায় বলে মনে হচ্ছে: _KDE_NET_WM_FRAME_STRUT(CARDINAL) = 1, 1, 24, 6এবং _NET_FRAME_EXTENTS(CARDINAL) = 1, 1, 24, 6। এটি চেক করতে সাহায্য করতে পারে।
user.dz

এটা কি সম্ভব যে xdotool selectwindowকমান্ড KDE এবং ঐক্য উপর ভিন্নভাবে আচরণ করবে? xdotool selectwindowকমান্ডের আউটপুট হুবহু একই উইন্ডোকে বোঝায় (-id) এবং (এইভাবে) xdotool getwindowgeometryএকই ডেটা আউটপুট করে wmctrl -lGxpropকমান্ড তবে @Sneetsher শো দ্বারা প্রস্তাবিত _NET_FRAME_EXTENTS(CARDINAL) = 0, 0, 28, 0, যা ঠিক কি আমি নিজে মাপা, এবং প্রমাণ করে আপনার উত্তর সারাংশ সঠিক, এবং এটা আমার প্রশ্নের নিখুঁত উত্তর। আমি আপনার সম্পূর্ণতা দ্বারা মুগ্ধ। ধন্যবাদ!
জ্যাকব ভিলিজম

0

আমারও একই সমস্যা ছিল এবং আমি একটি কাজের সন্ধান করতে পারি।


অবস্থা

আমার পরিস্থিতি মেট ১ 16.০৪ এর উপর ভিত্তি করে ইনস্টল করা কম্পিজ (যা জিটিকে উইন্ডো ম্যানেজারকে সক্রিয় করে)

আমি পূর্বনির্ধারিত জায়গায় উইন্ডো রাখতে কী-বাইন্ডিংগুলিতে সংযুক্ত একটি স্ক্রিপ্ট ব্যবহার করছি। এই স্ক্রিপ্টটি ব্যর্থ হয় যদি আমি সর্বাধিক বিকল্পটি ব্যবহার না করি।


বিশ্লেষণ

সেটিংসে (কম্পিজ) উইন্ডো সজ্জা চালু এবং চালু করে সমস্যাটি চালু এবং বন্ধ করা যেতে পারে।


কার্যসংক্রান্ত

নির্দিষ্ট উইন্ডোর অজগর ব্যবহার করে উইন্ডো সজ্জা চালু এবং বন্ধ করা যেতে পারে (কী-বাইন্ডিংগুলি ব্যবহার করে এটি সক্রিয় উইন্ডোটি ব্যবহার করা সুবিধাজনক)।

#!/usr/bin/python
from gtk.gdk import *
import gtk.gdk
import time
import sys

w = gtk.gdk.get_default_root_window().get_screen().get_active_window()
w.set_decorations(0) #use 1 to turn on decorations
window_process_all_updates()
gtk.gdk.flush()

তারপরে আপনি উইন্ডো সজ্জা বন্ধ করতে পারেন, উইন্ডোটি সরাতে এবং উইন্ডো সজ্জা চালু করতে পারেন।

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