अगर पहले से नहीं खुला है तो ही ऐप लॉन्च करें


16

मैं मैक ओएस एक्स पर अल्फ्रेड के उपयोग की नकल करना चाहूंगा, जहां यदि आप इसे खोजने के बाद एक ऐप खोलने की कोशिश करते हैं, तो यह केवल एक नई विंडो खोलेगा यदि प्रोग्राम पहले से ही नहीं चल रहा है, अन्यथा यह फोकस पर सेट होगा वर्तमान में उस एप्लिकेशन का इंस्टेंस चल रहा है। क्या नई विंडो खोलने से पहले इसके लिए जाँच करने के लिए लॉन्चर के डिफ़ॉल्ट व्यवहार को बदलने के लिए कुछ भी है?


इसके अलावा @pidge ऐसा करना मुश्किल नहीं होगा, लेकिन यह "व्यवहार के साथ खुले" पर राइट-क्लिक को भी प्रभावित करेगा। मुझे लगता है कि यह एक अस्वीकार्य दुष्प्रभाव है।
याकूब Vlijm

1
मुझे लगता है कि आपको एक ऐसी स्क्रिप्ट बनाने में सक्षम होना चाहिए जो यह जांच सके कि क्या कोई विशिष्ट प्रक्रिया पहले से चल रही है और किसी नई प्रक्रिया को शुरू करने या मौजूदा विंडो पर ध्यान देने का निर्णय ले सकती है। दुर्भाग्य से, मैं अभी तक स्क्रिप्टिंग में बहुत अच्छा नहीं हूं ... लेकिन @JacobVlijm को हर उद्देश्य के लिए एक लड़के के रूप में जाना जाता है;) आपको संबंधित स्क्रिप्ट द्वारा सभी मूल लॉन्चरों को बदलना होगा। सुनिश्चित नहीं हैं कि अगर आप / ऐसा करने के लिए कर सकते हैं चाहता हूँ - मैं नहीं होगा ...
बाइट कमांडर

2
यदि आप स्क्रिप्ट रूट के साथ जाते हैं तो आप इस स्क्रिप्ट को एक शुरुआती बिंदु के रूप में उपयोग कर सकते हैं । मैंने इसे शुरुआत में LXDE / Openbox के लिए लिखा था, लेकिन इसे एकता में भी काम करना चाहिए। स्क्रिप्ट और इसके उपयोग के बारे में अधिक जानकारी यहाँ
Glutanimate

1
@ByteCommander बिल्कुल वही था जो मेरे मन में था। आप स्क्रिप्ट भी कर सकते हैं- .desktopफाइलों में कमांड्स को बदलें । यदि आप .desktopफ़ाइल में कमांड को बदलते हैं , तो राइट-क्लिक ओपन ऑप्शन टूट गया है।
याकूब Vlijm

1
किस डेस्कटॉप पर्यावरण के लिए?
j0h

जवाबों:


6

7 अप्रैल को अपडेट करें: एक अलग संस्करण जोड़ा गया और अल्बर्ट मिला, अपडेट और बोनस को देखें !!!

डैश कार्यक्षमता के बारे में : आपने " नई विंडो खोलने से पहले इसके लिए जाँच करने के लिए लॉन्चर के डिफ़ॉल्ट व्यवहार को बदलने के लिए वैसे भी " कहा है। मूल उत्तर है, नहीं, एक नियमित उपयोगकर्ता के रूप में आपके पास उस व्यवहार को डैश में जोड़ने का कोई तरीका नहीं है। हालाँकि, अगर कोई एकता स्कोप डेवलपर होगा जो इसे लागू करने के लिए तैयार होगा, तो आप उन्हें हल कर सकते हैं या यदि आप संकल्प और सीखने के लिए तैयार हैं तो खुद को विकसित कर सकते हैं। मेरे कोडिंग कौशल बहुत मामूली हैं, इसलिए मैं शेल स्क्रिप्टिंग और वर्कअराउंड के रूप में स्क्रिप्ट के लिए उपलब्ध ग्राफ़िकल फ्रंट-एंड का उपयोग करता हूं।

सम्बंधित जानकारी

मूल पोस्ट:

