আমি কি ইউনিটির এক বাক্সে উইন্ডোটি ছোট করতে পারি?


17

আইরিক্সের 4 ডিডব্লিউটিতে উইন্ডোজটি একটি বাক্সে ছোট করার ক্ষমতা ছিল (আধুনিক উইন্ডো পরিচালকদের দ্বারা ব্যবহৃত টাস্ক বারের বিপরীতে)। আমি এটি একটি পুরানো এইচপিউক্সেও দেখেছি।

সংযুক্ত চিত্রটিতে "কনসোল" স্কোয়ারটি দেখুন:

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

প্লাগইন বা ইউনিটি ব্যতীত অন্য উইন্ডো ম্যানেজারের সাহায্যে উবুন্টুতে কী সম্ভব?


অদ্ভুত, কিন্তু আকর্ষণীয় প্রশ্ন :) আমি এই জাতীয় কিছু ভাবতে পারি। আইকনটি গুরুত্বপূর্ণ, বা এটি জেনেরিক হতে পারে? এটি কেমন আচরণ করে? ডেস্কটপে আইকন বা একটি ন্যূনতম "উইন্ডো" এর মতো।
জ্যাকব ভ্লিজম

@ জ্যাকবভিলিজম আইকনটি জেনেরিক নয়। প্রতিটি অ্যাপ্লিকেশনটির নিজস্ব আইকনটি ইউনিটির ন্যূনতম উইন্ডোজগুলির আইকন হিসাবে রয়েছে)
আরটিয়াম

ইউনিটির মধ্যেও কাজ করা যায়, তবে উইন্ডোটি ডেস্কটপে আইকোনাইজ হবে (সংশ্লিষ্ট অ্যাপ্লিকেশনটির আইকন এবং উইন্ডোটির নাম সহ)। আপনি কি শট পছন্দ করবেন? (একটি আকর্ষণীয়, তবে চ্যালেঞ্জিং কাজ হবে, আমি শুরু করার আগে আরও ভাল জিজ্ঞাসা করব :))
জ্যাকব ভ্লিজম

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

উত্তর:


18

আমার নিজের অবাক করে দিয়ে, এটি বেশ সুন্দরভাবে কাজ করে, যতক্ষণ না আপনার ডেস্কটপে আপনার কাছে অনেক বেশি জিনিস না থাকে

আমি কিছুদিনের জন্য এটি সঙ্গে কাজ, এবং এটি একটি অদ্ভুত কিন্তু আশ্চর্যের ব্যাপার বলে মনে হয় চমৎকার ঘন কর্মক্ষেত্র সুইচ বিকল্প। এর সরলতার জন্য রিফ্রেশ।

প্রস্তুতিতে

সমাধানটি যা আপনি বর্ণনা করেছেন বাস্তবে এটি বেশ প্রশমিত:

  • একটি কী সংমিশ্রণ টিপলে উইন্ডো থেকে আপনার ডেস্কটপের উইন্ডোটি "বাক্সে" যাবে:

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

    অ্যাপ্লিকেশন উপস্থিতি সহ একটি আইকন মধ্যে:

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

  • আইকনে ডাবল ক্লিক করুন এবং উইন্ডোটি আবার উপস্থিত হবে এবং আইকনটি লোপ পাবে।

কিভাবে এটা কাজ করে

ছোট গল্প (ব্যাখ্যা):

  • শর্টকাট কী টিপানোর সময়, স্ক্রিপ্টটি যুক্তি সহ কল ​​করা হয় box:

    windowbox box
    
  • স্ক্রিপ্টটি তখন:

    • সামনেরতম উইন্ডোটির উইন্ডো আইডি পড়ে
    • এটি "সাধারণ" উইন্ডো কিনা তা পরীক্ষা করে (উদাহরণস্বরূপ আপনি আপনার ডেস্কটপটি আনম্যাপ করতে চান না)
    • উইন্ডোটির মালিকানাধীন অ্যাপ্লিকেশনটির প্রক্রিয়াটির নামটি সন্ধান করে।
    • সংশ্লিষ্ট অ্যাপ্লিকেশনটির .desktopফাইলটিতে সংশ্লিষ্ট আইকনটি দেখায়/usr/share/applications
    • যুক্তি দিয়ে স্ক্রিপ্ট (যখন ডাবল-ক্লিক করা হয়) কল করে এমন .desktopএকটি Exec=লাইন দিয়ে একটি অনন্য নামযুক্ত ফাইল তৈরি করে show:

      windowbox show
      

