ইউনিটি লঞ্চারে কাস্টম রাইট-ক্লিক অ্যাকশন কার্সারকে 20 সেকেন্ডের জন্য ব্যস্ত রাখে


14

ইউনিটি লঞ্চারের (উবুন্টু ১৪.০৪) আইকনে ডান ক্লিকের মাধ্যমে "মিনিমাইজ উইন্ডো" বিকল্পটি পেতে, আমি এখানে.desktop ফাইল পরিবর্তন সম্পর্কে বিস্তারিত নির্দেশাবলী অনুসরণ করেছি Firefoxএবং ~/.local/share/applications/ফোল্ডারে একটি কাস্টম লঞ্চার তৈরি করেছি । .ডেস্কটপ ফাইলটির সম্পর্কিত অংশটি হ'ল:

Actions=NewWindow;NewPrivateWindow;Minimize

[Desktop Action NewWindow]
Name=Open a New Window
Exec=firefox -new-window
OnlyShowIn=Unity;

[Desktop Action NewPrivateWindow]
Name=Open a New Private Window
Exec=firefox -private-window
OnlyShowIn=Unity;

[Desktop Action Minimize]
Name=Minimize Windows
Exec=sh /home/myusername/Documents/xdotool_sh/minimize.sh firefox
OnlyShowIn=Unity;

ডেস্কটপ অ্যাকশন "মিনিমাইজ" একটি সাধারণ শেল স্ক্রিপ্টের অনুরোধ করে, minimize.shএতে নিম্নলিখিত বিষয়বস্তু রয়েছে:

#/bin/bash
name=$1
for i in $(xdotool search --class "$name"); do
    xdotool windowminimize $i
done

স্ক্রিপ্টটি ব্যবহার করে xdotool, যা সরকারী সংগ্রহস্থল থেকে ইনস্টল করা যেতে পারে, সমস্ত firefoxউইন্ডো সন্ধান করতে, তার উপর পুনরাবৃত্তি করতে এবং সেগুলি ছোট করতে min

স্ক্রিপ্টটি কাজ করে এবং লঞ্চের ডান মেনু বিকল্পটি "মিনিমাইজ উইন্ডোজ" পাশাপাশি কাজ করে, তবে উইন্ডোজগুলি ছোট হওয়ার সাথে সাথে মাউস পয়েন্টারটি "ব্যস্ত" মোডে চলে যায় এবং প্রায় 20 সেকেন্ডের জন্য এভাবে থাকে (যদিও মাউস ক্রিয়াগুলি এখনও রয়েছে প্রতিক্রিয়াশীল)।

কেউ কি জানেন যে কেন ইউনিটির ডান মেনু অপশন থেকে শেল স্ক্রিপ্ট শুরু করা এই আচরণের দিকে পরিচালিত করতে পারে?

সম্পাদনা : জ্যাকব ভ্লিজমের উত্তরে বর্ণিত হিসাবে আপাতদৃষ্টিতে অপেক্ষা করার সময় অনিবার্য। যেহেতু মাউস প্রতিক্রিয়াশীল থেকেছে , স্পিনিং হুইলটিতে পয়েন্টারের রূপান্তর এড়ানো একটি আংশিক নমনীয় কাজ , যেমন জিজ্ঞাসাবাবুতে ব্যাখ্যা করা হয়েছে

সম্পাদনা 2 : সিস্টেমটিকে নকল উইন্ডো দেওয়া আরও ভাল সমাধান, যা নীচে জ্যাকব দ্বারা ব্যাখ্যা করেছেন।


হাই কসমিন, আমি আরও একটি যুক্ত করেছি, আমি মনে করি বেশ পরিষ্কার সমাধান।
জ্যাকব ভিলিজ

ধন্যবাদ জ্যাকব আমি সেই ধরণের সমাধান সম্পর্কে ভাবছিলাম কিন্তু কীভাবে এটি করা যেতে পারে তা জানতাম না। এটি দুর্দান্ত যে একটি সমাধান বিদ্যমান।
কসমিন সেভানু

উত্তর:


18

দুর্দান্ত প্রশ্ন।

কারণ