मैंने एक पटकथा लिखी है जिसमें आप जो मांगते हैं उसे हासिल करने के लिए जिनीट डायलॉग और wmctrl का उपयोग करते हैं। ध्यान दें कि यह एक ग्राफिकल स्क्रिप्ट है, जिसका अर्थ है कि यह केवल विंडोज़ के साथ, GUI में काम करेगा, और यदि आप tty में कुछ लॉन्च करने की कोशिश करेंगे तो यह काम नहीं करेगा। इसके अलावा, अल्फ्रेड को जो मैं समझता हूं, वही काम करता है। के रूप में वर्णित आप इसे करने के लिए एक डेस्कटॉप शॉर्टकट या इसे करने के लिए लांचर शॉर्टकट बना सकते हैं यहाँ और यहाँ

लिपी:

#!/bin/bash
# Author: Serg Kolo
# Description: A launcher script that checks whether
#       or not a window of a particular program already exists
#       If a window of such program is open, bring it to focus
#       Otherwise - launch a new window
#       Written for /ubuntu//q/440142/295286
# Date: April 6 , 2015
#


MYPROG=$( zenity --entry --title='MY LAUNCHER' --text='Type the name of application to run' )
sleep 0.5
wmctrl -lx | awk '{print $3}' | grep -i "$MYPROG"

if [ $? -eq 0 ]; then
    sleep 1         
    wmctrl -xa $MYPROG
   #as an alternative try the line bellow
   #wmctrl -a $MYPROG
    exit 1
else 
    $MYPROG &
    exit 0
fi

साइड नोट्स: पिछले संस्करण में, स्क्रिप्ट का इको $ का उपयोग किया गया था ?, यह जांचने के लिए कि क्या पिछले एक्सप्रेशंस सफलतापूर्वक बाहर निकले हैं। मुरु के सुझाव (संपादित से) के अनुसार, मैंने कोड को कुछ अधिक कॉम्पैक्ट संस्करण में बदल दिया है, इसलिए मेरा सुझाव है कि आप पिछले संस्करण और वर्तमान पर एक नज़र डालें।

इसके अलावा, पहले wmctrl -a $MYPROGGoogle-क्रोम या क्रोमियम-ब्राउज़र के परीक्षण के साथ काम नहीं किया था; कुछ मूर्खतापूर्ण कारणों से कुछ प्रोग्रामों में विंडो की WM_CLASS संपत्ति होती है, जबकि इसके द्वारा सूचीबद्ध प्रोग्राम dpkg --get-selectionsलोअरकेस है (बस पढ़ें man wmctrlऔर चलाएं wmctrl -lx, आपको पता चल जाएगा)। उस -ax को जोड़कर इस बात का ध्यान रखना चाहिए। स्क्रिप्ट पहले से खुली क्रोमियम विंडो को लाती है जैसा कि उसे करना चाहिए

एक और बात - wmctlr इसमें कुछ अजीब है कि इसे कभी-कभी देरी की आवश्यकता होती है (किसी अन्य स्क्रिप्ट में इसके साथ अनुभव था), इसलिए मुझे sleep 1लाइन जोड़ना पड़ा । पहले यह फ़ायरफ़ॉक्स के साथ चालू और बंद होगा, लेकिन अब यह तैरने का काम करता है।

एक्शन में स्क्रिप्ट

एनीमेशन बॉलो में आप देख सकते हैं कि स्क्रिप्ट के पहले रन पर, फ़ायरफ़ॉक्स ओपन का एक उदाहरण है, और स्क्रिप्ट स्विच उस विंडो पर केंद्रित है; दूसरे परीक्षण में, मैंने google-chrome का नया उदाहरण खोला, जो पहले नहीं खुला था। (साइड नोट: यदि आप डेस्कटॉप के बारे में उत्सुक हैं, तो, यह कैरो डॉक के साथ ओपनबॉक्स है)

टिप्पणियों में प्रति सुझाव, एम्बेडेड एनीमेशन को हटा दिया गया, केवल लिंक पोस्ट किया गया। अगर यह टूट गया है तो कृपया रिपोर्ट करें! http://i.stack.imgur.com/puuPZ.gif

अपडेट, 7 अप्रैल