.desktopফাইল যেমন উইণ্ডো আই, (file-) এর নামের অতিরিক্ত আর্গুমেন্ট আর্গুমেন্ট, একটি নম্বর যোগ হবে .desktopফাইল।

পরবর্তীকালে:

  • .desktopফাইল এক্সিকিউটেবল তৈরি করা হয়, এটি একটি ডাবল ক্লিক করার যোগ্য বস্তু করতে।

  • যখন .desktopফাইলে ডাবল ক্লিক করা হয়, উইন্ডো আছে (পুনরায়) ম্যাপ, .desktopফাইল আপনার ডেস্কটপ থেকে মুছে ফেলা হবে।

কিভাবে বসাব

  1. ব্যবহারিকভাবে সর্বদা মত, যখন আপনি উইন্ডো নিয়ে ঘুরে বেড়াতে চান, স্ক্রিপ্টটির উভয় প্রয়োজন wmctrlএবং xdotool:

    sudo apt-get install xdotool wmctrl
    
  2. ডিরেক্টরি তৈরি করুন ~/bin( ~আপনার বাড়ির ডিরেক্টরি বোঝায়)
  3. নীচের স্ক্রিপ্টটি একটি খালি ফাইলে অনুলিপি করুন, এটি windowbox(কোনও প্রসারণ নেই) হিসাবে এটি সংরক্ষণ করুন ~/bin

    #!/usr/bin/env python3
    import subprocess
    import sys
    import os
    
    # --- On Unity, there is a (y-wise) deviation in window placement
    # set to zero for other window managers
    deviation = 28
    # ---
    
    args = sys.argv[1:]
    
    get = lambda cmd: subprocess.check_output(cmd).decode("utf-8").strip()
    
    def find_dtop():
        # get the localized path to the Desktop folder
        home = os.environ["HOME"]
        dr_file = home+"/.config/user-dirs.dirs"
        return [home+"/"+ l.split("/")[-1].strip() \
                for l in open(dr_file).readlines() \
                if l.startswith("XDG_DESKTOP_DIR=")][0].replace('"', "")
    
    def check_windowtype(w_id):
        # check the type of window; only unmap "NORMAL" windows
        return "_NET_WM_WINDOW_TYPE_NORMAL" in get(["xprop", "-id", w_id])
    
    def get_process(w_id):
        # get the name of the process, owning the window and window x/y position
        w_list = get(["wmctrl", "-lpG"]).splitlines()
        pid = [l for l in w_list if w_id in l][0].split()
        proc = get(["ps", "-p", pid[2], "-o", "comm="])
        xy = (" ").join(pid[3:5])
        return (proc, xy)
    
    def read_f(f, string, proc):
        # search for a possible match in a targeted .desktop file
        try:
            with open(f) as read:
                for l in read:
                    if all([l.startswith(string), proc in l]):
                        in_f = True
                        break
                    else:
                        in_f = False
        except:
            in_f = False
        return in_f
    
    def get_icon(proc, w_name):
        # search appropriate icon in /usr/share/applications
        exceptions = [item for item in [
            ["soffice", "libreoffice-main"],
            ["gnome-terminal", "utilities-terminal"],
            ["nautilus", "folder"],
            ] if item[0] in proc]
        if exceptions:
            if exceptions == [["soffice", "libreoffice-main"]]:
                loffice = [
                    ["Calc", "libreoffice-calc"],
                    ["Writer", "libreoffice-writer"],
                    ["Base", "libreoffice-base"],
                    ["Draw", "libreoffice-draw"],
                    ["Impress", "libreoffice-impress"],
                    ]
                match = [m[1] for m in loffice if m[0] in w_name]
                if match:
                    return match[0]
                else:
                    return exceptions[0][1]
            else:      
                return exceptions[0][1]
        else:
            default = "/usr/share/applications"
            dtfiles = [default+"/"+f for f in os.listdir(default)]
            for f in dtfiles:
                if read_f(f, "Exec=", proc) == True:   
                    for l in open(f).readlines():
                        if l.startswith("Icon="):
                            icon = l.replace("Icon=", "").strip()
                            print(f)
                            break
                    break
            return icon
    
    def create_name():
        # create unique (file-) name for boxed window
        n = 1
        while True:
            name = dtop+"/"+"boxed_"+str(n)+".desktop"
            if os.path.exists(name):
                n += 1
            else:
                break
        return name
    
    def convert_wid(w_id):
        # convert window- id, xdotool format, into wmctrl format
        w_id = hex(int(w_id))
        return w_id[:2]+(10-len(w_id))*"0"+w_id[2:]
    
    def create_icon(w_id, w_name, icon, pos):
        # create the launcher, representing the boxed window
        boxedwindow = create_name()
        f_content =[
                "[Desktop Entry]",
                "Name=[WINDOW] "+w_name,
                "Exec=windowbox show "+w_id+" '"+boxedwindow+"' "+pos,
                "Icon="+icon,
                "Type=Application",
                ]
        if icon == "generic":
            f_content.pop(3)
        with open(boxedwindow, "wt") as boxed:
            for l in f_content:
                boxed.write(l+"\n")
        command = "chmod +x "+"'"+boxedwindow+"'"
        subprocess.call(["/bin/bash", "-c", command])
    
    if args[0] == "box":
        dtop = find_dtop()
        w_id = convert_wid(get(["xdotool", "getactivewindow"]))
        w_name = get(["xdotool", "getwindowname", w_id])
        if check_windowtype(w_id) == True:
            procdata = get_process(w_id)
            procname = procdata[0]
            icon = get_icon(procname, w_name); icon = icon if icon != None else "generic"
            create_icon(w_id, w_name, icon, procdata[1])
            subprocess.call(["xdotool", "windowunmap", w_id])
    
    elif args[0] == "show":
        w_id = args[1]
        subprocess.call(["xdotool", "windowmap", w_id])    
        subprocess.call(["xdotool", "windowmove", "--sync", w_id, args[3], str(int(args[4])-deviation)])
        os.remove(args[2])
  4. স্ক্রিপ্টটি কার্যকর করা যায় Make

  5. নতুন নির্মিত ডিরেক্টরিটিকে "পপ-আপ" করতে $PATH, হয় লগ আউট / ইন করুন, বা রান করুন source ~/.profile(টার্মিনাল উইন্ডো থেকে)
  6. কমান্ড দ্বারা টার্মিনাল উইন্ডো থেকে স্ক্রিপ্টটি পরীক্ষা করুন:

    windowbox box
    

    উইন্ডোটি অদৃশ্য হয়ে যাবে, আপনার ডেস্কটপে "বক্সযুক্ত" উইন্ডোটি উপস্থিত হওয়া উচিত।

  7. যদি সমস্ত ঠিকঠাক কাজ করে তবে একটি শর্টকাট কীতে নিম্নলিখিত কমান্ডটি যুক্ত করুন: আপনার স্ক্রিনের উপরের ডানদিকে গিয়ার আইকনটি চয়ন করুন:

    গিয়ার আইকন

  8. যান System SettingsKeyboardShortcutsCustom Shortcuts। ক্লিক করুন +এবং কমান্ড যুক্ত করুন:

    windowbox box
    

