क्या एप्लिकेशन के लिए लॉन्च सेवाओं के डेटाबेस को क्वेरी करना संभव है जो एक मनमानी फ़ाइल या यूटीआई प्रकार खोलेगा?


11

मैं एक यूनिफ़ॉर्म टाइप आइडेंटिफ़ायर (यूटीआई) को एक अनियंत्रित फ़ाइल के साथ-साथ एक विशिष्ट यूटीआई के सुपरसेट्स के प्रकार के पदानुक्रम को दिखाने के लिए mdls का उपयोग करने में सक्षम हूं ।

mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.ksh
kMDItemContentType     = "public.ksh-script"
kMDItemContentTypeTree = (
    "public.ksh-script",
    "public.shell-script",
    "public.script",
    "public.source-code",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.command
kMDItemContentType     = "com.apple.terminal.shell-script"
kMDItemContentTypeTree = (
    "com.apple.terminal.shell-script",
    "public.shell-script",
    "public.script",
    "public.source-code",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)

क्या ऐसे कोई उपकरण हैं जो दिखा सकते हैं कि कौन से ऐप्स ने परीक्षण और त्रुटि के अलावा किसी विशेष यूटीआई के लिए पंजीकरण किया है?

यह निरीक्षण से स्पष्ट है कि foo.commandफ़ाइल Terminal.app द्वारा खोली जाएगी, लेकिन यह बिल्कुल स्पष्ट नहीं है कि foo.ksh वर्तमान में TextEdit.app के अंतर्गत आता है।

मैं मैक ओएस एक्स लॉन्च सर्विसेज डेटाबेस को वास्तव में पढ़ने के लिए उपयोग करने में सक्षम होना चाहता हूं, यह openदेखने के लिए कि कौन सा ऐप प्रति डीटीआई आधार पर चुना गया है। यह --preview --verboseस्विच करने जैसा होगा कि मुझे यह बताने के लिए खुला होना चाहिए कि यह करने के बजाय क्या करना है।

यहां तक ​​कि बेहतर उन सभी ऐप्स को सूचीबद्ध करने का एक तरीका होगा जो उस यूटीआई को खोल सकते हैं, भले ही वे पसंदीदा ऐप न हों।

इस माध्यमिक जानकारी को प्राप्त करने के लिए, मुझे प्रत्येक प्रकार के हित के लिए एक फाइल बनानी होगी या ढूंढनी होगी और फाइंडर को मैन्युअल रूप से यह दिखाने के लिए उपयोग करना होगा कि कौन सा ऐप यूटीआई खोल सकता है।

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

मैं वास्तव में टर्मिनल से इस डेटा को प्रोग्रामेटिक रूप से एक्सेस करना चाहूंगा।


Zsh का समापन दिलचस्प लगता है, लेकिन मैं यह नहीं देखता कि इसे कैसे प्राप्त किया जा सकता है। मैं AppApplications स्रोत कोड में देखूंगा और देखूंगा कि क्या बाइनरी शेर पर काम करता है या मैं इसे संकलित कर सकता हूं। यह लीड की एक बड़ी जोड़ी है - धन्यवाद!
22

जवाबों:


6

एंड्रयू मोर्टेनसेन की दुती एक CLI है जो UTI संचालकों की सूची देगी:

  • -d <uti> डिफ़ॉल्ट हैंडलर को सूचीबद्ध करता है;
  • -l <uti> सभी पंजीकृत हैंडलर को सूचीबद्ध करता है।

डूटी के लिए मैन पेज देखें ।

EDIT: जैसा कि Lri इस उत्तर में बताता है, duti सभी संभावित अनुप्रयोगों को सूचीबद्ध नहीं करती है (संभवतः क्योंकि यह यूटीआई विरासत का हिसाब नहीं लेती है? यह आगे की जांच का विषय होगा)। उनका अनुशंसित समाधान, AllApllications स्पष्ट रूप से एक बेहतर जवाब होगा।


यह कुछ ऐप गायब है जो मेनू के साथ खुले में प्रदर्शित होंगे।
दोपहर

बहुत अजीब। क्या आप मुझे बता सकते हैं कि यह किसकी कमी है?
kopischke

मैंने दुती से उदाहरण आउटपुट को शामिल करने के लिए दूसरे प्रश्न में अपना उत्तर संपादित किया ।
लारी

जबकि duti अच्छी तरह से लिखी गई है, अब यह पदावनत एपीआई का उपयोग करती है। मैं एक पर नज़र रखना करने की सलाह देते developer.apple.com/library/prerelease/mac/documentation/Carbon/...
Mugen

ठीक है - होमब्रे द्वारा इसे स्थापित करने से होम रन बनता है। बहुत बहुत धन्यवाद!
बमीक

11

आप लॉन्च सेवाओं के डेटाबेस की जांच करने के लिए इस कमांड का उपयोग कर सकते हैं। -Dump विकल्प आपको पूरा डेटाबेस देता है, फिर आप इसे grep में पाइप कर सकते हैं और जो चाहें उसे खोज सकते हैं।

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep -n7 'your search string'


मुझे शायद इस सवाल पर एक फॉलो करने की आवश्यकता होगी कि इस डंप को प्रोसेस करने के लिए ऐप बंडल या विशिष्ट mdimporter फ़ाइल के स्थान को कैसे निकालना है जो एक विशिष्ट kMDItemContentType को पार्स करता है - लेकिन इससे बहुत मदद मिली है। धन्यवाद
bmike
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.