উইন্ডোর মাত্রা পাওয়ার জন্য একটি সরঞ্জাম


14

একটি স্বেচ্ছাসেবী উইন্ডোর প্রস্থ এবং উচ্চতা পেতে আমার একটি সরঞ্জাম প্রয়োজন।

আদর্শভাবে, সেই সরঞ্জামটি উবুন্টুর মেনু বারের আকারটি হ্রাস করবে।

উত্তর:


6

আপনার নিজের উত্তর থেকে, আমি বুঝতে পারি আপনি একটি সুবিধাজনক জিইউআই সরঞ্জামের সন্ধান করছেন, সুতরাং:

নেট আকার এবং উইন্ডোটির আসল আকার উভয়ই পেতে জন্য ছোট জিইউআই সরঞ্জাম (গতিশীলভাবে আপডেট)

"ব্যাখ্যা" এর নীচে আরও ব্যাখ্যা করা হয়েছে, উভয়ই wmctrlএবং xdotoolকিছুটা ভুল উইন্ডোজাইজ ফিরে আসে।

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

নীচের স্ক্রিপ্ট (সূচক) প্যানেলের "বাস্তব" আকার এবং উইন্ডোর নেট আকার উভয়ই দেখায়।

এই পান্ডুলিপি

#!/usr/bin/env python3
import signal
import gi
gi.require_version('AppIndicator3', '0.1')
gi.require_version('Gtk', '3.0')
import subprocess
from gi.repository import Gtk, AppIndicator3, GObject
import time
from threading import Thread


def get(cmd):
    try:
        return subprocess.check_output(cmd).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass

# ---
# uncomment either one of two the lines below; the first one will let the user
# pick a window *after* the indicator started, the second one will pick the 
# currently active window
# ---

window = get(["xdotool", "selectwindow"])
# window = get(["xdotool", "getactivewindow"])

class Indicator():
    def __init__(self):
        self.app = 'test123'
        iconpath = "unity-display-panel"
        self.indicator = AppIndicator3.Indicator.new(
            self.app, iconpath,
            AppIndicator3.IndicatorCategory.OTHER)
        self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)       
        self.indicator.set_menu(self.create_menu())
        self.indicator.set_label(" ...Starting up", self.app)
        # the thread:
        self.update = Thread(target=self.show_seconds)
        # daemonize the thread to make the indicator stopable
        self.update.setDaemon(True)
        self.update.start()

    def create_menu(self):
        menu = Gtk.Menu()
        # separator
        menu_sep = Gtk.SeparatorMenuItem()
        menu.append(menu_sep)
        # quit
        item_quit = Gtk.MenuItem('Quit')
        item_quit.connect('activate', self.stop)
        menu.append(item_quit)
        menu.show_all()
        return menu

    def show_seconds(self):
        sizes1 = None
        while True:
            time.sleep(1)
            sizes2 = self.getsize(window)
            if sizes2 != sizes1:
                GObject.idle_add(
                    self.indicator.set_label,
                    sizes2, self.app,
                    priority=GObject.PRIORITY_DEFAULT
                    )
            sizes1 = sizes2

    def getsize(self, window):
        try:
            nettsize = [int(n) for n in get([
                "xdotool", "getwindowgeometry", window
                ]).splitlines()[-1].split()[-1].split("x")]
        except AttributeError:
            subprocess.Popen(["notify-send", "Missing data", "window "+window+\
                              " does not exist\n(terminating)"])
            self.stop()
        else:
            add = [l for l in get(["xprop", "-id", window]).splitlines() if "FRAME" in l][0].split()
            add = [int(n.replace(",", "")) for n in add[-4:]]
            xadd = add[0]+add[1]; yadd = add[2]+add[3]
            totalsize = [str(s) for s in [nettsize[0]+add[0]+add[1], nettsize[1]+add[2]+add[3]]]
            displ_sizes = ["x".join(geo) for geo in [[str(s) for s in nettsize], totalsize]]
            string = " "+displ_sizes[0]+" / "+displ_sizes[1]
            return string+((25-len(string))*" ")

    def stop(self, *args):
        Gtk.main_quit()

Indicator()
GObject.threads_init()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()