যা করা উচিৎ.

গুরুত্বপূর্ণ তথ্য

স্ক্রিপ্ট ব্যবহার xdotool's windowunmapজানালা অদৃশ্য করা। আপনার ডেস্কটপে তৈরি "বক্স" (আইকন) হ'ল লুকানো উইন্ডোর একমাত্র "গেট"। অন্য কথায়: ডেস্কটপ ফাইল (গুলি) ম্যানুয়ালি মুছে ফেলবেন না। আপনি যদি উইন্ডোটি করেন তবে ভাল হবে।

কাজ করার জন্য [20-12 সম্পাদনা করুন: সম্পন্ন ]

স্ক্রিপ্টটি এখনও কিছু সংশোধন ব্যবহার করতে পারে:

  • উইন্ডো জ্যামিতি সংজ্ঞা দ্বারা পুনরুদ্ধার করা হয় না। খুব ভাল স্থির করা যায়, তবে আমি ভেবেছিলাম প্রথম ফলাফলটি আপনাকে দেখাব।
  • বেশিরভাগ ক্ষেত্রে, বক্সযুক্ত উইন্ডোটির সঠিক আইকন থাকে। ফাংশনটি get_process(w_id)যদিও কিছু উন্নতি করতে পারে। প্রক্রিয়াটি কমান্ড হিসাবে খুঁজে পাওয়া না গেলে /usr/share/applications, ফাইলটির জেনেরিক আইকন রয়েছে।

