2016-12-03 1 views
0

Jouer avec JavaScript pour l'automatisation, je me trouve incapable de faire quelque chose de très simple dans AppleScript. (Shocker, je sais.)désélectionner tout dans Finder en utilisant JavaScript pour l'automatisation

Ce AppleScript:

tell application "Finder" to set selection to {} 

efface la sélection dans le Finder. Je n'arrive pas à comprendre comment faire la même chose avec JXA.

Voici ce que j'ai essayé:

var finder = Application("Finder") 
finder.includeStandardAdditions = true 
    //this selects files in the front window... 
finder.select([...array of file paths...]) 
    //so you'd think this might work to deselect all... 
finder.select([]) 
    //...but it doesn't do anything 

//then I tried each of these in turn... 

finder.select(null) 
    //Error -10010: Handler can't handle objects of this class. 

finder.selection = null 
    //Error -10010: Handler can't handle objects of this class. 

finder.selection = [] 
    //Script Editor crashes 

//...but none were successful 

Toutes les suggestions?

(macOS Sierra, Script Editor 2,9)

Répondre

0

[modifier] Voici un autre "travail autour" que vous pourriez envisager de mieux. Cela envoie la version AppleScript du script par osascript appelé par faire shell par JXA (l'astuce est bien sûr d'obtenir les caractères d'échappement à droite):

var app = Application.currentApplication(); 
app.includeStandardAdditions = true; 

app.doShellScript('osascript -e "tell application \\"Finder\\" to set selection to {}"'); 

------------ réponse originale -------------

Ok, je suis sûr que je devrais m'excuser pour cette réponse, mais, eh bien, ça marche, via une solution de travail bizarre, parce que je pouvais pas obtenir une solution plus élégante après avoir joué avec lui pendant quelques heures. Qui sait, peut-être que vous trouverez cela élégant. Je fais presque. Ou peut-être que quelqu'un s'en mêlera avec un meilleur. Aussi, je n'ai fait que jouer avec ça dans Script Editor. [modifier] Oh, et aussi, je suis toujours sur 10.10.5

//this allows use of JXA version of do shell script later 
var app = Application.currentApplication(); 

app.includeStandardAdditions = true; 
var thefinder = Application("Finder"); 
//Would advise using if/then here to check if there's at least one window, like: 
// if (thefinder.windows.length != 0) { 

//gets front window (where selection is, always) 
var fWin = thefinder.windows[0]; 

//gets the "target", which is the folder ref 
var fWinTarget = fWin.target(); 

//gets the url of the target 
var winU = fWinTarget.url(); 

//makes that a path 
var winUPath = Path(winU); 

//closes the original finder window (ref) 
fWin.close(); 

//opens it up again! no more selection! 
app.doShellScript("open " + winU); 
+0

Oui, votre deuxième solution est ce que j'ai fini par aller avec. Un hybride comme celui-ci n'est peut-être pas le plus élégant, mais c'est mieux que de fermer et de rouvrir la fenêtre. Merci! –