কিভাবে ব্যবহার করে

  1. স্ক্রিপ্টটির জন্য xdotool ইনস্টল করা প্রয়োজন:

    sudo apt-get install xdotool
    
  2. একটি ফাঁকা ফাইলে স্ক্রিপ্টটি অনুলিপি করুন, এটি সংরক্ষণ করুন getwindowsize.py

  3. কমান্ড দ্বারা টার্মিনাল উইন্ডো থেকে স্ক্রিপ্টটি পরীক্ষা করুন:

    python3 /path/to/getwindowsize.py
    
  4. স্ক্রিপ্টটি ফোকাসযুক্ত উইন্ডোটিকে ডায়নামিকভাবে নেট উইন্ডোজাইজ (উভয় wmctrlএবং এর উভয় আউটপুট হিসাবে xdotool) প্রদর্শন করতে এবং আসল উইন্ডো আকার, সাজসজ্জা ইত্যাদির সাথে প্রদর্শন করে p

    আপনি যদি লক্ষ্যযুক্ত উইন্ডোটি বন্ধ করেন তবে সূচকটি একটি বার্তা দেখায়:

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

  5. যদি সমস্ত ঠিকঠাক কাজ করে তবে এটিকে একটি শর্টকাট কীতে যুক্ত করুন: চয়ন করুন: সিস্টেম সেটিংস> "কীবোর্ড"> "শর্টকাটস"> "কাস্টম শর্টকাট"। "+" ক্লিক করুন এবং কমান্ডটি যুক্ত করুন:

    python3 /path/to/getwindowsize.py
    

ব্যাখ্যা

উইন্ডো আকার, এটি wmctrl এবং xdotool উভয় দ্বারা প্রদর্শিত হিসাবে

... কিছুটা ভুল

আপনি উল্লেখ:

আদর্শভাবে, সেই সরঞ্জামটি উবুন্টুর মেনু বারের আকারটি হ্রাস করবে

সম্পূর্ণ গল্পটি হ'ল উভয়ই wmctrl -lGএবং xdotool getwindowgeometryমেনু বার ছাড়া উইন্ডোর আকারটি ফেরত দেয়, বা যেমন এই উত্তরে ব্যাখ্যা করা হয়েছে :

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

সঠিক, "আসল" আকারটি কীভাবে পাবেন

তথ্য সঠিকভাবে পেতে, আমরা চালাতে পারি

xprop -id <window_id> | grep FRAME

এর ফলে আউটপুট হবে:

_NET_FRAME_EXTENTS(CARDINAL) = 0, 0, 28, 0

এখানে আমরা মান আমরা থেকে আউটপুট উইন্ডোর মাপ যোগ করতে প্রয়োজনীয় wmctrlএবং xdotool, বাম, ডান, উপরে এবং উইন্ডোর নীচে।

অন্য কথায়, এই ক্ষেত্রে যদি কোনও wmctrl200x100 আকার দেখায় তবে আসল আকারটি 200x128।

বিঃদ্রঃ

ওপি দ্বারা প্রস্তাবিত হিসাবে, ব্যবহারকারী সূচকটি শুরু করার পরে প্রতিস্থাপন করে উইন্ডো বাছাই করতে পারে :

window = get(["xdotool", "getactivewindow"])

দ্বারা:

window = get(["xdotool", "selectwindow"])

স্ক্রিপ্টে, এই লাইনগুলির কোনও একটিই নিঃশর্ত হতে পারে।


চিয়ারস @ জ্যাকব-ভিলিজম, এইরকম ভাল উত্তর! শুধু দুটি জিনিস: 1) আমি প্রতিস্থাপিত করে থাকেন getactivewindowদ্বারা selectwindow, তাই যখন স্ক্রিপ্ট চালু আপনার কাছ থেকে মাত্রা পেতে জানালা কার্সার সঙ্গে চয়ন। আমি এই আচরণটি অনেক বেশি সুবিধাজনক বলে মনে করি। 2) আমি উবুন্টু পেস্ট করার জন্য কোডটি আপলোড করেছি , সুতরাং এটি সেট আপ করা সহজ: getwindowsize.py হিসাবে কেবল ডাউনলোড করুন এবং সংরক্ষণ করুন
অ্যাক্রোনিক্স