বাক্সযুক্ত উইন্ডো আইকনগুলি অন্য আইকনগুলির চেয়ে আলাদা আকার দেওয়া

স্ক্রিপ্টটি সর্বদা তৈরি হওয়া .desktopফাইলগুলির নাম , ইত্যাদি তৈরির মুহুর্তে "উপলব্ধ" নামের উপর নির্ভর করে (ফাইলের নাম, প্রদর্শিত নাম নয়)। boxed_1.desktopboxed_2.desktop

আপনি আইকন আকারে ডান ক্লিক করে ফাইলগুলি (সাধারণভাবে) আকার পরিবর্তন করতে পারেন। সুসংবাদটি হ'ল আপনি যদি ফাইলটি সরিয়ে আবার পুনরায় তৈরি করেন তবে আকারটি মনে থাকবে। এমনকি যদি আপনি পুনরায় চালু করার পরে ফাইলটি আবার তৈরি করেন। তার মানে যে যদি আপনি কি কখনো বাক্সযুক্ত জানালা (যেমন) 1-5 মাপ পরিবর্তন, তারা হবে সবসময় একই আকার আছে যখন আপনি (স্ক্রিপ্ট) আবার তাদের তৈরি করুন!

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


2
আমি কোনও মন্তব্য না করে নিজের প্রতিরোধ করতে পারি না, আপনার কাছ থেকে খুব সুন্দর উত্তর :)
রাবণ

নিস! কয়েকটি মন্তব্য: ১. আমি লাইনটি dtop = "/home/jacob/Bureaublad"আমার ডেস্কটপে যাওয়ার পথে প্রতিস্থাপন করেছি ( dtop = "/home/" + user + "/Desktop") ২. ডাবল ক্লিক করে পুনরুদ্ধার কাজ করেনি। আমি সন্দেহ করি যে source ~/.profileএটি পরীক্ষা করার জন্য অবিলম্বে লগ-ইন / আউট হবে enough ৩. unityক্যে আইকনগুলি ম্যানুয়ালি f_contentআকারে পরিবর্তন করা সম্ভব (ডান ক্লিক -> আকার পরিবর্তন করুন আইকন), আইকনের আকার নির্ধারণে কিছু পরামিতি যুক্ত করা কি সম্ভব ?
আর্টিয়াম

4
আমি যখন এই উত্তরের প্রথম অনুচ্ছেদটি পড়তে শুরু করি তখন আমি কেবল জানতাম নীচে কমলা আইকন থাকবে! ;-): পি
ফাব্বী

1
হাই @ আর্টিয়াম আমি স্ক্রিপ্টটি আপডেট করেছি, এতে এখন কয়েকটি গুরুত্বপূর্ণ উন্নতি হয়েছে, এর মধ্যে আরও ভাল আইকন-সন্ধান এবং জ্যামিতি-পুনরুদ্ধার, মজা করুন!
জ্যাকব Vlijm

1
@ আর্টিয়াম আমি জানি, তবে স্ক্রিপ্টটির মধ্যে একটি ব্যবহার করে দেখুন এটি হ'ল সাধারণ ফোল্ডার আইকন, আপনার চিত্রের মতো। সম্ভবত একই আইকনটির একটি লিঙ্ক।
জ্যাকব Vlijm

7

এটি সম্পাদন করতে আপনি fvwm ব্যবহার করতে পারেন ।

  1. Fvwm ইনস্টল করুন:

    sudo apt-get update
    sudo apt-get install fvwm
    
  2. আইকনফাইফ ফাংশনটি ব্যবহার করে এমন একটি সন্ধান করুন - এখানে বেশ কয়েকটি রয়েছে: http://www.jmcunx.com/fvwm_theme.html আপনার প্রদর্শিত স্ক্রিন-শটের মতো বেশ কয়েকটি চেহারা।

  3. থিমটির পাঠ্যটি অনুলিপি করুন, তারপরে নেভিগেট করুন ~/.fvwm/(প্রথমে লুকানো ফাইলগুলি দেখান) তারপরে একটি ফাইল তৈরি করুন.fvwm2rc

  4. সেই ফাইলটি কোনও পাঠ্য সম্পাদকে (জিডিটের মতো) খুলুন এবং এটিতে থিমের পাঠ্য আটকে দিন।

  5. কম্পিউটারটি পুনরায় বুট করুন এবং fvwm এবং লগইন নির্বাচন করুন।

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

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