2011-12-19 2 views
5

मैं अपडेट किए जाने के बाद पूर्वावलोकन में फ़ाइलों (.png, .pdf) को फिर से लोड करना चाहता हूं। इसे किस तरह पूर्ण कर सकते है?मैक पूर्वावलोकन 10.7 में फ़ाइलों को फिर से लोड कैसे करें?

ओएस एक्स 10.5 और 10.6 में, यह पूर्वावलोकन पर स्विच करने जितना आसान था - यह स्वचालित रूप से नई फ़ाइल को फिर से लोड करेगा। वैकल्पिक रूप से, आप open -a Preview *.png या कुछ समान उपयोग कर सकते हैं। 10.7 में, ऑटो-रीलोडिंग काम नहीं करती है (देखें this post)।

/usr/bin/osascript -e 'tell application "Preview.app" to activate 
    tell application "Preview.app" to open "'$PWD/$*'"' 

यह एक एकल फाइल के लिए काम करता है, लेकिन स्पष्ट कारणों के लिए एकाधिक फ़ाइलों के साथ विफल रहता है:

मेरा पहला प्रयास कमांड लाइन से चलाने के एक applescript स्क्रिप्ट है। मैं एक छोटे से अधिक शोध किया और एक अधिक जटिल applescript set शामिल है और एक सूची का उपयोग करने की कोशिश की है, लेकिन इस अनुमति की त्रुटियों में परिणाम:

errors seen when using advanced script

यहाँ अजगर स्क्रिप्ट मैं प्रयोग किया जाता है (मेरे बैश स्क्रिप्टिंग का ज्ञान करने के लिए नहीं थे स्ट्रिंग पार्स करने का कार्य): - एक ग्रे स्क्रीन देखे बिना छवियों को पुन: लोड -

#!/usr/bin/env python 

import optparse 
import os 

parser=optparse.OptionParser() 
options,args = parser.parse_args() 

pwd = os.getcwd() 

cmd = '/usr/bin/osascript -e ' 
scriptcmd = "tell application \"Preview.app\" to activate\n" 

flist = [ fn if fn[0]=='/' else pwd+"/"+fn for fn in args] 

scriptcmd += "set myList to {\"%s\"}\n" % ('","'.join(flist)) 

scriptcmd += "tell application \"Preview.app\" to open myList" 

print("%s \'%s\'" % (cmd,scriptcmd)) 

os.system("%s \'%s\'" % (cmd,scriptcmd)) 

मैं भी अपने मूल समस्या यकीन है कि इस स्क्रिप्ट हल होता नहीं कर रहा हूँ, लेकिन मैं किसी भी तरह से बस को हो, तो जानना चाहते हैंके बजाय osascript वाली फ़ाइलों की एक सूची खोलें।

संपादित करें: applescript को ठीक करने का प्रयास किया है, लेकिन इस कोड "लापता मूल्य" हो जाता है त्रुटियों:

tell application "Preview.app" to activate 
set myListOfImages to {":Users:adam:work:code:test.png"} 
tell application "Preview.app" to open myListOfImages 

उत्तर

1

यहाँ एक सरल applescript कि 10.7 में मेरे लिए काम करता है।

set picsFolder to (choose folder with prompt "Choose the folder to search...") as text 

tell application "Finder" 
    set theImages to (files of folder picsFolder whose name extension is "jpg") as alias list 
end tell 

tell application "Preview" 
    activate 
    open theImages 
end tell 

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

/usr/bin/osascript -e 'set posix_picsFolder to do shell script "PWD"' -e 'set picsFolder to (POSIX file posix_picsFolder) as text' -e 'if picsFolder does not end with ":" then set picsFolder to picsFolder & ":"' -e 'tell application "Finder" to set theImages to (files of folder picsFolder whose name extension is "jpg") as alias list' -e 'tell application "Preview"' -e 'activate' -e 'open theImages' -e 'end tell' 

नोट: मेरी कोड jpg फ़ाइलों के लिए लग रहा है, तो बस परिवर्तन jpg के लिए jpg या जो भी अन्य फ़ाइल एक्सटेंशन आप चाहते हैं।

संपादित करें: टिप्पणी से अपने अतिरिक्त सवालों के जवाब देने

