I sent you a mail so that we may exchange infos without wasting space in the thread.
Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) samedi 28 décembre 2019 13:49:27
I sent you a mail so that we may exchange infos without wasting space in the thread.
Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) samedi 28 décembre 2019 13:49:27
Plain AppleScript version, without third-party software (tested on Mojave):
property pathList : {}
tell application "Finder" to set aFolders to (selection) as alias list
repeat with aFolder in aFolders
set pathList to pathList & (aFolder as string) -- ADDED & EDITED
my get_All_Folders_of_Folder(aFolder)
end repeat
tell application "Finder"
activate
repeat with aFolder in the pathList
open aFolder
repeat until window 1 exists
delay 0.1
end repeat
set current view of window 1 to list view
tell application "System Events" to tell process "Finder"
click menu item "Use Groups" of menu 1 of menu bar item "View" of menu bar 1
click menu item "Show View Options" of menu 1 of menu bar item "View" of menu bar 1
tell window 1
click pop up button 1
click menu item "Kind" of menu 1 of pop up button 1
click pop up button 2
click menu item "Name" of menu 1 of pop up button 2
click UI element "Use as Defaults"
end tell
click menu item "Hide View Options" of menu 1 of menu bar item "View" of menu bar 1
end tell
close window 1
end repeat
end tell
on get_All_Folders_of_Folder(aFolder)
tell application "System Events"
--Check each of the files in this disk/folder
set foldersList to every folder of aFolder
if foldersList is {} then
set the end of pathList to (path of aFolder)
else
repeat with aFolder in foldersList
my get_All_Folders_of_Folder(aFolder)
end repeat
end if
end tell
end get_All_Folders_of_Folder
The original script was posted in https://macscripter.net/viewtopic.php?id=45370
I waited infos from Flavour but nothing came.
Happily my grand daughter came with its macBook running Catalina so I was able to test.
Here is the result which may be useful to Flavour which doesn’t use the system in English.
I left several disabled instructions no longer used which may be interesting for curious readers.
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use script "FileManagerLib" version "2.3.3"
script o
-- property showViewOptions_loc : ""
property kind_loc : ""
property name_loc : ""
property sortBy_loc : ""
-- property arrangeBy_loc : ""
property useAsDefaults_loc : ""
end script
Germaine()
on Germaine()
set theFolder to (choose folder) --> an alias
-- Grab the localized version of several UI elements
set theBundle to path to application "Finder" --> an alias
--set o's showViewOptions_loc to localized string "N35" in bundle theBundle
set o's kind_loc to localized string "N224" in bundle theBundle
set o's name_loc to localized string "N220" in bundle theBundle
set o's sortBy_loc to localized string "FR11" in bundle theBundle
-- CAUTION, now, two strings whose English spelling isn't reachable in resources
set o's useAsDefaults_loc to localized string "6.title" from table "ViewOptionsWindow" in bundle theBundle
-- The English string isn't available. Define it here.
if o's useAsDefaults_loc = "6.title" then set o's useAsDefaults_loc to "Use as Defaults"
(*
-- No longer used as we trigger the shortcut cmd + ctrl + 1
set o's arrangeBy_loc to localized string "974.title" from table "ViewOptionsWindow" in bundle theBundle
-- The English string isn't available. Define it here.
if o's arrangeBy_loc = "974.title" then set o's arrangeBy_loc to "Arrange By:"
*)
(* List the folders of the selected one *)
-- With FileManagerLib the folder may be defined by an alias
set theFolders to objects of theFolder result type urls array with searching subfolders without include files and include invisible items --> NSArray object
set theFolders to theFolders as list -- a list of URLs
-- Append the root folder to the list
set end of theFolders to theFolder
--return (count theFolders as text) -- 28993
tell application "Finder"
repeat with aFolder in theFolders
open aFolder -- Finder may open a «class furl» object
if current view of window 1 is not list view then set current view of window 1 to list view
-- but Finder can't get properties of a «class furl» object
if (class of aFolder) is not alias then set aFolder to aFolder as alias
my ruleSettings(get name of aFolder)
close window 1
end repeat
end tell
end Germaine
on ruleSettings(folderName)
try
tell application "System Events" to tell process "Finder"
set frontmost to true
keystroke "1" using {command down, control down} --> "Organiser par Nom" or "Arrange By Name"
keystroke "j" using {command down} --> "Afficher les options de présentation" or "Show View Options"
repeat 10 times
tell window 1 to if (its name is folderName) and its subrole is "AXSystemFloatingWindow" then
set ruleSettingsWindow to it
exit repeat
end if
end repeat
tell ruleSettingsWindow
(*
class of UI elements --> {checkbox, checkbox, static text, pop up button, pop up button, static text, group, button, button, static text}
role description of buttons --> {"bouton", "Bouton de fermeture"}
--> {"button", "close button"}
name of buttons --> {"Utiliser comme valeurs par défaut", missing value}
--> {"Use as Defaults", missing value}
name of pop up buttons --> {"Trier par :", "Organiser par :"}
--> {"Sort By:", "Arrange By:"}
*)
repeat 20 times -- loop for safe but here the pop up is always available at first pass
if exists pop up button (o's sortBy_loc) then exit repeat
delay 0.2
end repeat
tell pop up button (o's sortBy_loc)
click it
(*
-- name of menu items of menu 1
--> {"Nom", "Type", "Date de dernière ouverture", "Date de l’ajout", "Date de modification", "Date de création", "Taille", "Tags"}
--> {"Name", "Kind", "Date Last Opened", "Date Added", "Date Modified", "Date Created", "Size", "Tags"}
--error number -128
*)
click menu item (o's kind_loc) of menu 1 -- "Type" or "Kind"
end tell -- pop up button (o's sortBy_loc)
(*
-- No longer used as we trigger the shortcut cmd + ctrl + 1
repeat 20 times -- loop for safe but here the pop up is always available at first pass
if exists pop up button (o's arrangeBy_loc) then exit repeat
delay 0.2
end repeat
tell pop up button (o's arrangeBy_loc)
click it
-- name of menu items of menu 1
--> {{"Nom", "Type", "Application", "Date de dernière ouverture", "Date de l’ajout", "Date de modification", "Date de création", "Taille", "Tags", missing value, "Aucun"}}
--> {"Name", "Kind", "Application", "Date Last Opened", "Date Added", "Date Modified", "Date Created", "Size", "Tags", missing value, "None"}
--error number -128
click menu item (o's name_loc) of menu 1 -- "Nom" or "Name"
end tell -- pop up button (o's arrangeBy_loc)
*)
-- name of button 1 --> "Utiliser comme valeurs par défaut" or "Use as Defaults"
click button (o's useAsDefaults_loc)
-- role description of button 2 --> "close button"
click button 2 -- close the window
end tell -- window 1
end tell -- process "Finder" of "System Events"
end try
end ruleSettings
No offense intended but KniazidisR forgot a feature available in the original script:
it was designed to treat also the selected folder.
BridgePlus (replaced now by FileManagerLib) was used because the source folder was able to contain numerous subfolders. I tested with 28993 folders.
Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) dimanche 29 décembre 2019 11:26:29
Fair remark. I updated my script. To implement this functionality, I added 1 code line.
AsObjC is faster than System Events in recursively finding subfolders. But all this gain will be reduced to 0 with all these opening/closing windows and clicks.
Therefore, I think you did not test your script with 28993 folders in full form, but only the recursive part. Otherwise, your script would work for several hours.
NOTE: on my machine, my script spends 2 min 6 sec 19 ms to process only 57 folders (2 selected & 55 its subfolders) !!! Recursive part is only 38 ms (that is, about 0.3 % of time)
So, to process 28993 folders my script needs about 17 hours. This is the reality of GUI scripting. Your script should spend about the same hours.
@ KniazidisR
No offense intended but there is a problem with your late change.
I ran the original code with a single folder selected, I got:
{“SSD 1000:Users:oups:aa:a:", "SSD 1000:Users:oups:bb:b:”, “SSD 1000:Users:oups:dossier /sans titre:", "SSD 1000:Users:Resources:”}
I selected two folders and ran it again, (with added linefeeds to make the oddity more legible)
{
“SSD 1000:Users:oups:aa:a:", "SSD 1000:Users:oups:bb:b:”, “SSD 1000:Users:**********oups:dossier /sans titre:”,
“SSD 1000:Users:oups:aa:a:", "SSD 1000:Users:oups:bb:b:”, “SSD 1000:Users:**********oups:dossier /sans titre:”,
“SSD 1000:Users:**********Resources:”}
I was puzzled until I thought that the property wasn’t cleared between the two calls so, for safe, I added the instruction: set pathList to {}
The first folder selected was missed but the second one was listed.
The edited one:
property pathList : {}
set pathList to {}
tell application "Finder" to set aFolders to (selection) as alias list
repeat with aFolder in aFolders
set end of pathList to aFolder -- ADDED
my get_All_Folders_of_Folder(aFolder)
end repeat
return pathList -->
{item 1 of {alias "SSD 1000:Users:**********:Desktop:oups:", alias "SSD 1000:Users:**********:Desktop:Resources:"}, "SSD 1000:Users:**********:Desktop:oups:aa:a:", "SSD 1000:Users:**********:Desktop:oups:bb:b:", "SSD 1000:Users:**********:Desktop:oups:dossier /sans titre:", item 2 of {alias "SSD 1000:Users:**********:Desktop:oups:", alias "SSD 1000:Users:**********:Desktop:Resources:"}, "SSD 1000:Users:**********:Desktop:Resources:"}
-- rest of the script
I dropped the end because it’s running only on English system.
I thought that editing the added instruction would be cleaner
property pathList : {}
set pathList to {}
tell application "Finder" to set aFolders to (selection) as alias list
repeat with aFolder in aFolders
set end of pathList to (aFolder as text) -- ADDED -- EDITED
my get_All_Folders_of_Folder(aFolder)
end repeat
return pathList
(*
{[u]"SSD 1000:Users:**********:Desktop:oups:"[/u], "SSD 1000:Users:**********:Desktop:oups:aa:a:", "SSD 1000:Users:**********:Desktop:oups:bb:b:", "SSD 1000:Users:**********:Desktop:oups:dossier /sans titre:", [i]"SSD 1000:Users:**********:Desktop:Resources:"[/i], [b]"SSD 1000:Users:**********:Desktop:Resources:"[/b]}
*)
-- rest of the script
It is cleaner but if the first folder is reported once (underlined), it makes more legible the fact that the second folder is reported twice (I italicized the 1st, I bolded the 2nd).
I will let you play with the code to get a correct list
All that make me discover a feature which I ignored.
I always thought that with the Finder, the command open apply to an alias object or as a Finder reference object.
It appears that it apply to a string containing a valid Hfs path.
Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) dimanche 29 décembre 2019 14:42:31
property pathList : {}
tell application "Finder" to set aFolders to (selection) as alias list
set pathList to {item 1 of aFolders as text} -- ADDED
repeat with aFolder in aFolders
my get_All_Folders_of_Folder(aFolder)
end repeat
return pathList
-- rest of the script
return correctly:
(*
{“SSD 1000:Users:oups:", "SSD 1000:Users:oups:aa:a:”, “SSD 1000:Users:oups:bb:b:", "SSD 1000:Users:oups:dossier /sans titre:”, “SSD 1000:Users:**********Resources:”}
*)
No luck.
Here is the end of the Log History
-- Don't click [Open this Scriplet in your Editor:]
tell application "System Events"
set frontmost of process "Finder" to true
keystroke "1" using {command down, control down}
keystroke "j" using {command down}
get name of window 1 of process "Finder"
--> "pour ebay"
get subrole of window 1 of process "Finder"
--> "AXSystemFloatingWindow"
exists pop up button "Trier par :" of window 1 of process "Finder"
--> true
click pop up button "Trier par :" of window 1 of process "Finder"
--> pop up button "Trier par :" of window "pour ebay" of application process "Finder"
click menu item "Type" of menu 1 of pop up button "Trier par :" of window 1 of process "Finder"
--> menu item "Type" of menu 1 of pop up button "Trier par :" of window "pour ebay" of application process "Finder"
click button "Utiliser comme valeurs par défaut" of window 1 of process "Finder"
--> button "Utiliser comme valeurs par défaut" of window "pour ebay" of application process "Finder"
click button 2 of window 1 of process "Finder"
--> button 2 of window "pour ebay" of application process "Finder"
end tell
tell application "Finder"
close window 1
--> {}
end tell
tell current application
current date
--> date "dimanche 29 décembre 2019 à 15:12:22"
end tell
tell application "Finder"
display dialog "Treated : 28993
in : 361 seconds"
Now I will waste 361 seconds to run the script which will reset the windows in mode icon view.
Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) dimanche 29 décembre 2019 15:21:31
Well, you are absolutely right today :D. I forgot to make aFolder HFS path, when added new code line. I updated my script above.
Thanks to both of you.
Sorry Yvan Koenig I did unterstand it wrong yesterday.
I’m really thankful that you helped me. Now the script is working and it does what I want.
Now I have a new question. Is it possible to implement some lines in your code?
2. arrange by: kind (Already works)
3. sort by: name (Already works)
Now I test this with Automator but it doesn’t work that well.
I have a German system and MacBook, if you need this information.
No offense intended…
No luck again.
The edited version return the list:
{“SSD 1000:Users:oups:", "SSD 1000:Users:oups:aa:a:”, “SSD 1000:Users:oups:bb:b:", "SSD 1000:Users:oups:dossier /sans titre:”, “SSD 1000:Users:**********Resources:”, “SSD 1000:Users:**********Resources:”}
As I already wrote, the path to the second folder is reported twice.
With the second folder containing one folder (it didn’t before), I got:
{“SSD 1000:Users:oups:", "SSD 1000:Users:oups:aa:a:”, “SSD 1000:Users:oups:bb:b:", "SSD 1000:Users:oups:dossier /sans titre:”, “SSD 1000:Users:Resources:", "SSD 1000:Users:Resources:dossier sans titre:”}
Which is OK but returning a wrong result when a selected folder doesn’t contain subfolder is not good.
Here is my proposal:
property pathList : {}
set pathList to {}
tell application "Finder" to set aFolders to (selection) as alias list
repeat with aFolder in aFolders
set end of pathList to (aFolder as text)
end repeat
repeat with aFolder in aFolders
my get_All_Folders_of_Folder(aFolder)
end repeat
pathList
-- rest of the script
which returned a correct list :
{“SSD 1000:Users:oups:", "SSD 1000:Users:Resources:”, “SSD 1000:Users:oups:aa:a:", "SSD 1000:Users:oups:bb:b:”, “SSD 1000:Users:oups:dossier /sans titre:", "SSD 1000:Users:Resources:dossier sans titre:”}
On the other hand, I was pessimistic.
The script returning every folders in icon view mode didn’t took 361 seconds. It took only 355
Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) dimanche 29 décembre 2019 15:41:08
OK. You will have to wait a bit, I must search which resource define the different localized spellings.
Happily I already built a script searching for me.
Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) dimanche 29 décembre 2019 16:10:07
No, Yvan, this doesn’t solve the problem. The error in my script, as I see now, was much serious. It skipped all folders, which have 1 or more subfolders. It is because the base folders should be added to pathList as well as its subfolders inside the recursive handler. Here is fixed script:
property pathList : {}
tell application "Finder" to set aFolders to (selection) as alias list
repeat with aFolder in aFolders
my get_All_Folders_of_Folder(aFolder)
end repeat
tell application "Finder"
activate
repeat with aFolder in the pathList
open aFolder
repeat until window 1 exists
delay 0.1
end repeat
set current view of window 1 to list view
tell application "System Events" to tell process "Finder"
click menu item "Use Groups" of menu 1 of menu bar item "View" of menu bar 1
click menu item "Show View Options" of menu 1 of menu bar item "View" of menu bar 1
tell window 1
click pop up button 1
click menu item "Kind" of menu 1 of pop up button 1
click pop up button 2
click menu item "Name" of menu 1 of pop up button 2
click UI element "Use as Defaults"
end tell
click menu item "Hide View Options" of menu 1 of menu bar item "View" of menu bar 1
end tell
close window 1
end repeat
end tell
on get_All_Folders_of_Folder(aFolder)
tell application "System Events"
--Check each of the files in this disk/folder
set foldersList to every folder of aFolder
set the end of pathList to (path of aFolder)
if foldersList is not {} then
repeat with aFolder in foldersList
my get_All_Folders_of_Folder(aFolder)
end repeat
end if
end tell
end get_All_Folders_of_Folder
You ought not to place one application tell block within another application tell block. I’m sure you’re probably aware of the reasons and this was likely just a matter of requiring too many keystrokes for too little benefit in this case. So I’m mostly highlighting this issue for the benefit of those newer to AppleScript, who tend to do this as standard because they aren’t seeing the stream of silent errors get thrown over and over in the background.
I hope that I forgot nothing.
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use script "FileManagerLib" version "2.3.3"
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
property forYK : false
-- set false for Flavour
-- set true for Yvan Koenig
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
script o
-- property showViewOptions_loc : ""
property kind_loc : "" --> "Type"
property name_loc : "" --> "Nom"
property sortBy_loc : "" --> "Trier par :"
property iCloudStatus_loc : "" --> "Statut iCloud"
property dateModified_loc : "" --> "Date de modification"
property dateCreated_loc : "" --> "Date de création"
property dateLastOpened_loc : "" --> "Date de dernière ouverture"
property dateAdded_loc : "" --> "Date de l’ajout"
property size_loc : "" --> "Taille"
property version_loc : "" --> "Version"
property comments_loc : "" --> "Commentaires"
property tags_loc : "" --> "Tags"
property alwaysOpenInListView_loc : "" --> "Toujours présenter par liste"
property browseInListView_loc : "" --> "Naviguer en présentation par listes"
-- property hideToolbar_loc : "" --> "Masquer la barre d’outils"
property showToolbar_loc : "" --> "Afficher la barre d’outils"
-- property hideStatusBar_loc : "" --> "Masquer la barre d’état"
property showStatusBar_loc : "" --> "Afficher la barre d’état"
-- property hidePathBar_loc : "" --> "Masquer la barre du chemin d’accès"
property showPathBar_loc : "" --> "Afficher la barre du chemin d’accès"
property showSidebar_loc : "" --> "Afficher la barre latérale"
-- property hideSidebar_loc : "" --> "Masquer la barre latérale"
-- property hideTabBar_loc : "" --> "Masquer la barre d’onglets"
property showTabBar_loc : "" --> "Afficher la barre d’onglets"
--property hidePreview_loc : "" --> "Masqu l’aperçu"
property showPreview_loc : "" --> "Afficher l’aperçu"
property useAsDefaults_loc : "" --> "Utiliser comme valeurs par défaut"
property arrangeBy_loc : "" --> "Organiser par :"
property smallSizeIcons_loc : "" --> "icônes de petite taille"
property largeSizeIcons_loc : "" --> "icônes de grande taille"
property useRelativeDates_loc : "" --> "Utiliser les dates relatives"
property calculateAllSizes_loc : "" --> "Calculer toutes les tailles"
property showIconPreview_loc : "" --> "Utiliser un aperçu comme icône"
property closeButton_loc : "" --> "Bouton de fermeture"
property textSize_loc : "" --> "Taille du texte :"
property none_loc : "" --> "Aucun"
end script
Germaine()
on Germaine()
set theFolder to (choose folder) --> an alias
set startTime to (time of (current date))
-- Grab the localized version of several UI elements
set theBundle to path to application "Finder" --> an alias
-- set o's showViewOptions_loc to localized string "N35" in bundle theBundle
set o's kind_loc to localized string "N224" in bundle theBundle
set o's name_loc to localized string "N220" in bundle theBundle
set o's sortBy_loc to localized string "FR11" in bundle theBundle
set o's iCloudStatus_loc to localized string "N169.39" in bundle theBundle
set o's dateModified_loc to localized string "N169.30" in bundle theBundle -- alt N221
set o's dateCreated_loc to localized string "N169.31" in bundle theBundle -- alt N222
set o's dateLastOpened_loc to localized string "N169.32" in bundle theBundle
set o's dateAdded_loc to localized string "N169.38" in bundle theBundle -- alt N230
set o's size_loc to localized string "N169.33" in bundle theBundle -- alt N223
set o's version_loc to localized string "N169.34" in bundle theBundle -- alt N226
set o's comments_loc to localized string "N169.36" in bundle theBundle -- alt N227
set o's tags_loc to localized string "N169.37" in bundle theBundle -- alt N225
set o's alwaysOpenInListView_loc to localized string "VO15" in bundle theBundle
set o's browseInListView_loc to localized string "VO19" in bundle theBundle
--set o's hideToolbar_loc to localized string "FV1" in bundle theBundle
set o's showToolbar_loc to localized string "FV2" in bundle theBundle
--set o's hideStatusBar_loc to localized string "FV5" in bundle theBundle
set o's showStatusBar_loc to localized string "FV6" in bundle theBundle
--set o's hidePathBar_loc to localized string "FV11" in bundle theBundle
set o's showPathBar_loc to localized string "FV12" in bundle theBundle
set o's showSidebar_loc to localized string "FV13" in bundle theBundle
--set o's hideSidebar_loc to localized string "FV14" in bundle theBundle
--set o's hideTabBar_loc to localized string "FV18" in bundle theBundle
set o's showTabBar_loc to localized string "FV19" in bundle theBundle
--set o's hidePreview_loc to localized string "FV22" in bundle theBundle
set o's showPreview_loc to localized string "FV23" in bundle theBundle
if (system attribute "sys2") < 15 then
-- Here under Mojave or older system
set aKey to "974.title"
set o's arrangeBy_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- In English, the resource isn't available -> "974.title". Define it here.
if o's arrangeBy_loc = aKey then set o's arrangeBy_loc to "Arrange By:"
log o's arrangeBy_loc --> "Arrange By:"
else
-- Here under Catalina or higher
set aKey to "VO26" -- it's the letter O, not the digit 0
set o's arrangeBy_loc to localized string aKey in bundle theBundle --> "Grouper par :" (Catalina)
log o's arrangeBy_loc --> "Group By:"
end if
-- CAUTION, now, some strings whose English spelling isn't reachable in resources
-- the log instruction allow us to check that the special case is correctly treated
-- below we display what we get whe the system speak English
set aKey to "6.title"
set o's useAsDefaults_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- In English, the resource isn't available -> "6.title". Define it here.
if o's useAsDefaults_loc = aKey then set o's useAsDefaults_loc to "Use as Defaults"
-- log o's useAsDefaults_loc --> "Use as Defaults"
set aKey to "491.ibExternalAccessibilityDescription"
set o's smallSizeIcons_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- with old systems, in English, the resource isn't available -> "491.ibExternalAccessibilityDescription". Define it here.
if o's smallSizeIcons_loc = aKey then set o's smallSizeIcons_loc to "Small Size Icons"
set aKey to "493.ibExternalAccessibilityDescription"
set o's largeSizeIcons_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- with old systems, in English, the resource isn't available -> "493.ibExternalAccessibilityDescription". Define it here.
if o's largeSizeIcons_loc = aKey then set o's largeSizeIcons_loc to "Large Size Icons"
-- log o's largeSizeIcons_loc --> "Large Size Icons"
set aKey to "52.title"
set o's textSize_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- In English, the resource isn't available -> "52.title". Define it here.
if o's textSize_loc = aKey then set o's textSize_loc to "text size:" -- OK
-- log o's textSize_loc --> "text size:"
(*
set aKey to "191.title"
set o's textSize_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- In English, the resource isn't available -> "191.title". Define it here.
if o's textSize_loc = aKey then set o's textSize_loc to "text size:" -- OK
-- log o's textSize_loc --> "text size:"
set aKey to "101.title"
set o's textSize_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- In English, the resource isn't available -> "101.title". Define it here.
if o's textSize_loc = aKey then set o's textSize_loc to "text size:" -- OK
-- log o's textSize_loc --> "text size:"
set aKey to "396.title"
set o's textSize_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- In English, the resource isn't available -> "396.title". Define it here.
if o's textSize_loc = aKey then set o's textSize_loc to "text size:" -- OK
-- log o's textSize_loc --> "text size:"
*)
set aKey to "54.title"
set o's useRelativeDates_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- In English, the resource isn't available -> "54.title". Define it here.
if o's useRelativeDates_loc = aKey then set o's useRelativeDates_loc to "Use relative dates"
-- log o's useRelativeDates_loc --> "Use relative dates"
set aKey to "65.title"
set o's calculateAllSizes_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- In English, the resource isn't available -> "65.title". Define it here.
if o's calculateAllSizes_loc = aKey then set o's calculateAllSizes_loc to "Calculate all sizes"
-- log o's calculateAllSizes_loc --> "Calculate all sizes"
set aKey to "41.title"
set o's showIconPreview_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- In English, the resource isn't available -> "41.title". Define it here.
if o's showIconPreview_loc = aKey then set o's showIconPreview_loc to "Show icon preview" -- OK
-- log o's showIconPreview_loc --> "Show icon preview"
(*
set aKey to "402.title"
set o's showIconPreview_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- In English, the resource isn't available -> "402.title". Define it here.
if o's showIconPreview_loc = aKey then set o's showIconPreview_loc to "Show icon preview" -- OK
-- log o's showIconPreview_loc --> "Show icon preview"
set aKey to "104.title"
set o's showIconPreview_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- In English, the resource isn't available -> "104.title". Define it here.
if o's showIconPreview_loc = aKey then set o's showIconPreview_loc to "Show icon preview" -- OK
-- log o's showIconPreview_loc --> "Show icon preview"
set aKey to "205.title"
set o's showIconPreview_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- In English, the resource isn't available -> "205.title". Define it here.
if o's showIconPreview_loc = aKey then set o's showIconPreview_loc to "Show icon preview" -- OK
log o's showIconPreview_loc --> "Show icon preview"
*)
set aKey to "14.title"
set o's none_loc to localized string aKey from table "ArrangeByMenu" in bundle theBundle
-- In English, the resource isn't available -> "14.title". Define it here.
if o's showIconPreview_loc = aKey then set o's showIconPreview_loc to "none" -- OK
log o's none_loc --> "none"
-- Thanks to Shane Stanley this path was edited to accomodate newsystems
set theBundle to ((path to library folder from system domain as text) & "Frameworks:ApplicationServices.framework:Versions:Current:Frameworks:HIServices.framework:Versions:Current:Resources:") as «class furl»
set o's closeButton_loc to localized string "AXButton:AXCloseButton" from table "RoleDescriptions" in bundle theBundle --> "Bouton de fermeture"
(* List the folders of the selected one *)
-- With FileManagerLib the folder may be defined by an alias
set theFolders to objects of theFolder result type urls array with searching subfolders without include files and include invisible items --> NSArray object
set theFolders to theFolders as list -- a list of URLs
-- Append the root folder to the list
set end of theFolders to theFolder -- to treat also the choosed folder
set nbFolders to count theFolders
-- During tests I was bored by remaining floating windows
-- In real life you may disable this instruction.
my closeFloatingWindows()
tell application "Finder"
repeat with aFolder in theFolders
open aFolder -- Finder may open a «class furl» object
tell window 1
if its current view is not list view then set its current view to list view
set its bounds to {50, 50, 1100, 600}
end tell
-- but Finder can't get properties of a «class furl» object
if (class of aFolder) is not alias then set aFolder to aFolder as alias
my ruleSettings(get name of aFolder)
-- Now the folder window is available in List view
-- so we may define the columns widths, and the sidebar one
-- I apologize I don't know how to rule the columns ordering
tell window 1 -- we are back to the folder window
set width of column id name column of its list view options to 200
set width of column id modification date column of its list view options to 150
set width of column id kind column of its list view options to 100
if forYK then
set width of column id size column of its list view options to 100
else
set width of column id size column of its list view options to 150
end if
set its sidebar width to 150 -- We know that it's visible
end tell
close window 1
end repeat
end tell
set executeTime to (time of (current date)) - startTime --> 117
tell application "Finder" to display dialog "Treated : " & nbFolders & linefeed & " in : " & executeTime & " seconds"
end Germaine
on ruleSettings(folderName)
-- try -- enable it in real life
tell application "System Events" to tell process "Finder"
set frontmost to true
-- work with the menu items
tell menu bar 1 -- its the folder window
-- name of menu bar items --> {"Apple", "Finder", "Fichier", "Édition", "Présentation", "Aller", "Fenêtre", "Aide"}
set viewMenu to 5
-- name of menu bar item viewMenu --> "Présentation"
tell menu bar item viewMenu to tell menu 1
set menuItems to name of menu items --> {"Par icônes", "Par liste", "Par colonnes", "Sous forme de Cover Flow", missing value, "Aligner", "Aligner la sélection", "Aligner par", "Organiser par", "Trier par", missing value, "Masquer la barre d’onglets", "Masquer la barre du chemin d’accès", "Masquer la barre d’état", "Afficher la barre latérale", "Masquer l’aperçu", missing value, "Masquer la barre d’outils", "Personnaliser la barre d’outils…", missing value, "Afficher les options de présentation", missing value, "Activer le mode plein écran"}
if menuItems contains o's showSidebar_loc then
log "side bar is hidden, must clik menu item : " & (o's showSidebar_loc)
click menu item (o's showSidebar_loc)
end if
-- log "now, side bar is visible"
if menuItems contains o's showStatusBar_loc then
log "status bar is hidden, must click menu item : " & (o's showStatusBar_loc)
click menu item (o's showStatusBar_loc)
end if
--log "now, status bar is visible"
-- Ready to rule other features
(*
if menuItems contains o's showToolbar_loc then
log "tool bar is hidden, must clik menu item : " & (o's o's showToolbar_loc)
click menu item (o's o's showToolbar_loc)
end if
-- log "now, tool bar is visible"
*)
(*
if menuItems contains o's showPathBar_loc then
log "path bar is hidden, must clik menu item : " & (o's showPathBar_loc)
click menu item (o's showPathBar_loc)
end if
-- log "now, path bar is visible"
*)
(*
if menuItems contains o's showTabBar_loc then
log "tab bar is hidden, must clik menu item : " & (o's showTabBar_loc)
click menu item (o's showTabBar_loc)
end if
-- log "now, tab bar is visible"
*)
(*
if menuItems contains o's showPreview_loc then
log "preview is hidden, must clik menu item : " & (o's showPreview_loc)
click menu item (o's showPreview_loc)
end if
-- log "now, preview is visible"
*)
end tell -- menu bar…
end tell
-- keystroke "2" using {command down, control down} --> "Organiser par Type" or "Arrange By Kind"
keystroke "j" using {command down} --> "Afficher les options de présentation" or "Show View Options"
repeat 10 times
tell window 1 to if (its name is folderName) and its subrole is "AXSystemFloatingWindow" then exit repeat
delay 0.1
end repeat
tell window 1
(*
class of UI elements
-- Don't worry, I uppercased the pop up buttons to highlight the ordering changes
--> with ' old ' systems --> {checkbox, checkbox, static text, POP UP BUTTON, POP UP BUTTON, static text, group, button, button, static text}
--> with 'new' systems --> {checkbox, checkbox, static text, POP UP BUTTON, static text, POP UP BUTTON, group, button, button, static text}
role description of buttons --> {"bouton", "Bouton de fermeture"}
--> {"button", "close button"}
name of buttons --> {"Utiliser comme valeurs par défaut", missing value}
--> {"Use as Defaults", missing value}
name of pop up buttons --> {"Trier par :", "Organiser par :"}
--> {"Sort By:", "Arrange By:"}
*)
if value of checkbox (o's alwaysOpenInListView_loc) is not 1 then click checkbox (o's alwaysOpenInListView_loc) -- "Toujours présenter par liste"
if value of checkbox (o's browseInListView_loc) is not 1 then click checkbox (o's browseInListView_loc) -- "Naviguer en présentation par listes"
repeat 20 times -- loop for safe but here the pop up is always available at first pass
if exists pop up button (o's sortBy_loc) then exit repeat
delay 0.2
end repeat
tell pop up button (o's sortBy_loc)
(*
name of menu items of menu 1
--> {"Nom", "Type", "Date de dernière ouverture", "Date de l’ajout", "Date de modification", "Date de création", "Taille", "Tags"}
--> {"Name", "Kind", "Date Last Opened", "Date Added", "Date Modified", "Date Created", "Size", "Tags"}
*)
click it -- reveal the menu items
click menu item (o's name_loc) of menu 1 -- "Tri par Type" or "Sort by Kind"
end tell -- pop up button (o's sortBy_loc)
(*-- Re-introduce the setting of "Arrange By:" thru the pop up menu
repeat 20 times -- loop for safe but here the pop up is always available at first pass
if exists pop up button (o's arrangeBy_loc) then exit repeat
delay 0.2
end repeat
*)
set popupNames to name of pop up buttons
set arrangeBy to ""
repeat with i from 1 to count popupNames
if item i of popupNames starts with (o's arrangeBy_loc) then
set arrangeBy to item i of popupNames
exit repeat
end if
end repeat
if forYK then
set myArrange to (o's none_loc)
else
set myArrange to (o's kind_loc)
end if
tell pop up button arrangeBy
click it
name of menu items of menu 1
--> --> {"Nom", "Type", "Application", "Date de dernière ouverture", "Date de l’ajout", "Date de modification", "Date de création", "Taille", "Tags", missing value, "Aucun"}
--> {"Name", "Kind", "Application", "Date Last Opened", "Date Added", "Date Modified", "Date Created", "Size", "Tags", missing value, "None"}
click menu item myArrange of menu 1 # "Organiser par : Type" (High Sierra),"Grouper par : Type" (Catalina) or "Arrange By: Kind"
end tell # pop up button arrangeBy
tell group 1 (*
class of UI elements
-- Don't worry, I uppercased the changing items to make them visible
--> with ' old ' systems --> {static text, button, button, RADIO GROUP, static text, pop up button, static text, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox}
--> with 'new' systems --> {static text, button, button, RADIO BUTTON, RADIO BUTTON, static text, pop up button, static text, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox}
*)
if exists radio group 1 then
-- We are here when High Sierra or older system is running. Don't know for Mojave
tell radio group 1
-- class of UI elements --> {radio button, radio button}
set radioDescriptions to description of radio buttons --> {"icônes de petite taille", "icônes de grande taille"}
--> {"small icon size", "large icon size"}
-- value of radio buttons --> {1, 0}
-- Loop which no longer assume which index is given to largeSizeIcons radio button
-- can't define a radio button by its description to get its value
if forYK then
set mySize to (o's smallSizeIcons_loc)
else
set mySize to (o's largeSizeIcons_loc)
end if
repeat with i from 1 to count radioDescriptions
if item i of radioDescriptions is mySize then
if value of radio button i is 0 then
click radio button i -- active the wanted size
exit repeat
end if
end if
end repeat
end tell -- radio group 1
else
-- We are here when Catalina is running, perhaps also under Mojave
set radioDescriptions to description of radio buttons --> {"icônes de petite taille", "icônes de grande taille"}
--> {"small icon size", "large icon size"}
-- value of radio buttons --> {1, 0}
-- Loop which no longer assume which index is given to largeSizeIcons radio button
-- can't define a radio button by its description to get its value
if forYK then
set mySize to (o's smallSizeIcons_loc)
else
set mySize to (o's largeSizeIcons_loc)
end if
repeat with i from 1 to count radioDescriptions
if item i of radioDescriptions is mySize then
if value of radio button i is 0 then
click radio button i -- activate the wanted size
exit repeat
end if
end if
end repeat
end if
tell pop up button 1 (*
its name --> "Taille du texte :"
title of menu items of menu 1 --> {"10", "11", "12", "13", "14", "15", "16"}
*)
if forYK then
set mySize to "10"
else
set mySize to "14"
end if
if its value is not mySize then
click it -- reveal the menu items
click menu item mySize of menu 1
end if
end tell -- pop up button 1
-- Here the iCloudStatus checkbox is greyed so its value is NEVER 1
if forYK then
if value of checkbox (o's iCloudStatus_loc) is 1 then click checkbox (o's iCloudStatus_loc) -- uncheck it
if value of checkbox (o's dateModified_loc) is 0 then click checkbox (o's dateModified_loc) -- check it
if value of checkbox (o's dateCreated_loc) is 0 then click checkbox (o's dateCreated_loc) -- check it
if value of checkbox (o's dateLastOpened_loc) is 1 then click checkbox (o's dateLastOpened_loc) -- uncheck it
if value of checkbox (o's dateAdded_loc) is 0 then click checkbox (o's dateAdded_loc) -- check it
if value of checkbox (o's size_loc) is 0 then click checkbox (o's size_loc) -- check it
if value of checkbox (o's kind_loc) is 0 then click checkbox (o's kind_loc) -- check it
if value of checkbox (o's version_loc) is 1 then click checkbox (o's version_loc) -- uncheck it
if value of checkbox (o's comments_loc) is 1 then click checkbox (o's comments_loc) -- uncheck it
if value of checkbox (o's tags_loc) is 0 then click checkbox (o's tags_loc) -- check it
if value of checkbox (o's useRelativeDates_loc) is 1 then click checkbox (o's useRelativeDates_loc) -- uncheck it
if value of checkbox (o's calculateAllSizes_loc) is 1 then click checkbox (o's calculateAllSizes_loc) -- uncheck it
if value of checkbox (o's showIconPreview_loc) is 0 then click checkbox (o's showIconPreview_loc) -- check it
else
-- pour Flavour
if value of checkbox (o's iCloudStatus_loc) is 1 then click checkbox (o's iCloudStatus_loc) -- uncheck it
if value of checkbox (o's dateModified_loc) is 0 then click checkbox (o's dateModified_loc) -- check it
if value of checkbox (o's dateCreated_loc) is 1 then click checkbox (o's dateCreated_loc) -- uncheck it
if value of checkbox (o's dateLastOpened_loc) is 1 then click checkbox (o's dateLastOpened_loc) -- uncheck it
if value of checkbox (o's dateAdded_loc) is 1 then click checkbox (o's dateAdded_loc) -- uncheck it
if value of checkbox (o's size_loc) is 0 then click checkbox (o's size_loc) -- check it
if value of checkbox (o's kind_loc) is 0 then click checkbox (o's kind_loc) -- check it
if value of checkbox (o's version_loc) is 1 then click checkbox (o's version_loc) -- uncheck it
if value of checkbox (o's comments_loc) is 1 then click checkbox (o's comments_loc) -- uncheck it
if value of checkbox (o's tags_loc) is 1 then click checkbox (o's tags_loc) -- uncheck it
if value of checkbox (o's useRelativeDates_loc) is 0 then click checkbox (o's useRelativeDates_loc) -- check it
if value of checkbox (o's calculateAllSizes_loc) is 0 then click checkbox (o's calculateAllSizes_loc) -- check it
if value of checkbox (o's showIconPreview_loc) is 0 then click checkbox (o's showIconPreview_loc) -- check it
end if
end tell -- group 1
set theButtons to buttons
-- loop to anticipate a possible change upon the index of the useAsDefaults button
repeat with aButton in theButtons
if name of aButton is (o's useAsDefaults_loc) then
click aButton
exit repeat
end if
end repeat
repeat with aButton in theButtons
-- loop to anticipate a possible change upon the index of the close button
if description of aButton is (o's closeButton_loc) then
click aButton -- Close the floating window
exit repeat
end if
end repeat
end tell -- window 1
end tell -- process "Finder" of "System Events"
-- end try -- enable it in real life
end ruleSettings
on closeFloatingWindows()
tell application "System Events" to tell process "Finder"
set frontmost to true
set theWindows to every window -- don't change that to keep the loop working
repeat with aWindow in theWindows
if subrole of aWindow is "AXSystemFloatingWindow" then
tell aWindow
-- get description of buttons --> {"Bouton de fermeture"}
repeat with aButton in buttons
if description of aButton is (o's closeButton_loc) then
click aButton -- Close the floating window
exit repeat
end if
end repeat
end tell -- aWindow
end if
end repeat
end tell
end closeFloatingWindows
Please, let me know how it behaves for you.
Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) dimanche 29 décembre 2019 20:06:18
Of course, I prove to be unable to leave a script untouched for more than one hour.
I removed most of the direct use of indexes of UI elements to take care of possible changes in the GUI.
It’s quite easy now than I am able to grab easily the localized name or description of these objects.
Added a new if - then - else block to take care of changes in the radio buttons locations.
Edited the English strings {“small icon size”, “large icon size”}
The keys “49.ibExternalAccessibilityDescription” and “48.ibExternalAccessibilityDescription” used for localization are not available under Catalina.
We must use “491.ibExternalAccessibilityDescription” and “493.ibExternalAccessibilityDescription”
Added several new features :rolleyes:
As I can’t test under Catalina, I dropped the use of the shortcut cmd + ctrl + 2 and re-inserted the code triggering the pop up “Arrange By:”
We must test the operating system for “Arrange by:”
Under Mojave or higher,
localized string “974.title” from table “ViewOptionsWindow”
return the correct value “Organiser par :” in French but return “974.title” when the system run in English
Under Catalina the key “974.title” doesn’t exist. We must use
localized string “V026”
which return a new string “Group By:” (“Grouper par :” in French)
Corrected a typo. “VO26” with the letter “O” was spelled “V026” with the digit “0”
A minor thing, but Framework versions can (and do) change. You should use “Versions:Current:Resources:” to be safe.
Thank you Shane.
Just to be sure, is that what you proposed:
set theBundle to ((path to library folder from system domain as text) & "Frameworks:ApplicationServices.framework:Versions:A:Frameworks:HIServices.framework:Versions:Current:Resources:") as «class furl»
It works under 10.13.6.
Maybe my original syntax is why Flavour get an odd behavior.
Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) lundi 30 décembre 2019 09:46:19
The code contain:
-- Loop which no longer assume which index is given to largeSizeIcons radio button
-- can't define a radio button by its description to get its value
repeat with i from 1 to count radioDescriptions
if item i of radioDescriptions is (o's largeSizeIcons_loc) then
if value of radio button i is 0 then
click radio button i -- active "icônes de grande taille"
exit repeat
end if
end if
end repeat
if item i of radioDescriptions is (o’s largeSizeIcons_loc) check that item i is the Large Icon radio button
if value of radio button i is 0, test if Large Icon is selected
when it isn’t, issue
click radio button i which activate Large Icon
We can’t trigger the radio button thru its description but we can do that thru its index.
I use the loop to be sure that the script will continue to work if the engineers - one never knows - decide to swap the two radio buttons.
I did the same for quite all the UI elements.
Only groups must be triggered by their index using brutal force because a group hasn’t a name or a description allowing us to grab which one do this or that.
Happily, here there is only one group.
Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) lundi 30 décembre 2019 16:33:59
Thanks.
I made cleaning too.
Which was the used language when you made tests which don’t apply Large Icons ?
Below is a short script which will tell me if there is a problem with the code extracting the localized strings for “Small size icons” and “Large size icons”.
use AppleScript version "2.4"
use scripting additions
script o
-- property showViewOptions_loc : ""
property useAsDefaults_loc : "" --> "Utiliser comme valeurs par défaut"
property smallSizeIcons_loc : "" --> "icônes de petite taille"
property largeSizeIcons_loc : "" --> "icônes de grande taille"
end script
-- Grab the localized version of several UI elements
set theBundle to path to application "Finder" --> an alias
-- CAUTION, now, two strings whose English spelling isn't reachable in resources
set aKey to "6.title"
set o's useAsDefaults_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- The English string isn't available. Define it here.
if o's useAsDefaults_loc = aKey then set o's useAsDefaults_loc to "Use as Defaults"
set aKey to "49.ibExternalAccessibilityDescription"
set o's smallSizeIcons_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- The English string isn't available. Define it here.
if o's smallSizeIcons_loc = aKey then set o's smallSizeIcons_loc to "Small Size Icons"
log o's smallSizeIcons_loc
set aKey to "48.ibExternalAccessibilityDescription"
set o's largeSizeIcons_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
-- The English string isn't available. Define it here.
if o's largeSizeIcons_loc = aKey then set o's largeSizeIcons_loc to "Large Size Icons"
log o's largeSizeIcons_loc
Here I got:
tell application "Finder"
path to current application
--> alias "SSD 1000:System:Library:CoreServices:Finder.app:"
end tell
tell current application
localized string "6.title" from table "ViewOptionsWindow" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Utiliser comme valeurs par défaut"
localized string "49.ibExternalAccessibilityDescription" from table "ViewOptionsWindow" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "icônes de petite taille"
(*icônes de petite taille*)
localized string "48.ibExternalAccessibilityDescription" from table "ViewOptionsWindow" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "icônes de grande taille"
(*icônes de grande taille*)
end tell
On a system running in German you are supposed to get:(Reverso translation from French)
--> "Symbole mit kleiner Größe"
(*Symbole mit kleiner Größe*)
--> "Symbole mit grosser Größe"
(*Symbole mit grosser Größe*)
On a system running in English you are supposed to get:
--> "49.ibExternalAccessibilityDescription"
(*Small Size Icons*)
--> "48.ibExternalAccessibilityDescription"
(*Large Size Icons*)
In the script I typed the English values by hand because they aren’t reachable from the resources.
Maybe I typed wrong strings.
Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) lundi 30 décembre 2019 18:10:33
Got it.
I booted my iMac in Deutsch and saw that the strings which I defined by myself are wrong.
When running in Deutsch the Log History states:
set radioDescriptions to description of radio buttons
→ {“small icon size”, “large icon size”}
but my strings were : “Small Size Icons” and “Large Size Icons”.
I edited message #16 to repair that.
If it’s really that, the script was supposed to do the job when running Deutsch but supposed to fail when running English.
Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) lundi 30 décembre 2019 18:23:51
I tested it again. And it is funny because it doesn’t work on my MacBook Pro.
I can’t understand it. May I should do this part with the Automator-App.I also create a new user account to test but still the same behavior.
I’m really thankful for your help Yvan Koenig but and don’t want to waste your time.
Don’t worry. I’m a retired potter and playing with AppleScript is my brain jogging.
It would be useful to be more precise.
When you write " it doesn’t work on my MacBook Pro", must I understand that the entire script fail or just that the Large icons aren’t selected ?
Here is a script in which I disabled many instructions keeping quite only what is related to the radio buttons supposed to rule the size of the icons.
The fact that seemingly the odd behavior strikes when the system is used in German let me think that the resources which I use to grab the localized strings aren’t the good ones.
I ran this attached script after setting my system to German.
I see no oddity.
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use script "FileManagerLib" version "2.3.3"
script o
-- property showViewOptions_loc : ""
property kind_loc : "" --> "Type"
property name_loc : "" --> "Nom"
property sortBy_loc : "" --> "Trier par :"
property iCloudStatus_loc : "" --> "Statut iCloud"
property dateModified_loc : "" --> "Date de modification"
property dateCreated_loc : "" --> "Date de création"
property dateLastOpened_loc : "" --> "Date de dernière ouverture"
property dateAdded_loc : "" --> "Date de l’ajout"
property size_loc : "" --> "Taille"
property version_loc : "" --> "Version"
property comments_loc : "" --> "Commentaires"
property tags_loc : "" --> "Tags"
property useRelativeDates_loc : "" --> "Utiliser les dates relatives"
property calculateAllSizes_loc : "" --> "Calculer toutes les tailles"
property showIconPreview_loc : "" --> "Utiliser un aperçu comme icône"}
property useAsDefaults_loc : "" --> "Utiliser comme valeurs par défaut"
property smallSizeIcons_loc : "" --> "icônes de petite taille"
property largeSizeIcons_loc : "" --> "icônes de grande taille"
property closeButton_loc : "" --> "Bouton de fermeture"
property alwaysOpenInListView_loc : "" --> "Toujours présenter par liste"
property browseInListView_loc : "" --> "Naviguer en présentation par listes"
end script
Germaine()
on Germaine()
set theFolder to (choose folder) --> an alias
set startTime to (time of (current date))
-- Grab the localized version of several UI elements
set theBundle to path to application "Finder" --> an alias
-- set o's showViewOptions_loc to localized string "N35" in bundle theBundle
set o's kind_loc to localized string "N224" in bundle theBundle
--> "Art"
set o's name_loc to localized string "N220" in bundle theBundle
--> "Name"
set o's sortBy_loc to localized string "FR11" in bundle theBundle
--> "Sortiert nach:"
set o's iCloudStatus_loc to localized string "N169.39" in bundle theBundle
--> "iCloud-Status"
set o's dateModified_loc to localized string "N169.30" in bundle theBundle -- alt N221
--> "Änderungsdatum"
set o's dateCreated_loc to localized string "N169.31" in bundle theBundle -- alt N222
--> "Erstellungsdatum"
set o's dateLastOpened_loc to localized string "N169.32" in bundle theBundle
--> "Zuletzt geöffnet"
set o's dateAdded_loc to localized string "N169.38" in bundle theBundle -- alt N230
--> "Hinzugefügt am"
set o's size_loc to localized string "N169.33" in bundle theBundle -- alt N223
--> "Größe"
set o's version_loc to localized string "N169.34" in bundle theBundle -- alt N226
--> "Version"
set o's comments_loc to localized string "N169.36" in bundle theBundle -- alt N227
--> "Kommentare"
set o's tags_loc to localized string "N169.37" in bundle theBundle -- alt N225
--> "Tags"
set o's alwaysOpenInListView_loc to localized string "VO15" in bundle theBundle
--> "Immer in Listendarstellung öffnen"
set o's browseInListView_loc to localized string "VO19" in bundle theBundle
--> "In Listendarstellung blättern"
-- CAUTION, now, two strings whose English spelling isn't reachable in resources
set aKey to "6.title"
set o's useAsDefaults_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
--> "Als Standard verwenden"
-- The English string isn't available. Define it here.
if o's useAsDefaults_loc = aKey then set o's useAsDefaults_loc to "Use as Defaults"
set aKey to "49.ibExternalAccessibilityDescription"
set o's smallSizeIcons_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
--> "Kleine Symbole"
-- The English string isn't available. Define it here.
if o's smallSizeIcons_loc = aKey then set o's smallSizeIcons_loc to "small icon size" -- EDITED
log o's smallSizeIcons_loc
set aKey to "491.ibExternalAccessibilityDescription" -- this is the 2nd resource defining "icônes de petite taille"
set smallSizeIcons_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
--> "Kleine Symbole"
-- The English string isn't available. Define it here.
if smallSizeIcons_loc = aKey then set smallSizeIcons_loc to "small icon size"
log smallSizeIcons_loc
set aKey to "48.ibExternalAccessibilityDescription"
set o's largeSizeIcons_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
--> "Große Symbole"
-- The English string isn't available. Define it here.
if o's largeSizeIcons_loc = aKey then set o's largeSizeIcons_loc to "large icon size" -- EDITED
log o's largeSizeIcons_loc
set aKey to "493.ibExternalAccessibilityDescription" -- this is the 2nd resource defining "icônes de grande taille"
set largeSizeIcons_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
--> "Große Symbole"
-- The English string isn't available. Define it here.
if largeSizeIcons_loc = aKey then set largeSizeIcons_loc to "large icon size"
log largeSizeIcons_loc
set aKey to "54.title"
set o's useRelativeDates_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
--> "Relatives Datum verwenden"
-- The English string isn't available. Define it here.
if o's useRelativeDates_loc = aKey then set o's useRelativeDates_loc to "Use relative dates"
set aKey to "65.title"
set o's calculateAllSizes_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle
--> "Alle Größen berechnen"
-- The English string isn't available. Define it here.
if o's calculateAllSizes_loc = aKey then set o's calculateAllSizes_loc to "Calculate all sizes"
set aKey to "41.title"
set o's showIconPreview_loc to localized string aKey from table "ViewOptionsWindow" in bundle theBundle -- ou 402.title, 104.title, 205.title
--> "Symbolvorschau einblenden"
-- The English string isn't available. Define it here.
if o's showIconPreview_loc = aKey then set o's showIconPreview_loc to "Show icon preview"
-- Thanks to Shane Stanley this path was edited to accomodate newsystems
set theBundle to ((path to library folder from system domain as text) & "Frameworks:ApplicationServices.framework:Versions:Current:Frameworks:HIServices.framework:Versions:Current:Resources:") as «class furl»
set o's closeButton_loc to localized string "AXButton:AXCloseButton" from table "RoleDescriptions" in bundle theBundle --> "Bouton de fermeture"
--> "Schließen-Taste"
(* List the folders of the selected one *)
-- With FileManagerLib the folder may be defined by an alias
set theFolders to objects of theFolder result type urls array with searching subfolders without include files and include invisible items --> NSArray object
set theFolders to theFolders as list -- a list of URLs
-- Append the root folder to the list
set end of theFolders to theFolder
set nbFolders to (count theFolders) as text -- 28993
-- During tests I was bored by remaining floating windows
-- In real life you may disable this instruction.
my closeFloatingWindows()
tell application "Finder"
repeat with aFolder in theFolders
open aFolder -- Finder may open a «class furl» object
if current view of window 1 is not list view then set current view of window 1 to list view
-- but Finder can't get properties of a «class furl» object
if (class of aFolder) is not alias then set aFolder to aFolder as alias
my ruleSettings(get name of aFolder)
close window 1
end repeat
end tell
set executeTime to (time of (current date)) - startTime --> 117
tell application "Finder" to display dialog "Treated : " & nbFolders & linefeed & " in : " & executeTime & " seconds"
end Germaine
on ruleSettings(folderName)
-- try -- enable it in real life
tell application "System Events" to tell process "Finder"
set frontmost to true
keystroke "2" using {command down, control down} --> "Organiser par Type" or "Arrange By Kind"
keystroke "j" using {command down} --> "Afficher les options de présentation" or "Show View Options"
repeat 10 times
tell window 1 to if (its name is folderName) and its subrole is "AXSystemFloatingWindow" then exit repeat
delay 0.1
end repeat
tell window 1
(*
class of UI elements
-- Don't worry, I uppercased the pop up buttons to highlight the ordering changes
--> with ' old ' systems --> {checkbox, checkbox, static text, POP UP BUTTON, POP UP BUTTON, static text, group, button, button, static text}
--> with 'new' systems --> {checkbox, checkbox, static text, POP UP BUTTON, static text, POP UP BUTTON, group, button, button, static text}
role description of buttons --> {"bouton", "Bouton de fermeture"}
--> {"button", "close button"}
name of buttons --> {"Utiliser comme valeurs par défaut", missing value}
--> {"Use as Defaults", missing value}
name of pop up buttons --> {"Trier par :", "Organiser par :"}
--> {"Sort By:", "Arrange By:"}
*)
(*
if value of checkbox (o's alwaysOpenInListView_loc) is not 1 then click checkbox (o's alwaysOpenInListView_loc) -- "Toujours présenter par liste"
if value of checkbox (o's browseInListView_loc) is not 1 then click checkbox (o's browseInListView_loc) -- "Naviguer en présentation par listes"
repeat 20 times -- loop for safe but here the pop up is always available at first pass
if exists pop up button (o's sortBy_loc) then exit repeat
delay 0.2
end repeat
tell pop up button (o's sortBy_loc)
(*
-- name of menu items of menu 1
--> {"Nom", "Type", "Date de dernière ouverture", "Date de l’ajout", "Date de modification", "Date de création", "Taille", "Tags"}
--> {"Name", "Kind", "Date Last Opened", "Date Added", "Date Modified", "Date Created", "Size", "Tags"}
--error number -128
*)
click it -- reveal the menu items
click menu item (o's name_loc) of menu 1 -- "Tri par Type" or "Sort by Kind"
end tell -- pop up button (o's sortBy_loc)
*)
tell group 1
-- class of UI elements
-- Don't worry, I uppercased the changing items to make them visible
--> with ' old ' systems --> {static text, button, button, RADIO GROUP, static text, pop up button, static text, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox}
--> with 'new' systems --> {static text, button, button, RADIO BUTTON, RADIO BUTTON, static text, pop up button, static text, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox, checkbox}
if exists radio group 1 then
log "We enter High Sierra code"
-- We are here when High Sierra or older system is running. Don't know for Mojave
tell radio group 1
-- class of UI elements --> {radio button, radio button}
set radioDescriptions to description of radio buttons --> {"icônes de petite taille", "icônes de grande taille"}
--> {"small icon size", "large icon size"}
--> {"Kleine Symbole", "Große Symbole"} -- they are the correct strings
name of radio buttons --> {missing value, missing value} # ADDED
title of radio buttons --> {"", ""} # ADDED
value of radio buttons --> {1, 0}
-- Loop which no longer assume which index is given to largeSizeIcons radio button
-- can't define a radio button by its description to get its value
repeat with i from 1 to count radioDescriptions
if item i of radioDescriptions is (o's largeSizeIcons_loc) then
log "here the radio button description matches largeSizeIcons_loc, with i = " & i
if value of radio button i is 0 then -- Large Icons is not selected
log "here if the Large Icons radio button is not selected"
click radio button i -- activate Large Icons "icônes de grande taille"
log "we clicked the Large Icons radio button to select it"
delay 0.1
value of radio button i
log "as the Large Icons radio button is supposed to be selected it's value is supposed to be 1, it is : " & result
exit repeat
log "point 5 with i = " & i -- we are supposed to never display that
end if
log "point 6 with i = " & i
end if
log "point 7 with i = " & i
end repeat
end tell -- radio group 1
log "Exit from High Sierra Code"
else
log "We enter new Catalina code"
-- We are here when Catalina is running, perhaps also under Mojave
set radioDescriptions to description of radio buttons --> {"icônes de petite taille", "icônes de grande taille"}
--> {"small icon size", "large icon size"}
--> {"Kleine Symbole", "Große Symbole"} -- are you getting these strings
# Two new instructions. I wonder if they, at last, give real name and title to radio buttons
# It would make sense now that they are no longer located in a radio group.
name of radio buttons --> {missing value, missing value} # ADDED
title of radio buttons --> {"", ""} # ADDED
value of radio buttons --> {1, 0}
-- Loop which no longer assume which index is given to largeSizeIcons radio button
-- can't define a radio button by its description to get its value
repeat with i from 1 to count radioDescriptions
if item i of radioDescriptions is (o's largeSizeIcons_loc) then
log "here the radio button description matches largeSizeIcons_loc, with i = " & i
if value of radio button i is 0 then -- Large Icons is not selected
log "here if the Large Icons radio button is not selected"
click radio button i -- activate Large Icons "icônes de grande taille"
log "we clicked the Large Icons radio button to select it"
delay 0.1
value of radio button i
log "as the Large Icons radio button is supposed to be selected it's value is supposed to be 1, it is : " & result
exit repeat
end if
log "point 6 with i = " & i
end if
log "point 7 with i = " & i
end repeat
log "exit from Catalina code"
end if
(*
tell pop up button 1 (*
get its name --> "Taille du texte :"
get title of menu items of menu 1 --> {"10", "11", "12", "13", "14", "15", "16"}
*)
if its value is not "14" then
click it -- reveal the menu items
click menu item "14" of menu 1
end if
end tell -- pop up button 1
-- Here the iCloudStatus checkbox is greyed so its value is NEVER 1
if value of checkbox (o's iCloudStatus_loc) is 1 then click checkbox (o's iCloudStatus_loc) -- uncheck it
if value of checkbox (o's dateModified_loc) is 0 then click checkbox (o's dateModified_loc) -- check it
if value of checkbox (o's dateCreated_loc) is 1 then click checkbox (o's dateCreated_loc) -- uncheck it
if value of checkbox (o's dateLastOpened_loc) is 1 then click checkbox (o's dateLastOpened_loc) -- uncheck it
if value of checkbox (o's dateAdded_loc) is 1 then click checkbox (o's dateAdded_loc) -- uncheck it
if value of checkbox (o's size_loc) is 0 then click checkbox (o's size_loc) -- check it
if value of checkbox (o's kind_loc) is 0 then click checkbox (o's kind_loc) -- check it
if value of checkbox (o's version_loc) is 1 then click checkbox (o's version_loc) -- uncheck it
if value of checkbox (o's comments_loc) is 1 then click checkbox (o's comments_loc) -- uncheck it
if value of checkbox (o's tags_loc) is 1 then click checkbox (o's tags_loc) -- uncheck it
if value of checkbox (o's useRelativeDates_loc) is 0 then click checkbox (o's useRelativeDates_loc) -- check it
if value of checkbox (o's calculateAllSizes_loc) is 0 then click checkbox (o's calculateAllSizes_loc) -- check it
if value of checkbox (o's showIconPreview_loc) is 0 then click checkbox (o's showIconPreview_loc) -- check it
*)
end tell -- group 1
set theButtons to buttons
-- loop to anticipate a possible change upon the index of the useAsDefaults button
repeat with aButton in theButtons
if name of aButton is (o's useAsDefaults_loc) then
click aButton
exit repeat
end if
end repeat
repeat with aButton in theButtons
-- loop to anticipate a possible change upon the index of the close button
if description of aButton is (o's closeButton_loc) then
click aButton -- Close the floating window
exit repeat
end if
end repeat
end tell -- window 1
end tell -- process "Finder" of "System Events"
-- end try -- enable it in real life
end ruleSettings
on closeFloatingWindows()
tell application "System Events" to tell process "Finder"
set frontmost to true
set theWindows to every window -- don't change that to keep the loop working
repeat with aWindow in theWindows
if subrole of aWindow is "AXSystemFloatingWindow" then
tell aWindow
-- get description of buttons --> {"Bouton de fermeture"}
repeat with aButton in buttons
if description of aButton is (o's closeButton_loc) then
click aButton -- Close the floating window
exit repeat
end if
end repeat
end tell -- aWindow
end if
end repeat
end tell
end closeFloatingWindows
I ran it upon a folder whose icon size was set to Small.
It contained no subfolder.
The Log History is:
Don't click [Open this Scriplet in your Editor:]
tell application "Script Editor"
choose folder
--> alias "SSD 1000:Users:yvankoenig:Desktop:oups:"
end tell
tell current application
current date
--> date "Montag, 30. Dezember 2019 um 21:10:46"
end tell
tell application "Finder"
path to current application
--> alias "SSD 1000:System:Library:CoreServices:Finder.app:"
end tell
tell current application
localized string "N224" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Art"
localized string "N220" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Name"
localized string "FR11" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Sortiert nach:"
localized string "N169.39" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "iCloud-Status"
localized string "N169.30" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Änderungsdatum"
localized string "N169.31" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Erstellungsdatum"
localized string "N169.32" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Zuletzt geöffnet"
localized string "N169.38" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Hinzugefügt am"
localized string "N169.33" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Größe"
localized string "N169.34" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Version"
localized string "N169.36" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Kommentare"
localized string "N169.37" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Tags"
localized string "VO15" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Immer in Listendarstellung öffnen"
localized string "VO19" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "In Listendarstellung blättern"
localized string "6.title" from table "ViewOptionsWindow" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Als Standard verwenden"
localized string "49.ibExternalAccessibilityDescription" from table "ViewOptionsWindow" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Kleine Symbole"
(*Kleine Symbole*)
localized string "491.ibExternalAccessibilityDescription" from table "ViewOptionsWindow" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Kleine Symbole"
(*Kleine Symbole*)
localized string "48.ibExternalAccessibilityDescription" from table "ViewOptionsWindow" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Große Symbole"
(*Große Symbole*)
localized string "493.ibExternalAccessibilityDescription" from table "ViewOptionsWindow" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Große Symbole"
(*Große Symbole*)
localized string "54.title" from table "ViewOptionsWindow" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Relatives Datum verwenden"
localized string "65.title" from table "ViewOptionsWindow" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Alle Größen berechnen"
localized string "41.title" from table "ViewOptionsWindow" in bundle alias "SSD 1000:System:Library:CoreServices:Finder.app:"
--> "Symbolvorschau einblenden"
path to library folder from system domain as text
--> "SSD 1000:System:Library:"
localized string "AXButton:AXCloseButton" from table "RoleDescriptions" in bundle file "SSD 1000:System:Library:Frameworks:ApplicationServices.framework:Versions:A:Frameworks:HIServices.framework:Versions:A:Resources:"
--> "Schließen-Taste"
end tell
tell application "System Events"
set frontmost of process "Finder" to true
get every window of process "Finder"
--> {}
end tell
tell application "Finder"
open alias "SSD 1000:Users:yvankoenig:Desktop:oups:"
get current view of window 1
--> list view
get name of alias "SSD 1000:Users:yvankoenig:Desktop:oups:"
--> "oups"
end tell
tell application "System Events"
set frontmost of process "Finder" to true
keystroke "2" using {command down, control down}
keystroke "j" using {command down}
get name of window 1 of process "Finder"
--> "oups"
get subrole of window 1 of process "Finder"
--> "AXSystemFloatingWindow"
exists radio group 1 of group 1 of window 1 of process "Finder"
--> true
(*We enter High Sierra code*) (* you will read "We enter new Catalina code" *)
get description of every radio button of radio group 1 of group 1 of window 1 of process "Finder"
--> {"Kleine Symbole", "Große Symbole"}
get name of every radio button of radio group 1 of group 1 of window 1 of process "Finder"
--> {missing value, missing value} # MAYBE name is no longer missing value for you
get title of every radio button of radio group 1 of group 1 of window 1 of process "Finder"
--> {"", ""} # MAYBE title is no longer "" for you
get value of every radio button of radio group 1 of group 1 of window 1 of process "Finder"
--> {1, 0}
(*point 7 with i = 1*)
(*here the radio button description matches largeSizeIcons_loc, with i = 2*)
get value of radio button 2 of radio group 1 of group 1 of window 1 of process "Finder"
--> 0
(*here if the Large Icons radio button is not selected*)
click radio button 2 of radio group 1 of group 1 of window 1 of process "Finder"
--> radio button 2 of radio group 1 of group 1 of window "oups" of application process "Finder"
(*we clicked the Large Icons radio button to select it*)
get value of radio button 2 of radio group 1 of group 1 of window 1 of process "Finder"
--> 1
(*as the Large Icons radio button is supposed to be selected it's value is supposed to be 1, it is : 1*)
(*Exit from High Sierra Code*) (* you will read "exit from Catalina code" *)
get every button of window 1 of process "Finder"
--> {button "Als Standard verwenden" of window "oups" of application process "Finder", button 2 of window "oups" of application process "Finder"}
get name of button "Als Standard verwenden" of window "oups" of application process "Finder"
--> "Als Standard verwenden"
click button "Als Standard verwenden" of window "oups" of application process "Finder"
--> button "Als Standard verwenden" of window "oups" of application process "Finder"
get description of button "Als Standard verwenden" of window "oups" of application process "Finder"
--> "Taste"
get description of button 2 of window "oups" of application process "Finder"
--> "Schließen-Taste"
click button 2 of window "oups" of application process "Finder"
--> button 2 of window "oups" of application process "Finder"
end tell
tell application "Finder"
close window 1
--> {}
end tell
tell current application
current date
--> date "Montag, 30. Dezember 2019 um 21:10:47"
end tell
tell application "Finder"
display dialog "Treated : 1
in : 1 seconds"
--> {button returned:"OK"}
end tell
Ergebnis:
{button returned:"OK"}
Logically everything is supposed to behave flawlessly.
When I will have your Log History I will perhaps discover what may be wrong.
Of course, if my grand-daughter comes here tomorrow I will test upon its macBook running Catalina. She will dislike the fact that I will switch the languags but I paid the machine
Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) lundi 30 décembre 2019 21:27:03
A bit of insomnia strike.
I had an idea.
Maybe, at last, under new systems, the name and/or title of a radio button is/are given ‘meaningful’ values.
Would make sense now that radio buttons aren’t located in a radio group.
Now, the message #16 contains a script offering the required features minus the columns ordering.
Four features are ready to be ruled.
I apologizes but, as I’m not an Apple’s employee, I don’t know what rules their design choices.
Not sure that Apple’s employees really know them :rolleyes:
Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) mardi 31 décembre 2019 16:10:09