অ্যাক্রনিক্স ধন্যবাদ! একটি দুর্দান্ত ধারণা মত শোনায়, আমি যদি উত্তরে এটি সম্পাদনা করি তবে আপনি কি আপত্তি করবেন?
জ্যাকব Vlijm

নিশ্চিত @ জ্যাকব-ভিএলজিম নিখরচায় অনুভব করুন;)
অ্যাক্রোনিক্স

11

wmctrl -lGবিন্যাস সহ একটি টেবিলের মধ্যে সমস্ত খোলা উইন্ডোজের একটি তালিকা পেতে আপনি ব্যবহার করতে পারেন :

<window ID> <desktop ID> <x-coordinate> <y-coordinate> <width> <height> <client machine> <window title>

একটি উদাহরণ আউটপুট এটি দেখতে পারে:

$ wmctrl -lG
0x02a00002  0 -2020 -1180 1920 1080 MyHostName XdndCollectionWindowImp
0x02a00005  0 0    24   61   1056 MyHostName unity-launcher
0x02a00008  0 0    0    1920 24   MyHostName unity-panel
0x02a0000b  0 -1241 -728 1141 628  MyHostName unity-dash
0x02a0000c  0 -420 -300 320  200  MyHostName Hud
0x03a0000a  0 0    0    1920 1080 MyHostName Desktop
0x0400001d  0 61   24   1859 1056 MyHostName application development - A tool to get window dimensions - Ask Ubuntu - Mozilla Firefox
0x04200084  0 61   52   999  745  MyHostName Untitled Document 1 - gedit

9

আমি /unix/14159/how-do-i-find-the-window-dimension-and-position-accurately- অন্তর্ভুক্ত- বিবরণxwininfo -all থেকে পেয়েছি ।

এটি কাজ করে তবে আমি এখনও আরও সুবিধাজনক সমাধান => একটি রিয়েল-টাইম জিইউআই সরঞ্জামের জন্য উন্মুক্ত।


আমি একটি উত্তর পোস্ট করেছি, তবে লক্ষ্য করেছি না যে আপনি xwininfoইতিমধ্যে খুঁজে পেয়েছেন । সম্ভবত আপনি আমার লেখা স্ক্রিপ্টটিতে আগ্রহী হবেন - এটি ব্যবহার করে xwininfoতবে একটি জিইউআই পপআপ সহ, দয়া করে নীচে এটি দেখুন।
সের্গেই কোলোডিয়াজনি

2

কেউ চেষ্টা করতে পারে:

xdotool search --name gnome-panel getwindowgeometry

জেনোম-প্যানেল ধরে নেওয়া উবুন্টুর টুলবারের প্রক্রিয়া নাম, তবে কে জানে।

(একটি প্রয়োজন হতে পারে sudo apt-get install xdotool)

একটি খালি জিওআইআই জিনিসটির জন্য যে কেউ আরও খালি খালি প্রয়োজনীয় জিনিসগুলি প্রদর্শন করতে আরও উন্নতি করতে চাইতে পারে:

zenity --text-info --filename=<(xprop)

এটি পয়েন্টারটি এক্সপ্রপের ক্রসে পরিবর্তন করবে, তারপরে আপনি উইন্ডোটি ক্লিক করুন এবং এটি জিটিকে সংলাপে এক্সপ্রপের তথ্য মুদ্রণ করবে।


2

xwininfo এবং এর সুবিধা ages

wmctrlএবং এর সাথে বড় সমস্যাটি xdotoolহ'ল সেই সরঞ্জামগুলি ইনস্টল করা দরকার - সেগুলি ডিফল্টভাবে উবুন্টুতে নেই । তবে উবুন্টু জাহাজ নিয়ে xwininfo। এটি একটি সাধারণ সরঞ্জাম যা ব্যবহারকারী-নির্বাচিত উইন্ডো সম্পর্কে তথ্য সরবরাহ করে।

সাধারণ ব্যবহারটি টার্মিনালে টাইপ করতে হবে xwininfo | awk '/Width/||/Height/'( awkআউটপুট ফিল্টার করার জন্য ব্যবহার করা বিজ্ঞপ্তি ), এবং যখন আপনার কার্সার আপনার পছন্দমতো xজিইউআই উইন্ডো নির্বাচন করতে পরিবর্তন করে এবং এটি তার তথ্য প্রদর্শন করবে। উদাহরণ স্বরূপ:

