কিভাবে একটি অ্যাপ্লিকেশন সমস্ত উইন্ডো প্রদর্শন (উত্থাপন)?


21

আমার একাধিক উইন্ডো ব্যবহার করে একটি অ্যাপ্লিকেশন রয়েছে। কীভাবে আমি সেই অ্যাপ্লিকেশনটির সমস্ত উইন্ডোটিকে অগ্রভাগে আনতে পারি?

যখন আমি অ্যাপ্লিকেশনগুলিতে স্ক্রোল-হুইল দিয়ে স্ক্রোল করি তখন এটি কেবল একটি উইন্ডো দেখায়। পরবর্তী উইন্ডোতে যাওয়ার সময়, শেষ উইন্ডোটি আবার পটভূমিতে আনা হয়।

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

আমার সেরা সমাধানটি এখন পর্যন্ত সমস্ত উইন্ডোজ ( Ctrl+ Super+ D) মিনিমাইজ করা এবং তারপরে স্ক্রোল-হুইলটি ব্যবহার করে আমার অ্যাপ্লিকেশনটির উইন্ডোগুলি প্রদর্শন করা উচিত।

এর চেয়ে ভাল সমাধান আর কি আছে?


@ জোছুয়া একটি অ্যাপ্লিকেশনটির সমস্ত উইন্ডো সামনে আনতে খুব কঠিন কিছু নয়, তবে আপনি কীভাবে অ্যাপ্লিকেশনটি সংজ্ঞায়িত করতে চান? একটি কী সমন্বয় + একটি অ্যাপ্লিকেশন উইন্ডো ক্লিক করতে হবে?
জ্যাকব Vlijm

@ জোছুয়া বা মায়ি আরও মার্জিত, একটি মূল কম্বো + অ্যাপ্লিকেশন নামের 1 ম চরিত্র?
জ্যাকব Vlijm

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

এছাড়াও @ জোছুয়া সামনের অ্যাপ্লিকেশন উইন্ডো গ্রুপগুলিতে আনার জন্য একটি মূল সংমিশ্রণ পাওয়া সম্ভব হবে ; একবার টিপুন -> সমস্ত ফায়ারফক্স উইন্ডো দেখানো হবে, আবার প্রেস করুন -> সমস্ত টার্মিনাল উইন্ডো শো আপ ইত্যাদি সত্যই মসৃণ করা যেতে পারে। মজাদার. চেষ্টা করছি. যদিও সামান্য কাজ নেবে।
জ্যাকব Vlijm

@ জ্যাকবভিলিজম সঠিক দিকটির মতো মনে হচ্ছে .. :) আমার কাছে যা সবচেয়ে গুরুত্বপূর্ণ বলে মনে হচ্ছে তা হল, আইকনটিতে ক্লিক করার সাথে একটি মূল সংমিশ্রণটি সেই অ্যাপ্লিকেশনটির সমস্ত উইন্ডোকে (উদাহরণস্বরূপ, পিক হিসাবে উল্লিখিত অনেক টার্মিনাল) সামনে এনেছে, সম্ভবত ছড়িয়ে দেওয়া আউট, যাতে তারা অ-ওভারল্যাপিং হয় .. (সম্ভবত, এরকম কিছু
Unক্যের

উত্তর:


21

সম্পাদনা - নতুন উত্তর-

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

এই হিসাবে, এটি সম্ভবত বিকল্প 5 (একটি .ডেস্কটপ ফাইল ব্যবহার করে) প্রতিস্থাপন করা উচিত।

কেবল তালিকা থেকে অ্যাপলিকেশনটি বেছে নিন এবং সংশ্লিষ্ট অ্যাপ্লিকেশনটির সমস্ত উইন্ডো (বর্তমান ভিউপোর্টে উপস্থিত) উত্থাপন করবে:

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

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

পিপিএ থেকে:

sudo add-apt-repository ppa:vlijm/upfront
sudo apt-get update
sudo apt-get install upfront

... বা ম্যানুয়ালি:

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

currpath = os.path.dirname(os.path.realpath(__file__))

class Indicator():
    def __init__(self):
        self.app = 'raise_apps'
        iconpath = os.path.join(currpath, "raise.png")
        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())
        # the thread:
        self.update = Thread(target=self.check_recent)
        # daemonize the thread to make the indicator stopable
        self.update.setDaemon(True)
        self.update.start()

    def create_menu(self):
        # creates the (initial) menu
        self.menu = Gtk.Menu()
        # separator
        initial = Gtk.MenuItem("Fetching list...")
        menu_sep = Gtk.SeparatorMenuItem()
        self.menu.append(initial)
        self.menu.append(menu_sep)
        # item_quit.show() 
        self.menu.show_all()
        return self.menu

    def raise_wins(self, *args):
        index = self.menu.get_children().index(self.menu.get_active())
        selection = self.menu_items2[index][1]
        for w in selection:
            execute(["wmctrl", "-ia", w])

    def set_new(self):
        # update the list, appearing in the menu
        for i in self.menu.get_children():
            self.menu.remove(i)
        for app in self.menu_items2:

            sub = Gtk.MenuItem(app[0])
            self.menu.append(sub)
            sub.connect('activate', self.raise_wins)
        # separator
        menu_sep = Gtk.SeparatorMenuItem()
        self.menu.append(menu_sep)
        # quit
        item_quit = Gtk.MenuItem('Quit')
        item_quit.connect('activate', self.stop)
        self.menu.append(item_quit)
        self.menu.show_all()

    def get_apps(self):
        # calculate screen resolution
        res_output = get("xrandr").split(); idf = res_output.index("current")
        res = (int(res_output[idf+1]), int(res_output[idf+3].replace(",", "")))
        # creating window list on current viewport / id's / application names
        w_data = [l.split() for l in get(["wmctrl", "-lpG"]).splitlines()]
        # windows on current viewport
        relevant = [w for w in w_data if 0 < int(w[3]) < res[0] and 0 < int(w[4]) < res[1]]
        # pids
        pids = [l.split() for l in get(["ps", "-u", getpass.getuser()]).splitlines()]
        matches = [[p[-1], [w[0] for w in relevant if w[2] == p[0]]] for p in pids]
        return [m for m in matches if m[1]]

    def check_recent(self):
        self.menu_items1 = []
        while True:
            time.sleep(4)
            self.menu_items2 = self.get_apps()
            for app in self.menu_items2:
                app[0] = "gnome-terminal" if "gnome-terminal" in app[0] else app[0]
            if self.menu_items2 != self.menu_items1:
                GObject.idle_add(
                    self.set_new, 
                    priority=GObject.PRIORITY_DEFAULT
                    )
            self.menu_items1 = self.menu_items2

    def stop(self, source):
        Gtk.main_quit()