সাধারণত, ইউনিটি লঞ্চার থেকে জিইউআই অ্যাপ্লিকেশন শুরু করার সময়, লঞ্চটি উইন্ডোটি প্রদর্শিত হওয়ার জন্য অপেক্ষা করে। অপেক্ষা করার সময় এটি "স্পিনিং হুইল" দেখায়। এটি অবশ্য চিরকাল অপেক্ষা করবে না; প্রায় 20 সেকেন্ড পরে, লঞ্চারটি ধরে নিয়েছে উইন্ডোটি উপস্থিত হবে না এবং অপেক্ষা করা ছেড়ে দেয়।

1. কোনও অ্যাপ্লিকেশন লঞ্চারের প্রধান কমান্ড

.desktopপ্রথম Exec=লাইনের (মূল কমান্ড) সম্পর্কিত একটি ফাইলে আপনি লঞ্চটিকে একটি লাইনে অপেক্ষা করতে বা না করতে বলতে পারেন :

StartupNotify=true

এটি অপেক্ষা করতে, বা

StartupNotify=false

এটি অপেক্ষা না করা

2. একটি লঞ্চারের কুইললিস্ট আইটেম

কোনও লঞ্চের সম্ভাব্য কুইকলিস্ট (ডান-ক্লিক) আইটেমগুলির জন্য, ডিফল্ট মান StartupNotify=true। দুর্ভাগ্যক্রমে, এই মানটি স্থির এবং কোনও কিছুর দ্বারা পরিবর্তন করা যায় না।

এর অর্থ হ'ল আপনি যদি ইউনিটি লঞ্চারে লঞ্চার আইকনটিতে ডান ক্লিক করে কোনও আদেশ শুরু করেন তবে লঞ্চটি একটি উইন্ডো প্রত্যাশা করছে এবং কাটাকাটি দেখিয়ে তার জন্য অপেক্ষা করছে।

তল লাইনটি হ'ল, যদিও এটি ব্যাখ্যা করা যেতে পারে, মনে হচ্ছে এই মুহুর্তে সমস্যার কোনও সমাধান নেই, অন্যথায় আপনার স্ক্রিপ্টের জন্য একটি ডেডিকেটেড লঞ্চার তৈরি StartupNotify=falseকরে ফাইলটিতে লাইনটি যুক্ত করুন।

প্রমাণ

আপনি আচরণটি নিজেই পরীক্ষা করতে পারেন। দুটি লঞ্চার তৈরি করুন:

[Desktop Entry]
Name=Test
Exec=sh /home/myusername/Documents/xdotool_sh/minimize.sh firefox
Type=Application
StartupNotify=true

এবং:

[Desktop Entry]
Name=Test
Exec=sh /home/myusername/Documents/xdotool_sh/minimize.sh firefox
Type=Application
StartupNotify=false

তাদের হিসাবে সংরক্ষণ করুন test1.desktopএবং test2.desktopউভয় প্রবর্তকটিকে ইউনিটি লঞ্চারে টেনে আনুন। তাদের ক্লিক করুন এবং আচরণের পার্থক্য দেখুন।


সম্পাদনা করুন; যদি এটি আপনাকে সত্যিই বিরক্ত করে, ityক্যটিকে একটি নকল উইন্ডো খাওয়ান

কুইললিস্টে আপনার যদি অনেক স্ক্রিপ্ট থাকে, এবং / অথবা এটি আপনাকে সত্যিই বিরক্ত করে তোলে, অন্য একটি অঙ্গরাগ সমাধান রয়েছে; আমরা আপনার স্ক্রিপ্টে অন্তর্ভুক্ত করার জন্য উইন্ডো দেখানোর জন্য, জাল , অদৃশ্য (সম্পূর্ণ স্বচ্ছ) করতে পারি। আপনার লিপিটি তখন (যেমন) হবে

#/bin/bash
name=$1
for i in $(xdotool search --class "$name"); do
    xdotool windowminimize $i
done
fake_window

যেখানে কমান্ডটি fake_windowআমাদের (নকল) উইন্ডো কল করবে, ইউনিটিকে স্পিনিং হুইলটি শেষ করবে।