$ xwininfo | awk '/Width/||/Height/'                
  Width: 602
  Height: 398

সুতরাং সুবিধাগুলি হ'ল:

  • এটা সহজ
  • এটি ডিফল্টরূপে ইনস্টল করা আছে
  • এটি কেবল পাঠ্য - অভিনব কিছুই নয় এবং আপনি এটি ফিল্টার করতে এবং প্রয়োজনীয় হিসাবে এটি টুইট করতে পারেন

এক্সুইনফোর আরও এক ধাপ এগিয়ে নেওয়া - একটি সক্রিয় উইন্ডোর বৈশিষ্ট্য প্রদর্শন করা

আমার মতো আপনার যদি 24/7 টি টার্মিনাল খোলা থাকে তবে আপনার কেবল xwininfoপ্রয়োজন। কিছু ব্যবহারকারী কীবোর্ড শর্টকাট থাকা পছন্দ করতে পারেন। নীচের স্ক্রিপ্টটি (যা একটি কীবোর্ড শর্টকাটের সাথে আবদ্ধ হওয়ার উদ্দেশ্যে) আপনার বর্তমানে সক্রিয় উইন্ডো সম্পর্কিত তথ্য সহ একটি গ্রাফিকাল পপআপ প্রদর্শন করতে দেয়। স্ক্রিনশটে দেখা যায়, এটি উইন্ডোর শিরোনাম, প্রস্থ এবং উচ্চতার তথ্য প্রদর্শন করে।

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

ফণা অধীনে এটি বিশেষভাবে দর্শনীয় কিছু করে না। এটি dbusপরিষেবা থেকে তথ্য ব্যবহার করে xwininfoএবং এটিকে সহজ পপআপে রাখে। উত্স কোডটি নীচে রয়েছে। মনে রাখবেন, স্ট্যান্ডার্ড স্ক্রিপ্টিং বিধিগুলি প্রযোজ্য: chmod +xকীবোর্ড শর্টকাটের সাথে আবদ্ধ হওয়ার সাথে সাথে এটি কার্যকর করার অনুমতি রয়েছে কিনা তা নিশ্চিত করুন আপনি কমান্ড হিসাবে স্ক্রিপ্ট ফাইলটির পুরো পথ দেবেন।

#!/bin/bash 

get_active_window()
{
    qdbus org.ayatana.bamf \
          /org/ayatana/bamf/matcher \
          org.ayatana.bamf.matcher.ActiveWindow
}

get_active_name()
{
    qdbus org.ayatana.bamf $1 \
          org.ayatana.bamf.view.Name
}

main()
{
    active_window=$(get_active_window)
    active_xid=$( awk -F '/' '{print $NF}' <<< "$active_window" )
    echo $active_xid
    active_title=$(get_active_name $active_window)
    dimensions=$(xwininfo -id "$active_xid" | awk '/Width/||/Height/')
    text="$active_title\n""$dimensions"
    zenity --info --text "$text" --width=200 --height=200
}

main $@

তথ্যের জন্য ইউনিটির শীর্ষ প্যানেল সূচক ব্যবহার করা।

আমার উত্তর লেখার সময়, আমি বুঝতে পেরেছি যে এটি আমার বিদ্যমান প্রকল্পগুলির একটি - আয়াতানা সূচককে অন্তর্ভুক্ত করার জন্য একটি খুব দরকারী বৈশিষ্ট্য হবে। এই সূচকটি জিইউআই উইন্ডো সম্পর্কে সম্পূর্ণ পরিসীমা তথ্য প্রদর্শন করতে দেয়। বর্তমানে সক্রিয় বিকাশের অধীনে রয়েছে। জ্যামিতির তথ্য বৈশিষ্ট্যটি গিথুব সংগ্রহস্থলে যুক্ত করা হয়েছে এবং আমার ব্যক্তিগত পিপিএতে যাওয়ার পথে । এবং অবশ্যই এটি xwininfoকিছুটা ভিন্ন উপায়ে ব্যবহার করে।

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

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