def get(command):
    return subprocess.check_output(command).decode("utf-8")

def execute(command):
    subprocess.Popen(command)

Indicator()
GObject.threads_init()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
  • সূচক প্রয়োজন wmctrl

    sudo apt-get wmctrl
    
  • একটি খালি ফাইলে সূচকটি অনুলিপি করুন, এটি সংরক্ষণ করুন raise_apps.py

  • নিচের ছবিটি অনুলিপি, এইভাবে সংরক্ষণ এটা ঠিক নামে raise.pngএক এবং একই ডিরেক্টরির সূচক হিসেবে।

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

  • তারপরে এটি কমান্ডটি দ্বারা চালিত করুন:

    পাইথন 3 /পাথ / টো / রাইজ_এপস.পি

  • আপনি যদি অ্যাপ্লিকেশন শুরু করতে চান তবে যুক্ত করুন:

    /bin/bash -c "sleep 10 && python3 /path/to/raise_apps.py" 
    

পুরানো উত্তর:

প্রশ্ন সম্পর্কে

সঠিক সরঞ্জামের সাহায্যে কোনও অ্যাপ্লিকেশনের সমস্ত উইন্ডো "কেবল" উত্থাপন করা খুব জটিল নয়। কেবলমাত্র বর্তমান ভিউপোর্টের উইন্ডো উত্থাপিত হয়েছে তা নিশ্চিত করা কিছুটা জটিল complicated তবে আসল চ্যালেঞ্জটি হ'ল ব্যবহারকারীর জন্য ক্রিয়াটি উপলব্ধ করার জন্য একটি সুবিধাজনক উপায় সন্ধান করা way

নীচে পাঁচটি বিকল্প যত্ন নিতে দেখাতে কিভাবে এটি করতে কাজ করতে হবে। সমস্ত বিকল্প ব্যবহার করার জন্য প্রস্তুত। শেষ বিকল্পটি অবশ্য পরীক্ষামূলক; এটি দুর্দান্ত কাজ করে তবে কয়েকটি গৌণ প্রসাধনী ডাউনসাইড রয়েছে যেমন বিকল্পের বর্ণনায় বর্ণিত হয়েছে। আমি তবুও এটি একটি ধারণা হিসাবে যুক্ত ।

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

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

সমস্ত বিকল্পের জন্য আপনার প্রয়োজন:

  • wmctrlএটি এখনও আপনার সিস্টেমে না থাকলে ইনস্টল করুন:

    sudo apt-get install wmctrl
    
  • তৈরি করুন, এটি এখনও উপস্থিত না থাকলে ডিরেক্টরি:

    ~/bin
    

    (ব্যাখ্যা: ডিরেক্টরিটি ~/bin$ PATH এ রয়েছে, সুতরাং আপনি তাদের নামে এক্সিকিউটেবল চালাতে পারেন)

  • বিকল্পটির সাথে সম্পর্কিত স্ক্রিপ্টটি অনুলিপি করুন, এটিকে একটি ফাঁকা ফাইলে আটকে দিন, এটি raise_appকোনও (কোনও এক্সটেনশন নয়) হিসাবে সংরক্ষণ করুন ~/binএবং সম্পাদনযোগ্য করুন

পৃথক বিকল্পে, সম্ভাব্য অতিরিক্ত পদক্ষেপগুলি ব্যাখ্যা করা হবে।

বিকল্প 1: এক বা একাধিক অক্ষর প্রবেশ করে অ্যাপ্লিকেশনটি চয়ন করুন

  • একটি কী সমন্বয় টিপুন, একটি zenityউইন্ডো প্রদর্শিত হবে appear
  • প্রবেশের বাক্সে অ্যাপ্লিকেশনটির নামের এক বা একাধিক অক্ষর প্রবেশ করান
  • এন্টার চাপুন

এটি ম্যাচিং অ্যাপ্লিকেশনের সমস্ত উইন্ডোকে ( বর্তমান ভিউপোর্টে) সামনে এনে দেবে ।

gnome-terminalবর্তমান ভিউপোর্টে সমস্ত উইন্ডো উত্থাপন করুন:

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

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

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

  • "কীভাবে ব্যবহার করবেন" বর্ণিত সেট আপ করুন
  • কমান্ড দ্বারা এটি পরীক্ষা করুন:

    raise_app
    
  • যদি সমস্ত ঠিকঠাক কাজ করে তবে এটিকে আপনার পছন্দের শর্টকাট কী সংমিশ্রণে যুক্ত করুন: চয়ন করুন: সিস্টেম সেটিংস> "কীবোর্ড"> "শর্টকাট"> "কাস্টম শর্টকাট"। "+" ক্লিক করুন এবং কমান্ডটি যুক্ত করুন

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

#!/usr/bin/env python3
import subprocess
import getpass