आप कई एक्सटेंशन का उपयोग कर सकते "या" के लिए खोज करना चाहते हैं इस तरह ...

tell application "Finder" 
    set theImages to (files of folder picsFolder whose name extension is "jpg" or name extension is "png") as alias list 
end tell 

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

set colonDelimitedPath to (choose file) as text 

और तुम एक POSIX शैली रास्ता है कि आप एक applescript शैली पथ उपयोग यह करने के लिए परिवर्तित करना चाहते है।

set posixPath to "/Applications/" 
set macPath to (POSIX file posixPath) as text 
+0

धन्यवाद, कि applescript का एक बहुत मैं कुछ भी नहीं जानता था के बारे में है। क्या निर्देशिका में फ़ाइलों का केवल एक सबसेट स्वीकार करने और/या एकाधिक एक्सटेंशन खोजने के लिए आपकी स्क्रिप्ट को संशोधित करने का कोई तरीका है? मैंने अपने कोड को उपयोग करने के लिए संशोधित करने का प्रयास किया: इसके बजाय /, लेकिन अब "अनुपलब्ध मान" त्रुटियां प्राप्त करें ... उदाहरण के लिए संपादन देखें – keflavich

+0

अपने उपरोक्त प्रश्नों के उत्तर के लिए मेरा संपादन देखें। – regulus6633

1

दिसंबर 2011 से, ओएस एक्स सिस्टम स्क्रिप्टिंग विकसित हुआ है कि एक और विकल्प मौजूद है। ओएस एक्स में अब ओबीजेसी पुल के साथ ऑटोमेशन (जेएक्सए) के लिए जावास्क्रिप्ट शामिल है।

(चेतावनी: ओएस एक्स 2011 के 10.7 10.10 पर अपडेट करना JXA का उपयोग करने की आवश्यकता होगी), ObjC पुल में AppleScript एप्पल घटनाक्रम पुल से जल्दी प्रतिक्रिया करने के लिए लगता है हालांकि मैं एक मापा बेंचमार्क नहीं किया है

ये मामला। ऑब्जेक्टिव-सी पुल के बिना

#!/usr/bin/env osascript -l JavaScript 
ObjC.import('AppKit'); 

var urls = getSelectedFiles(); 

// withAppBundleIdentifier:(NSString *)appBundleIdentifier 
var appBundleIdentifier = $.NSString.alloc.initWithUTF8String('com.apple.Preview'); 

// options:(NSWorkspaceLaunchOptions)options 
var options = $.NSWorkspaceLaunchWithoutActivation | $.NSWorkspaceLaunchWithErrorPresentation; 

// additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor 
var nilDescriptor = $(); // bridged nil 

// launchIdentifiers:(NSArray **)identifiers ... not used 
var nilIdentifiers = $(); // bridged nil 

// $.NSWorkspace.openURLs:withAppBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifiers() 
var ws = $.NSWorkspace.sharedWorkspace; 
ws.openURLsWithAppBundleIdentifierOptionsAdditionalEventParamDescriptorLaunchIdentifiers(
    urls, 
    appBundleIdentifier, 
    options, 
    nilDescriptor, 
    nilIdentifiers 
); 

function getSelectedFiles() { 
    var appFinder = Application("Finder"); 
    var selection = [].slice.call(appFinder.selection()); 

    var list = $.NSMutableArray.alloc.initWithCapacity(selection.length); 
    for (key in selection) { 
     var path = decodeURI(selection[key].url()); 
     path = path.replace(/file:\/\//,""); 
     var nsurl = $.NSURL.fileURLWithPath(path); 
     list.addObject(nsurl); 
    } 

    return $.NSArray.alloc.initWithArray(list); 
} 

एक JXA दृष्टिकोण भी इस्तेमाल किया जा सकता:

var appPreview = Application("Preview"); 
var appFinder = Application("Finder"); 

var selection = [].slice.call(appFinder.selection()); 

var paths = new Array(0); 
for (key in selection) { 
    paths.push(decodeURI(selection[key].url())); 
} 

appPreview.activate(); 
for (key in paths) { 
    console.log(paths[key]); 
    appPreview.open(Path(paths[key])); 
} 
संबंधित मुद्दे