あなたはどのようにMacプレビュー10.7でファイルをリロードするのですか?

プレビューでファイル(.png、.pdf)を更新した後に再読み込みしたいのですが。これはどのように達成できますか?

OS X 10.5と10.6では、プレビューに切り替えるだけで簡単でした。新しいファイルを自動的にリロードします。代わりに、 open -a Preview * .png などを使用することもできます。 10.7では、自動リロードは機能しません(この投稿)。

私の最初の試みは、コマンドラインから実行されるapplescriptスクリプトです:

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

これは1つのファイルに対して機能しますが、明白な理由で複数のファイルで失敗します。私はもう少し調査を行い、 set とリストを含むより複雑なアプリケーションを使用しようとしましたが、その結果、パーミッションエラーが発生します:

errors seen when using advanced script

ここで私が使用したPythonスクリプトを紹介します(私のbashスクリプト技術は文字列解析の仕事ではありませんでした):

#!/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 でファイルのリストを開く方法があるかどうかを知りたいのですが、 open の代わりに

編集:AppleScriptを修正しようとしましたが、このコードは「欠損値」エラーを取得します:

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

2 答え

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コマンドが正しく構成されていない。次に、あなたは、AppleScriptコマンドでposixスタイルのパス(スラッシュで区切られたものなど)を使用しようとしています。 AppleScriptでは、AppleScript形式のパス(コロン区切りなど)が必要です。他にも問題があります。とにかく、コマンドラインから実行できる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をpngに変更するか、必要なファイル拡張子を変更してください。

編集:コメントから追加の質問に答える

複数の内線番号を検索する場合は、「または」を使用できます。

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

適切な ":"区切りのパスを見つけるには、短いapplescriptがあります。 「ファイル」の代わりに「フォルダ」パスが必要な場合は、コード内の単語を変更するだけです。これらのスタイルパスは、常にハードドライブの名前で始まることに気づくでしょう。

set colonDelimitedPath to (choose file) as text

そして、あなたがAppleScript形式のパスに変換したいposixスタイルのパスを持っているなら、これを使ってください。

set posixPath to "/Applications/"
set macPath to (POSIX file posixPath) as text
1
追加された
あなたの上記の質問に対する答えは私の編集を見てください。
追加された 著者 regulus6633,
ありがとう、私は何も知りませんでした。ディレクトリ内のファイルのサブセットのみを受け入れるようにスクリプトを修正する方法や、複数の拡張機能を検索する方法はありますか?私は私のコードを変更しようとしました:/の代わりに、しかし、今は "欠けている値"のエラーを受け取ります...編集例を見てください
追加された 著者 keflavich,

2011年12月以降、OS Xのシステムスクリプティングは、別のオプションが存在するように進化しました。 OS Xには、ObjCブリッジ付きのJavaScript for Automation(JXA)が含まれています。

(警告:JXAを使用するには、2011年のOS X 10.7を10.10に更新する必要があります)

測定されたベンチマークは行っていませんが、この場合、ObjCブリッジはAppleScript Apple Eventsブリッジよりも迅速に応答するようです。

#!/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);
}

Objective-Cブリッジのない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]));
}
1
追加された