def get(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")

def execute(command):
    subprocess.Popen(["/bin/bash", "-c", command])
# calculate screen resolution
res_output = get("xrandr").split(); idf = res_output.index("current")
res = (int(res_output[idf+1]), int(res_output[idf+3].replace(",", "")))
# creating window list on current viewport / id's / application names
w_data = [l.split()[0:7] for l in get("wmctrl -lpG").splitlines()]
windows = [[get("ps -u "+getpass.getuser()+" | grep "+w[2]).split()[-1], w[0]]
           for w in w_data if 0 < int(w[3]) < res[0] and 0 < int(w[4]) < res[1]]
# ask user for first characters
try:
    arg = get('zenity --entry --text "first characters" --title "application"').strip()
except subprocess.CalledProcessError:
    pass
# raise matching windows
try:
    [execute("wmctrl -ia "+item[1]) for item in windows if item[0].startswith(arg)]
except (subprocess.CalledProcessError, NameError):
    pass



বিকল্প 2: অ্যাপ্লিকেশনগুলির মাধ্যমে চক্র এবং একটি কী সংমিশ্রণে তাদের উইন্ডোগুলি বাড়িয়ে তুলুন:

আসুন আমি একটি কী সমন্বয় অধীনে নিচে স্ক্রিপ্ট আছে Alt+ + 1। আমার বেশ কয়েকটি উইন্ডো খোলা আছে:

  • ফায়ারফক্স
  • জিনোম-টার্মিনাল
  • Nautilus

বর্তমান অবস্থা:

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

আমি একবার Alt+ টিপুন 1, সমস্ত nautilusউইন্ডো উত্থাপিত হয়েছে:

<ইমেজ>

আমি আবার Alt+ টিপুন 1, সমস্ত firefoxউইন্ডো উত্থাপিত হয়েছে:

<ইমেজ>

আমি আবার Alt+ টিপুন 1, সমস্ত gnome-terminalউইন্ডো আবার উত্থিত হয়েছে, চক্রটি আবার শুরু হবে:

<ইমেজ>

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

  • "কীভাবে ব্যবহার করবেন" বর্ণিত সেট আপ করুন
  • এটি আপনার পছন্দের শর্টকাট কী সংমিশ্রণে যুক্ত করুন: চয়ন করুন: সিস্টেম সেটিংস> "কীবোর্ড"> "শর্টকাট"> "কাস্টম শর্টকাট"। "+" ক্লিক করুন এবং কমান্ডটি যুক্ত করুন

    raise_app
    

তারপরে আপনার কী সংমিশ্রণ সহ গ্রুপযুক্ত অ্যাপ্লিকেশন উইন্ডো সহ আপনার অ্যাপ্লিকেশনগুলির মধ্য দিয়ে চক্র করুন।

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

#!/usr/bin/env python3
import subprocess
import getpass

include_single = True # set to False if you only want to cycle through apps with multiple windows

def get(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")

def execute(command):
    subprocess.Popen(["/bin/bash", "-c", command])

def get_frontmost():
    cmd = "xprop -root"
    frontmost = [l for l in get(cmd).splitlines() if\
                 "ACTIVE_WINDOW(WINDOW)" in l][0].split()[-1]
    return frontmost[:2]+"0"+frontmost[2:]
# calculate screen resolution
res_output = get("xrandr").split(); idf = res_output.index("current")
res = (int(res_output[idf+1]), int(res_output[idf+3].replace(",", "")))
# creating window list on current viewport / id's / application names
w_data = [l.split()[0:7] for l in get("wmctrl -lpG").splitlines()]
windows = [[get("ps -u "+getpass.getuser()+" | grep "+w[2]).split()[-1], w[0]]
           for w in w_data if 0 < int(w[3]) < res[0] and 0 < int(w[4]) < res[1]]
# create application list to cycle through
if include_single == False:
    pre = [it[0] for it in windows]
    apps = sorted(list(set([it for it in pre if pre.count(it) > 1])))
else:
    apps = sorted(list(set([it[0] for it in windows])))
if len(apps) == 0:
    pass
else:
    # get the frontmost window as a last itm in the cycle
    front = get_frontmost()
    front_pid = [l.split()[2] for l in get("wmctrl -lp").splitlines() if front in l][0]
    last_infront = get("ps -u "+getpass.getuser()+" | grep "+front_pid).split()[-1]
    # determine next apllication to raise
    if not last_infront in apps or last_infront == apps[-1]:
        arg = apps[0]
        print(arg)
    else:
        arg = apps[apps.index(last_infront)+1]
    # raise matching windows
    try:
        [execute("wmctrl -ia "+item[1]) for item in windows if item[0] == arg]
    except (subprocess.CalledProcessError, NameError):
        pass



বিকল্প 3: কী সংমিশ্রণ টিপুন + বর্তমান ভিউপোর্টে সমস্ত উইন্ডো বাড়াতে লঞ্চার আইকন -বা- অ্যাপ্লিকেশন উইন্ডোটিতে ক্লিক করুন

এটি সম্ভবত বিকল্প / প্রশ্ন / মন্তব্যে বর্ণিত বিষয়গুলির সবচেয়ে কাছাকাছি।

ধরা যাক আমার কাছে একটি অগোছালো ডেস্কটপ রয়েছে যা nautilusঅন্য উইন্ডোগুলির নীচে তিনটি উইন্ডো সমাহিত।

<ইমেজ>

সমস্ত নটিলাস উইন্ডো উত্থাপন করতে (উদাহরণস্বরূপ শর্টকাট: Alt+ 1):

  • প্রেস Alt+ + 1, রিলিজ (!)
  • 3 সেকেন্ডের মধ্যে, হয়:

    লঞ্চারে অ্যাপ্লিকেশনটির আইকনে ক্লিক করুন

    <ইমেজ>

    বা:

    অ্যাপ্লিকেশনটির একটি উইন্ডোতে ক্লিক করুন

    <ইমেজ>

    ফলাফল:

    <ইমেজ>


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

  • "কীভাবে ব্যবহার করবেন" বর্ণিত সেট আপ করুন
  • কমান্ড দ্বারা এটি পরীক্ষা করুন:

    raise_app
    
  • যদি সমস্ত ঠিকঠাক কাজ করে তবে এটিকে আপনার পছন্দের শর্টকাট কী সংমিশ্রণে যুক্ত করুন: চয়ন করুন: সিস্টেম সেটিংস> "কীবোর্ড"> "শর্টকাট"> "কাস্টম শর্টকাট"। "+" ক্লিক করুন এবং কমান্ডটি যুক্ত করুন

তারপর:

  • আপনার কী সমন্বয় টিপুন এবং 3 সেকেন্ডের মধ্যে, হয়:

    • লঞ্চারে অ্যাপ্লিকেশনটির আইকনে ক্লিক করুন
    • অ্যাপ্লিকেশনটির একটি উইন্ডোতে ক্লিক করুন

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

#!/usr/bin/env python3
import subprocess
import getpass
import time

def get(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")

def execute(command):
    subprocess.Popen(["/bin/bash", "-c", command])

def get_frontmost():
    cmd = "xprop -root"
    frontmost = [l for l in get(cmd).splitlines() if\
                 "ACTIVE_WINDOW(WINDOW)" in l][0].split()[-1]
    return frontmost[:2]+"0"+frontmost[2:]

# calculate screen resolution
res_output = get("xrandr").split(); idf = res_output.index("current")
res = (int(res_output[idf+1]), int(res_output[idf+3].replace(",", "")))
# get window data for various purposes
w_data = get("wmctrl -lpG").splitlines()
non_windows = sum([[l.split()[0] for l in w_data if it in l]\
               for it in ("unity-launcher", "unity-panel", "unity-dash", "Hud")], [])
# get id of current window
curr_window = get_frontmost()
# user gets 3 seconds to pick an application window (or launcher icon)
t = 0
while t < 4:
    w_id1 = get_frontmost()
    time.sleep(1)
    w_id2 = get_frontmost()
    if w_id1 == w_id2 or w_id2 in non_windows+[curr_window]:
        t = t+1
    else:
        new_frontmost = w_id2
        break
# raise
try:
    pid = [l.split()[2] for l in w_data if new_frontmost in l]
    wl_data = [l.split() for l in w_data]
    raise_windows = [l[0] for l in wl_data if pid[0] == l[2] and\
                     0 < int(l[3]) < res[0] and 0 < int(l[4]) < res[1]]
    [execute("wmctrl -ia "+item) for item in raise_windows]
except NameError:
    pass


বিকল্প 4: একটি কী সংমিশ্রণ একটি বিকল্প তালিকা কল করে, বর্তমান ভিউপোর্টে অ্যাপ্লিকেশন অনুসারে উইন্ডোগুলির সংখ্যা দেখায়

এইটি আরও সুবিধাজনক হয়ে উঠল তখন আমি ধরে নিয়েছিলাম:

(আবার উদাহরণস্বরূপ) কী সংমিশ্রণ Alt+ টিপলে 1একটি zenityউইন্ডো কল করে , সমস্ত অ্যাপ্লিকেশন এবং তাদের উইন্ডোর সংখ্যা বর্তমান ভিউপোর্টে তালিকাবদ্ধ করুন:

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

কেবল বা তীরগুলি টিপলে আপনি ডান বিকল্পটিতে নিয়ে আসবেন। টিপুন Enterএবং নির্বাচিত অ্যাপ্লিকেশনটির সমস্ত উইন্ডো উত্থাপিত হয়।

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

  • "কীভাবে ব্যবহার করবেন" বর্ণিত সেট আপ করুন
  • কমান্ড দ্বারা এটি পরীক্ষা করুন:

    raise_app
    
  • যদি সমস্ত ঠিকঠাক কাজ করে তবে এটিকে আপনার পছন্দের শর্টকাট কী সংমিশ্রণে যুক্ত করুন: চয়ন করুন: সিস্টেম সেটিংস> "কীবোর্ড"> "শর্টকাট"> "কাস্টম শর্টকাট"। "+" ক্লিক করুন এবং কমান্ডটি যুক্ত করুন

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

#!/usr/bin/env python3
import subprocess
import getpass

def get(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")

def execute(command):
    subprocess.Popen(["/bin/bash", "-c", command])
# calculate screen resolution
res_output = get("xrandr").split(); idf = res_output.index("current")
res = (int(res_output[idf+1]), int(res_output[idf+3].replace(",", "")))
# creating window list on current viewport / id's / application names
w_data = [l.split()[0:7] for l in get("wmctrl -lpG").splitlines()]
windows = [[get("ps -u "+getpass.getuser()+" | grep "+w[2]).split()[-1], w[0]]
           for w in w_data if 0 < int(w[3]) < res[0] and 0 < int(w[4]) < res[1]]
# preparing zenity optionlist
apps = [item[0] for item in windows]
# prevent multiple zenity windows
if apps.count("zenity") > 1:
    pass
elif apps.count("zenity") > 0:
    execute('zenity --info --text "Another Zenity window is open already"')
# preventing empty windowlist
elif len(apps) > 0:
    applist = [[app, str(apps.count(app))] for app in set(apps)]
    applist.sort(key=lambda x: x[1])
    # calling zenity window
    try:
        arg = get('zenity  --list  --text "Choose an application" '+\
               '--title "Current windows" '+\
               '--column "application" '+\
               '--column "windows" '+\
               '--height 250 '+\
               '--width 250 '+\
               (" ").join(sum(applist, [])))
    except subprocess.CalledProcessError:
        pass
    # raise matching windows
    try:
        [execute("wmctrl -ia "+item[1]) \
         for item in windows if arg.startswith(item[0])]
    except (subprocess.CalledProcessError, NameError):
        pass
else:
    execute('zenity --info --text "No windows to list"')



বিকল্প 5: একটি লঞ্চ আইকন থেকে চলমান অ্যাপ্লিকেশনগুলির উইন্ডো উত্থাপন করুন

এই তালিকায় বর্তমানে একটি দ্রুত তালিকায় চলমান অ্যাপ্লিকেশনগুলির সাথে একটি লঞ্চার আইকন উপস্থিত রয়েছে। একটি চয়ন করুন, এবং অ্যাপ্লিকেশনগুলির সমস্ত উইন্ডো উত্থাপিত হবে।

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

চলমান অ্যাপ্লিকেশনগুলির তালিকা (বর্তমান ভিউপোর্টে) পরিবর্তিত হলে লঞ্চারটি স্বয়ংক্রিয়ভাবে আপডেট হয়। দ্রুত তালিকাটি অন্যান্য ভিউপোর্টগুলিতে আলাদা তালিকা দেখায়, যেখানে অন্যান্য অ্যাপ্লিকেশনগুলির উইন্ডোগুলি খোলা হয় (অভিযোজিত হতে 1-2 সেকেন্ড সময় লাগবে)।

উল্লিখিত হিসাবে, যদিও সম্পূর্ণরূপে কার্যকরী, এই বিকল্পটি ধারণা হিসাবে একটি উপায় । এটির মতো কয়েকটি গৌণ প্রসাধনী ডাউনসাইড রয়েছে। সবচেয়ে গুরুত্বপূর্ণ:

  • কার্সার "চাকা" একটি ক্রিয়া পরে কয়েক সেকেন্ডের জন্য স্পিনিং করে রাখে। যদিও এটি কার্যকারিতা প্রভাবিত করে না, এটি কসমেটিক ডাউনসাইড।
  • চলমান অ্যাপ্লিকেশন পরিবর্তনের তালিকার পরে লঞ্চ আইকনে অ্যাপ্লিকেশন তালিকার জন্য আপডেট হতে 1-2 সেকেন্ড সময় নেয়।

তবুও সেটআপটি কিছুটা জটিল (যদিও নীচে বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে):

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

নীচে আপনি পাবেন:

দুটি স্ক্রিপ্ট / একটি আইকন / একটি .desktopফাইল

  1. , "কিভাবে ব্যবহার করতে" হিসেবে সেটআপ প্রস্তুত সংরক্ষণ প্রথম (main-) স্ক্রিপ্ট হিসাবে raise_appমধ্যে~/bin
  2. নীচের আইকনটি সংরক্ষণ করুন (ডান ক্লিক করুন, হিসাবে সংরক্ষণ করুন) as raise.png

    <আইকন>

  3. .desktopখালি ফাইলটিতে ফাইলটি অনুলিপি করুন, লাইনটি সম্পাদনা করুন

        Icon=/path/to/raise.png
    

    আইকনের বাস্তব পথে (উদ্ধৃতি মধ্যে শূণ্যস্থান সঙ্গে পাথ)
    হিসাবে এটি সংরক্ষণ raise.desktopমধ্যে~/.local/share/applications

  4. এটি যুক্ত করতে .desktopফাইলটিকে লঞ্চারে টেনে আনুন

  5. দ্বিতীয় স্ক্রিপ্ট কপি, এটি একটি খালি ফাইল পেস্ট, যেমন এটি সংরক্ষণ update_appsমধ্যে ~/bin, এটা এক্সিকিউটেবল ভুলবেন না।
  6. আপনার প্রারম্ভিক অ্যাপ্লিকেশনগুলিতে নিম্নলিখিত কমান্ডটি যুক্ত করুন (ড্যাশ> স্টার্টআপ অ্যাপ্লিকেশন> যোগ করুন):

    update_apps
    
  7. এটি কাজ করতে লগ আউট এবং পিছনে প্রবেশ করুন।

প্রথম লিপি

#!/usr/bin/env python3
import subprocess
import getpass
import sys

arg = sys.argv[1]

def get(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")

def execute(command):
    subprocess.Popen(["/bin/bash", "-c", command])
# calculate screen resolution
res_output = get("xrandr").split(); idf = res_output.index("current")
res = (int(res_output[idf+1]), int(res_output[idf+3].replace(",", "")))
# creating window list on current viewport / id's / application names
w_data = [l.split()[0:7] for l in get("wmctrl -lpG").splitlines()]
windows = [[get("ps -u "+getpass.getuser()+" | grep "+w[2]).split()[-1], w[0]]
           for w in w_data if 0 < int(w[3]) < res[0] and 0 < int(w[4]) < res[1]]
try:
    [execute("wmctrl -ia "+item[1]) for item in windows if item[0].startswith(arg)]
except (subprocess.CalledProcessError, NameError):
    pass

দ্বিতীয় লিপি

#!/usr/bin/env python3
import subprocess
import getpass
import time
import os

dtfile = os.environ["HOME"]+"/.local/share/applications/raise.desktop"

def get(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")

def execute(command):
    subprocess.Popen(["/bin/bash", "-c", command])
# calculate screen resolution
res_output = get("xrandr").split(); idf = res_output.index("current")
res = (int(res_output[idf+1]), int(res_output[idf+3].replace(",", "")))
# creating window list on current viewport / id's / application names
def applist():
    try:
        w_data = [l.split()[0:7] for l in get("wmctrl -lpG").splitlines()]
        windows = [[get("ps -u "+getpass.getuser()+" | grep "+w[2]).split()[-1], w[0]]
                   for w in w_data if 0 < int(w[3]) < res[0] and 0 < int(w[4]) < res[1]]
    except subprocess.CalledProcessError:
        return []
    else:
        return set([app[0] for app in windows])

def update_dtfile(applications, text):
    actionline = "Actions="+(";").join(applications)+";\n"
    with open(dtfile) as src:
        lines = src.readlines()
    lines = lines[:[i for i in range(len(lines)) \
                 if lines[i].startswith("Actions=")][0]]+[actionline]
    for item in text:
        for it in item:
            lines.append(it)
    with open(dtfile, "wt") as out:
        for line in lines:
            out.write(line)

while True:
    apps1 = applist()
    time.sleep(1)
    apps2 = applist()
    if apps1 != apps2: 
        text = [["[Desktop Action "+it+"]\n", "Name="+it+"\n",
            "Exec=raise_app "+it+"\n", "OnlyShowIn=Unity;\n\n",
            ]for it in apps2]
        update_dtfile(apps2, text)

.ডেস্কটপ ফাইল

[Desktop Entry]
Name=Raise application windows
Comment=Raise groups of windows
Icon=/path/to/raise.png
Terminal=false
Type=Application
Version=1.0

Actions=



সংক্ষিপ্ত বর্ণনা

উপরের সমস্ত সমাধান কমান্ডটি wmctrlব্যবহার করে উইন্ডো তালিকা তৈরি করতে ব্যবহার করে wmctrl -lpG। এই কমান্ডটি লাইন তৈরি করে, যেমনটি দেখায়:

0x044000b3  0 3429   65   24   1615 1026 jacob-System-Product-Name unity - How to show all windows of an application? - Ask Ubuntu - Mozilla Firefox

এই লাইনের মধ্যে রয়েছে:

  • প্রথম কলাম: উইন্ডোর আইডি (আমরা এটি বাড়াতে ব্যবহার করতে পারি)
  • তৃতীয় কলাম: উইন্ডোটির মালিকানাধীন পিড।
  • চতুর্থ / ৫ ম কলাম: উইন্ডোটির জ্যামিতি এক্সওয়াই (যে আমরা উইন্ডোটি বর্তমান ভিউপোর্টে রয়েছে কিনা তা দেখতে ব্যবহার করি, আইকিডাব্লু xrandr)

ps -u <username>অ্যাপ্লিকেশনটির একটি "ব্যবহারকারী-পঠনযোগ্য" সনাক্তকরণ (নাম) পেতে আউটপুটটিতে পিডটি সন্ধান করা হয়েছে ।
এইভাবে আমরা অ্যাপ্লিকেশনগুলিতে উইন্ডোজ বরাদ্দ করতে পারি। পরবর্তীকালে আমরা forকমান্ডটি দিয়ে একটি প্রদত্ত অ্যাপ্লিকেশনটির উইন্ডোগুলি লুপে বাড়াতে পারি wmctrl -ia

অপশন 3-
এ স্ক্রিপ্টটি 3-সেকেন্ডের "ওয়েটিং" লুপটি শুরু করে, xprop -rootবারবার কমান্ডটি ব্যবহার করে সামনেরতম উইন্ডোটির কোনও পরিবর্তন আছে কিনা তা দেখার জন্য; ব্যবহারকারী যদি কোনও অ্যাপ্লিকেশনটির উইন্ডো বাড়াতে লঞ্চার আইকনে ক্লিক করেন বা সরাসরি একটি উইন্ডোতে ক্লিক করেন তবে এটি ঘটবে। যদি তা হয়, তবে লুপটি ভেঙে "নতুন" সম্মুখতম অ্যাপ্লিকেশনটি অনুসন্ধান করে এবং পরবর্তীকালে সেই অ্যাপ্লিকেশনটির অন্যান্য সমস্ত উইন্ডো উত্থাপন করে।


আমি সম্মত, এবং আপনার সমস্ত প্রচেষ্টা জন্য আবার ধন্যবাদ! :) || একটি অদ্ভুত জিনিস আছে যা আমি আগে লক্ষ্য করি নি। কখনও কখনও Option 2স্ক্রিপ্টটি ব্যবহার করার পরে , যখন একটি অ্যাপ্লিকেশন উইন্ডো ফোকাস করা হয় (এটি সর্বাধিক নয়) এবং আমি অন্য উইন্ডোতে ক্লিক করি যা "নীচে" দৃশ্যমান হয়, নীচের অ্যাপ্লিকেশনটি ফোকাস পায় না।
জোছুয়া

@ জোছুয়া এই প্রশ্নের ওপি: Askubuntu.com / প্রশ্নগুলি / 5৫8৮৩০/২ সর্বশেষ "বৈশিষ্ট্য" আপডেটে প্রবর্তিত একটি বাগ সম্পর্কে আমার উপস্থিত হয়েছিল। সত্য / মিথ্যা মিশ্রিত হয়েছিল, স্ক্রিপ্টটি ক্র্যাশ করার কারণ যখন কোনও অ্যাপ্লিকেশনটিতে একটির উইন্ডো থাকে না। আপনি যদি বিকল্প 2 ব্যবহার করেন তবে দয়া করে সর্বশেষ সংস্করণে আপডেট করুন।
জ্যাকব ভিলিজ

বিকল্প 1 আমার জন্য উবুন্টু জেনিয়ালে কাজ করছে না। কিছু @ কিছুর: ~ / বিন $। / রাইজ_অ্যাপ গিটক-বার্তা: GtkDialog একটি ক্ষণস্থায়ী পিতামাতাকে ছাড়াই ম্যাপ করেছে। এটা নিরুৎসাহিত করা হয়। আমি টার্মিনাল উইন্ডো খোলার চেষ্টা করছিলাম। কিছুই ঘটেনি.
xtrinch

@ নীরি আপনি কোন অ্যাপ্লিকেশন নাম ব্যবহার করেছেন? জিটিকি প্যারেন্ট ছাড়াই জেনिटी উইন্ডোটি চললে বার্তাটি বেশ স্বাভাবিক। "নিরুৎসাহিত" ত্রুটি নয়।
জ্যাকব Vlijm

টার্মিনালের প্রথম অক্ষর। এটি কাজ করে - ধরণের - এটি যে কোনও অ্যাপের উইন্ডো উত্থাপন করে - তবে কেবলমাত্র তাদের মধ্যে একটিই প্রত্যাশা অনুযায়ী তাদের সকলেরই নয় @ ব্যবহারকারী 72216
xtrinch

1

এখানে Super+ Wশর্টকাট রয়েছে যা বর্তমানে সমস্ত খোলা উইন্ডোগুলির এক্সপো প্রদর্শন করবে, যদিও এতে অন্যান্য অ্যাপ্লিকেশনগুলি অন্তর্ভুক্ত থাকবে। এটি ডিফল্টরূপে আসে, এবং কোনও পরিবর্তন প্রয়োজন হয় না, সুতরাং এটি সম্ভবত একটি সহজ বিকল্প উপলব্ধ।

অন্যান্য বিষয়গুলির মধ্যে, আপনি স্ক্রিনের ডান এবং বাম অংশগুলিতে Ctrl+ Super+ Left/ Rightবোতামগুলির সাহায্যে উইন্ডোজ স্থাপন করতে এবং Alt + with (টিল্ড, এক নম্বর কী এর পাশের টিল্ড) দিয়ে স্যুইচ করতে পারেন।


এটি যদিও কোনও অ্যাপ্লিকেশনটির সমস্ত উইন্ডো শীর্ষে আনে না। আপনি এগুলি দেখতে পারেন, তবে আপনি অনেক ক্লিক না করে এগুলি ব্যবহার করতে পারবেন না।
জোছুয়া

1

আপনি যদি অ্যাপ্লিকেশনগুলির মাধ্যমে চক্রের জন্য Alt + ট্যাব টিপেন এবং আপনি একাধিক উইন্ডোতে একটিতে পৌঁছান, তবে কেবল Alt কীটি ধরে রাখুন এবং প্রায় 1 পুরো সেকেন্ডের পরে আইকনটি সেই অ্যাপ্লিকেশনের জন্য সমস্ত উইন্ডোগুলির দৃশ্যের সাথে প্রতিস্থাপন করা হবে।

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


1
সরাসরি অ্যাপ্লিকেশন উইন্ডো প্রদর্শিত হতে আপনি ডাউন তীর কী টিপতে পারেন।
ক্রিস

1

আমি @ জ্যাকবভিলিজমের উত্থাপন_অ্যাপস.পি স্ক্রিপ্টটি নিয়েছি এবং এটিকে আরও দৃ making়তর করা সহ এর কিছু উন্নতি করেছি।

বিশেষত, আমি খুঁজে পেয়েছিলাম যে এক বা দু'দিন পরে @ জ্যাকবভিজিম এর স্ক্রিপ্টটি কাজ করা বন্ধ করে দেবে এবং আমাকে আবার স্ক্রিপ্টটি পুনরায় চালু করতে হবে, এটি আবার কাজ করার জন্য। পূর্ববর্তী ক্ষেত্রে, আমার সর্বোত্তম অনুমান যে xrandr এ অসংখ্য কল অবশেষে সমস্যা সৃষ্টি করে।

যাইহোক, আমি তার কোডটি অভিযোজিত করেছি, ভোটগ্রহণের ফ্রিকোয়েন্সি 5 সেকেন্ড থেকে প্রতি 1 সেকেন্ডে বাড়িয়েছি, কারণ এটি কোনওভাবেই সিপিইউ ব্যবহার করে না এবং এটি আরও শক্তিশালী করে তুলেছে। আমি সাধারণত সমস্যাগুলি ছাড়াই এটি কয়েক দিন / সপ্তাহ ধরে চলতে পারি।

একটি সতর্কতা হ'ল স্ক্রিন রেজোলিউশন মাত্রা পেতে, আমি কেবল প্রারম্ভকালে একবার xrandr কল করি। সুতরাং আপনি যদি আপনার স্ক্রিন রেজোলিউশন পরিবর্তন করেন (উদাহরণস্বরূপ 1920x1080 থেকে অন্য কোনও রেজোলিউশনে), আপনি সম্ভবত ম্যানুয়ালি উত্স-অ্যাপস.পিটি পুনরায় চালু করতে চান যাতে এটি নতুন রেজোলিউশনটি বেছে নিতে পারে। ব্যক্তিগতভাবে, আমি কখনই আমার স্ক্রিন রেজোলিউশন পরিবর্তন করি না, সুতরাং এটি আমার পক্ষে একটি নন-ইস্যু। অতিরিক্ত হিসাবে, আমার বিশ্বাস করার দৃ strong় কারণ রয়েছে যে এক্সরেন্ডারে অনেকগুলি কলই ছিল যা @ জ্যাকবভিলিজমের স্ক্রিপ্টটির সংস্করণটি এক বা দু'দিন পরে কাজ বন্ধ করে দিয়েছে, তাই আমি দৃ strongly়ভাবে পরামর্শ দিচ্ছি যে কেবলমাত্র বহু কলকেই আবার এক্স্রেন্ডারে না রেখে ..

বিটিডাব্লু, আপনার / usr / লোকাল / আইকন / ডিরেক্টরিতে উত্থাপন.png চিত্র স্থাপন করা দরকার। অথবা যদি আপনি বিভিন্ন ডিরেক্টরিতে উত্স.পিএনগি রাখতে চান তবে স্ক্রিপ্টে উপযুক্ত পরিবর্তন করুন, যাতে স্ক্রিপ্টটি চিত্র ফাইলটি খুঁজে পেতে পারে।

আশা করি, উবুন্টু এই জাতীয় 'উইন্ডোজ সমস্ত উইন্ডো' কার্যকারিতা তাদের সিস্টেমে শীঘ্রই খুব কার্যকর হিসাবে একীভূত করবে এটি কার্যকর হিসাবে:

#!/usr/bin/python2
#
# Note to self:
# You need to add raise.png to /usr/local/icons/ directory.
#
# This script was taken from: /ubuntu/446521/how-to-show-raise-all-windows-of-an-application, 
# (@JacobVlijm's answer), and then improved to fix some
# issues, that were causing it to stop working after a day or two.
#
#
from __future__ import print_function

from sys import stderr, exit
import signal
import gi

gi.require_version('Gtk', '3.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, AppIndicator3, GObject, GLib

import logging
import logging.handlers

import time
import os
import subprocess
import getpass

logger = logging.getLogger('MyLogger')
logger.setLevel(logging.DEBUG)

log_handler = logging.handlers.SysLogHandler(address='/dev/log')

logger.addHandler(log_handler)


currpath = os.path.dirname(os.path.realpath(__file__))

class Indicator():
    def __init__(self):
        self.app = 'raise-apps'
        iconpath = '/usr/local/icons/raise.png'
        self.indicator = AppIndicator3.Indicator.new(
            self.app, iconpath,
            AppIndicator3.IndicatorCategory.OTHER)
        self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)

        self.prev_menu_item_names = []
        self.menu_items = []

        res_output = get("xrandr").split()
        if (len(res_output) == 0):
            logger.error("raise-apps.py: invocation of xrandr failed! Unable to continue..")
            exit(-1)

        idf = res_output.index("current")
        res = (int(res_output[idf+1]), int(res_output[idf+3].replace(",", "")))
        (self.screen_width, self.screen_height) = res
        logger.info("raise-apps.py: screen resolution is %s x %s" % (self.screen_width, self.screen_height))

        self.indicator.set_menu(self.create_menu())

        GLib.timeout_add_seconds(1.0, self.check_recent)

    def create_menu(self):
        # creates the (initial) menu
        self.menu = Gtk.Menu()
        # separator
        initial = Gtk.MenuItem("Fetching list...")
        menu_sep = Gtk.SeparatorMenuItem()
        self.menu.append(initial)
        self.menu.append(menu_sep)

        self.menu.show_all()
        return self.menu

    def raise_wins(self, *args):
        index = self.menu.get_children().index(self.menu.get_active())
        selection = self.menu_items[index][1]
        for w in selection:
            execute(["wmctrl", "-ia", w])

    def set_new(self):
        # update the list, appearing in the menu
        for i in self.menu.get_children():
            self.menu.remove(i)
        for app in self.menu_items:

            sub = Gtk.MenuItem(app[0])
            self.menu.append(sub)
            sub.connect('activate', self.raise_wins)
        # separator
        menu_sep = Gtk.SeparatorMenuItem()
        self.menu.append(menu_sep)

        # quit
        item_quit = Gtk.MenuItem('Quit')
        item_quit.connect('activate', self.stop)
        self.menu.append(item_quit)
        self.menu.show_all()

    def get_apps(self):
        # creating window list on current viewport / id's / application names
        w_data = [l.split() for l in get(["wmctrl", "-lpG"]).splitlines()]
        # windows on current viewport
        relevant = [w for w in w_data if 0 < int(w[3]) < self.screen_width and 0 < int(w[4]) < self.screen_height]
        # pids
        pids = [l.split() for l in get(["ps", "-u", getpass.getuser()]).splitlines()]
        matches = [[p[-1], [w[0] for w in relevant if w[2] == p[0]]] for p in pids]
        return [m for m in matches if m[1]]

    def check_recent(self):
        # print("in check_recent()", file=stderr)
        self.menu_items = self.get_apps()
        for app in self.menu_items:
            app[0] = "gnome-terminal" if "gnome-terminal" in app[0] else app[0]
        # check if menu items have changed:
        has_changed = len(self.menu_items) != len(self.prev_menu_item_names)
        if (not has_changed):
            for i in range(len(self.menu_items)):
                if self.prev_menu_item_names[i] != self.menu_items[i][0]:
                    has_changed = True
                    break

        if has_changed:
            GObject.idle_add(
                self.set_new,
                priority=GObject.PRIORITY_DEFAULT)

            self.prev_menu_item_names = []
            for item in self.menu_items:
                self.prev_menu_item_names.append(item[0])

        GLib.timeout_add_seconds(1.0, self.check_recent)


    def stop(self, source):
        Gtk.main_quit()


    def recreate_menu(self, *args):
        logger.info("in recreate_menu()")
        self.prev_menu_item_names = []
        self.menu_items = []

        self.menu_items = self.get_apps()
        for app in self.menu_items:
            app[0] = "gnome-terminal" if "gnome-terminal" in app[0] else app[0]

        GObject.idle_add(
            self.set_new,
            priority=GObject.PRIORITY_DEFAULT)

        self.prev_menu_item_names = []
        for item in self.menu_items:
            self.prev_menu_item_names.append(item[0])


def get(command):
    # enable to get a feel for what this app is doing..
    # print("get", command, file=stderr)
    try:
        return subprocess.check_output(command).decode("utf-8")

    except subprocess.CalledProcessError as e:
        logger.error("raise-apps.py error: cmd=%s, error=%s" % (command, e))
        return ""

    except OSError as e:
        logger.error("raise-apps.py error: cmd=%s, error=%s" % (command, e))
        return ""

def execute(command):
    # enable to get a feel for what this app is doing..
    # print("exec", command, file=stderr)
    try:
        subprocess.call(command)

    except subprocess.CalledProcessError as e:
        logger.error("raise-apps.py error: cmd=%s, error=%s" % (command, e))
        return ""
    except OSError as e:
        logger.error("raise-apps.py error: cmd=%s, error=%s" % (command, e))
    return ""


logger.info("(raise-apps.py is starting up..)")
Indicator()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.