मैंने ज़ीनिटी के ड्रॉप-डाउन एंट्री बॉक्स में सूचीबद्ध सभी कार्यक्रमों को बनाने के लिए स्क्रिप्ट को कुछ हद तक सुधार दिया। अब उपयोगकर्ता को प्रत्येक प्रोग्राम को याद करने की आवश्यकता नहीं है, लेकिन तीर कुंजियों का उपयोग करके बस उनमें से एक सूची को स्क्रॉल कर सकते हैं या बस ड्रॉप डाउन मेनू खोल सकते हैं। इसके अलावा, यह बेहतर संस्करण विंडोज़ को नाम से नहीं, बल्कि विंडो आईडी द्वारा बढ़ाता है, जो बेहतर प्रदर्शन देता है। ध्यान दें, जिस तरह से मैं .desktop फ़ाइलों के माध्यम से जाता हूं, एक तरह से बेमानी है, दो बार कट कमांड का उपयोग करते हुए, लेकिन चूंकि मेरी स्क्रिप्ट-फू इतनी अच्छी नहीं है, इसलिए यह सब मैं कर सकता हूं। सुधार के सुझावों का स्वागत है!

#!/bin/bash
# Author: Serg Kolo
# Description: Second version of a launcher script that checks whether
#       or not a window of a particular program already exists
#       If a window of such program is open, bring it to focus
#       Otherwise - launch a new window
#       Written for /ubuntu//q/440142/295286
# Date: April 7 , 2015
#

set -x