কিভাবে বসাব

  1. তৈরি করুন, এটি এখনও উপস্থিত না থাকলে ডিরেক্টরি ~/bin
  2. নীচের স্ক্রিপ্টটি একটি খালি ফাইলে অনুলিপি করুন, এটি fake_windowকোনও (কোনও এক্সটেনশন নয়) হিসাবে সংরক্ষণ করুন ~/bin এবং এটি কার্যকর করতে সক্ষম করুন

    #!/usr/bin/env python3
    from gi.repository import Gtk
    from threading import Thread
    import time
    import subprocess
    
    """
    This is a self-destroying window, to "feed" Unity a fake-window, preventing
    the launcher to show a spinning wheel, waiting for a window to appear.
    Include the command to run this script at the end of the (your) script.
    """
    
    class FakeWin(Gtk.Window):
    
        def __init__(self):
            Gtk.Window.__init__(self, title="1526closeme")
            Thread(target = self.close).start()
    
        def close(self):
            t = 0
            while t < 150:
                time.sleep(0.2)
                try:
                    pid = subprocess.check_output(["pgrep", "-f", "fake_window"])\
                          .decode("utf-8").strip()
                    subprocess.Popen(["kill", pid])
                    break
                except subprocess.CalledProcessError:
                    pass
                t += 1
    
    def fakewindow():
        window = FakeWin()
        # make our window transparent
        window.set_opacity(0)
        window.set_default_size(0,0)
        window.show_all()
        Gtk.main()
    
    fakewindow()
  3. আপনার স্ক্রিপ্টের একেবারে শেষে কমান্ডটি যুক্ত করুন:

    fake_window
  4. লগ আউট এবং ফিরে (বা চালানোsource ~/.profile)

এটি হ'ল, চক্রটি কেবলমাত্র যতক্ষণ স্ক্রিপ্টটি চালিত হবে ততক্ষণ স্পিন করবে।

ব্যাখ্যা

স্ক্রিপ্টটি একটি সর্বনিম্ন উইন্ডো তৈরি করে । উইন্ডোটি সম্পূর্ণ স্বচ্ছ এবং এর আকার 0x0 পিক্সেল এবং এইভাবে অদৃশ্য। এটি উপস্থিত থাকলে এটি তাত্ক্ষণিকভাবে নিজেকে ধ্বংস করবে।

আপনার স্ক্রিপ্টের শেষে উইন্ডোটি কল করে, আপনি চাকাটি ঘুরিয়ে থামিয়ে উইন্ডোটির জন্য ityক্যের ইচ্ছা পূরণ করবেন।


প্রশ্নের বিস্তারিত ব্যাখ্যা এবং সম্পাদনার জন্য আপনাকে ধন্যবাদ। সম্ভাব্য কর্মক্ষেত্র সম্পর্কে ধারণা দেয়।
কসমিন সেভানু

দুর্দান্ত ধারণা - একটি জাল উইন্ডো দেওয়া। আমি এটি পছন্দ করি
সের্গেই কলডিয়াজনি

@ সার্জ কৌতুক এবং প্রতারণা, তবে এটি কার্যকর হয় :)
জ্যাকব ভিলিজ

4

কেবলমাত্র একটি বিকল্প জাল_ উইন্ডো বাস্তবায়ন যোগ করতে চেয়েছিলেন যা কিছুটা সহজ এবং উবুন্টু 16.04 সিস্টেমে পাইথন সতর্কতাগুলিকে ট্রিগার করে না।

#!/usr/bin/env python3

import gi
gi.require_version('Gtk', '3.0')

from gi.repository import Gtk
from gi.repository import GLib

"""
This is a self-destroying window, to "feed" Unity a fake-window, preventing
the launcher to show a spinning wheel, waiting for a window to appear.
Include the command to run this script at the end of the (your) script.
"""

def timer_cb():
    Gtk.main_quit()
    return False

def show_cb(widget, data=None):
    GLib.timeout_add(500, timer_cb)

def fakewindow():
    window = Gtk.Window()
    # make our window transparent
    window.set_opacity(0)
    window.set_default_size(0,0)

    window.connect("show", show_cb)

    window.show_all()

    Gtk.main()

fakewindow()

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