MYPROG=$(zenity --entry --text 'Select program from list' --entry-text $(ls /usr/share/applications/*.desktop | cut -d'/' -f5 | cut -d'.' -f1 | xargs echo))
sleep 0.5
# Do we have a window of such program ?
wmctrl -lx| awk '{print $3}'  | grep -i $MYPROG

if [ $? -eq 0 ]; then
    sleep 0.5 # if yes, find that window id, and raise it
    WINID=$(wmctrl -lx | grep -i $MYPROG | awk 'NR==1{print $1}')
    wmctrl -ia $WINID &
 #  exit 0  
else
    echo $MYPROG | grep -i libreoffice
    if [ $? -eq 0  ]
    then
        MYPROG=$(echo $MYPROG | sed 's/-/ --/g')
    fi
    $MYPROG &

#  exit 0 
fi

यहाँ छवि विवरण दर्ज करें

बक्शीश:

मुझे वास्तव में अल्बर्ट मिला है , जो अल्फ्रेड का लिनक्स संस्करण है, लेकिन खुद इसे आजमाया नहीं है। हालांकि बाहर की जाँच। हालांकि, जैसा कि जैकब ने पहले ही उल्लेख किया है, यह अभी भी छोटी गाड़ी है।

ग्नोम-डो नामक एक ऐप है, जो ग्राफिक रूप से अल्फ्रेड के समान दिखता है, हालांकि इसमें इस स्क्रिप्ट की समान कार्यक्षमता नहीं है।

यहाँ छवि विवरण दर्ज करें

मुझे पता है कि अगर आप इस स्क्रिप्ट को पसंद करते हैं, अगर कुछ भी ठीक करने की आवश्यकता है, और यदि आप इसे उपयोगी पाते हैं तो उत्तर को न भूलें


वैसे, ध्यान दें कि मैं कैसे कार्यक्रमों के नाम टाइप करता हूं - बिल्कुल जैसा कि सूचीबद्ध है dpkg --get-selectons। "लेखक" अभ्यस्त काम को टाइप करके कामेच्छा लेखक को लॉन्च करना, लेकिन आप इसे अपने ~ / बिन, / बिन या / usr / बिन फ़ोल्डर में सिम्लिंक बना सकते हैं या .bashrc या .profile में अन्य नाम का उपयोग कर सकते हैं।
सर्गी कोलोडियाज़नी

सूचना यह भी है, कि आपको wmctl स्थापित करने की आवश्यकता होगी, यह डिफ़ॉल्ट रूप से नहीं आता है, लेकिन बहुत आसान है। मैं भी इसे बनाने के लिए उपयोग किया है यह
सर्गी Kolodyazhnyy

क्या आप किसी छवि को सत्यानाश से बदल सकते हैं, सत्यानाश से जोड़ सकते हैं? मेरा ब्राउज़र पृष्ठ को "लोड" करता रहता है, इसलिए मैं इसे ताज़ा नहीं कर सकता। (और
घोषणा

धन्यवाद! लिंक फ़ायरफ़ॉक्स में नहीं, क्रोम में ठीक काम करता है।
जैकब व्लिजम

@ जेकॉब्लिजम ऊग, तो यह करता है। निश्चित नहीं है कि फ़ायरफ़ॉक्स इसे खेलने से मना क्यों कर रहा है। यह सिर्फ मैं क्या अपलोड मूल रूप से imgur लिंक है
Sergiy Kolodyazhnyy

5

1. दूसरा पानी का छींटा

एक स्क्रिप्ट के नीचे जिसका उपयोग डैश के विकल्प के रूप में किया जा सकता है, जब यह आपके प्रश्न में वर्णित अनुप्रयोगों को चलाने के लिए आता है।

यह डैश जैसी ही कार्यक्षमता वाली एक खिड़की से मौजूद है; यदि एप्लिकेशन का एक या अधिक वर्ण टाइप करते हैं, तो एप्लिकेशन सूची में दिखाई देगा। Enterपहले से चल रहा है या नहीं, इस पर निर्भर करते हुए, आवेदन शुरू करने या बढ़ाने के लिए दबाएं ।

आप इसे शॉर्टकट कुंजी संयोजन से कॉल कर सकते हैं, या इसे डैश के समान उपयोग करने के लिए लॉन्चर में एक आइकन सेट कर सकते हैं (आगे नीचे देखें), या दोनों।

यहाँ छवि विवरण दर्ज करें

लिपी

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

user = getpass.getuser()
get = lambda x: subprocess.check_output(["/bin/bash", "-c", x]).decode("utf-8")
skip = ["%F", "%U", "%f", "%u"]; trim = ["chrome", "chromium", "nautilus"]

def apply(command):
    if "libreoffice" in command:
        proc = [l.split()[0] for l in get("ps -u "+user).splitlines() if "soffice.bin" in l]
        module = command.split("--")[-1]
        time.sleep(0.1)
        try:
            ws = sum([[w.split()[0] for w in get("wmctrl -lp").splitlines() if process in w and module in w.lower()] for process in proc], [])[0]
            subprocess.call(["wmctrl", "-ia", ws])
        except IndexError:
            subprocess.Popen(["/bin/bash", "-c", command+"&"])
    else:
        check = command.split("/")[-1][:14]
        proc = [p.split()[0] for p in get("ps -u "+user).splitlines() if check in p]
        time.sleep(0.5)
        try:
            ws = sum([[w.split()[0] for w in get("wmctrl -lp").splitlines() if process in w] for process in proc], [])
            if command == "nautilus":
                real_window = [w for w in ws if "_NET_WM_WINDOW_TYPE_NORMAL" in get("xprop -id "+w)][0]
            else:
                real_window = ws[0]
            subprocess.call(["wmctrl", "-ia", real_window])
        except IndexError:
            subprocess.Popen(["/bin/bash", "-c", command+"&"])
# default directories of .desktop files; globally, locally, LibreOffice- specific when separately installed
globally = "/usr/share/applications"; locally = os.environ["HOME"]+"/.local/share/applications"; lo_dir = "/opt/libreoffice4.4/share/xdg"
# create list of .desktop files; local ones have preference
local_files = [it for it in os.listdir(locally) if it.endswith(".desktop")]
global_files = [it for it in os.listdir(globally) if it.endswith(".desktop")]
lo_spec = [it for it in os.listdir(lo_dir) if it.endswith(".desktop")] if os.path.exists(lo_dir) else []
for f in [f for f in local_files if f in global_files]:
    global_files.remove(f)
for f in [f for f in local_files if f in lo_spec]:
    lo_spec.remove(f)
dtfiles = [globally+"/"+f for f in global_files]+[locally+"/"+f for f in local_files]+[lo_dir+"/"+f for f in lo_spec]
# create list of application names / commands
valid = []
for f in dtfiles:
    content = open(f).read()
    if all(["NoDisplay=true" not in content,"Exec=" in content]):
        lines = content.splitlines()
        name = [l.replace("Name=", "") for l in lines if "Name=" in l][0]
        command = [l.replace("Exec=", "") for l in lines if all(["Exec=" in l, not "TryExec=" in l])][0]
        valid.append((name, command))
valid.sort(key=lambda x: x[0])
# create zenity list + window
list_items = '"'+'" "'.join([f[0] for f in valid])+'"'
proposed = 'zenity --list --text "Type one or more characters... " --column="Application List" '+\
           '--title="Dash the Second" --height 450 --width 300 '+list_items
try:
    choice = subprocess.check_output(["/bin/bash", "-c", proposed]).decode("utf-8").strip().split("|")[0]
    command = [r[1] for r in valid if r[0] == choice][0]
    # command fixes:
    for s in skip:
        command = command.replace(" "+s, "")
    for t in trim:
        if t in command:
            command = t
    apply(command)
except subprocess.CalledProcessError:
    pass

कैसे इस्तेमाल करे

स्क्रिप्ट को wmctrlस्थापित करने की आवश्यकता है:

sudo apt-get install wmctrl

फिर:

  1. एक खाली फ़ाइल में ऊपर स्क्रिप्ट चिपकाएँ, इसे सहेजें dash_alternative.py
  2. इसे शॉर्टकट कुंजी संयोजन में जोड़ें: चुनें: सिस्टम सेटिंग्स> "कीबोर्ड"> "शॉर्टकट"> "कस्टम शॉर्टकट"। "+" पर क्लिक करें और कमांड जोड़ें:

    python3 /path/to/dash_alternative.py
    

व्याख्या

जब स्क्रिप्ट चलाई जाती है, तो यह सभी अनुप्रयोगों को सूचीबद्ध करता है, जिनका प्रतिनिधित्व किया जाता है /usr/share/applications। यह .dektopफाइलों को खोजता है , जो सभी एप्लिकेशन नामों की सूची बनाता है (पहले "नाम =" लाइन से) और एप्लिकेशन चलाने के लिए कमांड (पहले "एक्सेक =" लाइन से)।

इसके बाद, सभी अनुप्रयोगों को क्रमबद्ध तरीके से प्रस्तुत करते हुए, एक ज़ेनिटी सूची बनाई जाती है।

जब भी कोई एप्लिकेशन चुना जाता है, तो स्क्रिप्ट चल रही प्रक्रियाओं की सूची में दिखती है यदि एप्लिकेशन चल रहा है। यदि हां, तो संबंधित विंडो को उठाया जाता है। यदि नहीं, तो एक नया उदाहरण खोला जाता है।

टिप्पणियाँ

  1. 12.04 पर स्क्रिप्ट को चलाने के लिए (चूंकि मूल प्रश्न को टैग किया गया था, 12.04बस उसे शेल्हांग को बदलकर #!/usr/bin/env pythonकमांड द्वारा चलाएं

    python /path/to/dash_alternative.py
    
  2. जहां तक ​​मैंने इसकी जांच की, स्क्रिप्ट ठीक काम करती है। कमांड और उनके (नहीं-) इसी प्रक्रिया नामों (जैसे LibreOffice<> soffice.bin), अलग खिड़की प्रकार ( nautilus, आवेदन प्रति एकाधिक पीआईडी की कई अलग अलग खिड़की प्रकार, के अलावा "असली" खिड़कियां है) ( Chromium, Google-chrome) अपवाद पैदा कर सकता है, कि मैं उदाहरण में ठीक किया गया ऊपर। यदि कोई किसी मुद्दे पर चलता है, तो कृपया उसका उल्लेख करें।

2. अतिरिक्त: चल रहे अनुप्रयोगों के लिए "वास्तविक" डैश के विकल्प के रूप में इसे सेट करना

  1. ऊपर बताए अनुसार स्क्रिप्ट को कॉपी और सुरक्षित करें
  2. नीचे दिए गए आइकन को इस तरह सहेजें (राइट-क्लिक> सुरक्षित) dash_alternative.png

    यहाँ छवि विवरण दर्ज करें

  3. एक खाली फ़ाइल में नीचे दिए गए कोड को कॉपी करें, इसे इस ~/.local/share/applicationsरूप में सहेजें dash_thesecond.desktop/path/to/dash_alternative.py(स्क्रिप्ट) और /path/to/dash_alternative.png(आइकन) के लिए सही पथ सेट करें

    [Desktop Entry]
    Name=Dash the Second
    Exec=python3 /path/to/dash_alternative.py
    Icon=/path/to/dash_alternative.png
    Type=Application
    Hidden=false
    
  4. .desktopफ़ाइल को लॉन्चर पर खींचें :


1
यह जानकर अच्छा लगा कि .desktop फ़ाइलों का एक संपूर्ण फ़ोल्डर है! मैं सोच रहा था कि देशी और उपयुक्त-स्थापित एप्लिकेशन कमांड के बजाय नाम से कैसे सूचीबद्ध होते हैं। वहाँ अच्छा काम!
सर्गी कोलोडियाज़नी

@ शेर शुक्रिया! और आप के लिए समान :)। .desktopफ़ाइलों के लिए एक स्थानीय निर्देशिका भी है ~/.local/share/applications:। मुझे लगा कि मैं खोज को विश्व स्तर पर स्थापित अनुप्रयोगों तक सीमित कर दूंगा।
याकूब Vlijm

जैकब, मैं अजगर को नहीं जानता, लेकिन शायद यह आपकी स्क्रिप्ट को एकता के दायरे में बदलकर आपके लिए उपयोगी होगा। मेरी समझ यह है कि यह डैश कार्यक्षमता को बदलने का एकमात्र तरीका है कि कैसे ओपी चाहता है
सर्गियो कोलोडियाज़नी

@ शेर शुक्रिया! यह एक दिलचस्प पोस्ट है, निश्चित रूप से इस पर एक अच्छा लगेगा!
बजे जैकब व्लिजम

0

के लिए लांचर (स्क्रीन के बाईं ओर पर खड़ी पैनल), यह पहले से ही डिफ़ॉल्ट व्यवहार के रूप में यह कार्य स्विचिंग इंटरफेस है,।

के लिए पानी का छींटा (बड़े बिट जब आप Ubuntu लोगो क्लिक खुलती), वहाँ कोई रास्ता नहीं है स्रोत कोड में ही करने के लिए एक संभवतः महत्वपूर्ण संशोधन के बिना, इस तरह से व्यवहार बदलने के लिए है।

हालाँकि, कुछ ऐप पहले से ही ऐसा कर सकते हैं, क्योंकि वे इस तरह से व्यवहार करने के लिए डिज़ाइन किए गए हैं। हालांकि सभी ऐप इस तरह से लागू नहीं किए जाने चाहिए और जरूरी नहीं हैं।

एक अन्य विशेषता के रूप में, यदि आप Super+ के साथ फैले विंडो को खोलते हैं W, और एक एप्लिकेशन नाम लिखना शुरू करते हैं, तो उस एप्लिकेशन के लिए विंडो केवल दिखाए जाने वाले होंगे।


मुझे वास्तव में ओपी का वांछित संस्करण लिनक्स संस्करण मिला है, मेरी पोस्ट, बोनस अनुभाग देखें। स्पष्ट रूप से किसी और के पास अल्फ्रेड को लिनक्स पर लाने का विचार था
सर्गी कोलोडियाज़नी

1
@ शेर कृपया अल्बर्ट को आज़माएं; अल्बर्ट के पास अभी भी "लिब्रे ऑफिस बग", "क्रोमियम बग" और "क्रोम बग" है। यहां तक ​​कि "फ़ाइलें बग" ... अल्बर्ट बस हमेशा उन अनुप्रयोगों का एक नया उदाहरण खोलता है। LibreOffice बस काम नहीं करता है। इसके अलावा, अपने लिंक के नीचे टिप्पणी में आप कई मुद्दों को पा सकते हैं।
जैकब व्लिजम

@Serg नहीं, आपको बैकग्राउंड में चल रहे सॉफ़्टवेयर के एक अतिरिक्त टुकड़े को जोड़कर, एक वर्कअराउंड मिल गया, जो पूरी तरह से अलग उपयोगकर्ता अनुभव प्रदान करता है, और एप्लिकेशन ढूंढने के तरीके को पुनः प्राप्त करने की आवश्यकता होती है। क्या सवाल पूछा गया था कि यूनिटी डैश में यह काम कैसे करना था। आप स्वयं यूनिटी के बाहर भी ऐसी ही सुविधा प्राप्त कर सकते हैं, लेकिन ऐसा करने के लिए एकता को बदलने का एकमात्र तरीका स्रोत कोड को बदलना है।
dobey

@dobey खैर, यह सच है; डैश की कार्यक्षमता में परिवर्तन करना हमारी पहुंच से परे है, इसलिए। । । हम क्या एक अधिकार है, के साथ क्या करना है? जब तक कि कोई डेवलपर न हो जो इस तरह की कार्यक्षमता के साथ एकता के दायरे को कोड करने के लिए तैयार हो। । ।
सर्गी कोलोडियाज़नी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.