Friday, August 12, 2022

#1 2019-12-28 04:22:38 am

Flavour
Member
Registered: 2018-08-27
Posts: 24

Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

Dear all,
since BridgePlus doesn’t work on macOS Catalina I have to set each folder view by myself.

List view
- arrange by: Kind
- sort by: name

On HighSierra I used this script (from Yvan Koenig), because Automator can only sort and not arrange Finder views.

Applescript:

use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use script "BridgePlus"
load framework

script o
   property showOptions : ""
end script
set theFolder to (choose folder)
set PosixPath to POSIX path of theFolder
# Grab the localized version of the menu item "Afficher les options de présentation"
tell application "Finder" to set o's showOptions to localized string "N35"

(* List the folders of the selected one *)
set theResult to current application's SMSForder's foldersIn:PosixPath recursive:true skipHidden:true skipInsidePackages:true asPaths:false
set theFolders to theResult as list # une liste d' URLs
# Add the root folder to the list
set end of theFolders to theFolder
--return (count theFolders as text)
tell application "Finder"
   repeat with aFolder in theFolders
       open aFolder
       try
           set current view of window 1 to list view
       end try
       my ruleSettings()
       close window 1
   end repeat
end tell

on ruleSettings()
   tell application "System Events" to tell process "Finder"
       set frontmost to true
       if name of menu item 21 of menu 1 of menu bar item 5 of menu bar 1 = o's showOptions then
           keystroke "j" using {command down} -- open Presentation settings window
           
           repeat 10 times
               if subrole of window 1 is "AXSystemFloatingWindow" then exit repeat
               delay 0.1
           end repeat
       end if
       tell window 1
           (*
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"}
*)

           name of buttons --> {"Utiliser comme valeurs par défaut", missing value}
           name of pop up buttons --> {"Trier par :", "Organiser par :"}
           
           tell pop up button 1
               log (get its name)
               repeat 20 times
                   try
                       click it --> pop up button "Trier par :"
                       exit repeat
                   end try
                   delay 0.2
               end repeat
               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"}
               
               repeat 20 times # ran it upon a folder with 1 753 853 folders and never loop more than 5 times
                   try
                       set byKind to name of menu item 1 of menu 1
                       exit repeat
                   end try
                   delay 0.2
               end repeat
               --log byKind
               click menu item byKind of menu 1 # "Kind"
           end tell # pop up button 1
           
           delay 0.2
           tell pop up button 2
               --log (get its name)
               repeat 10 times
                   try
                       click it --> pop up button "Organiser par :"…
                       exit repeat
                   end try
                   delay 0.2
               end repeat
               --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"}}
               
               repeat 20 times # ran it upon a folder with 1 753 853 folders and never loop more than 5 times
                   try
                       set nameItem to name of menu item 2 of menu 1
                       exit repeat
                   end try
                   delay 0.2
               end repeat
               -- log nameItem
               click menu item nameItem of menu 1 # "Name"
           end tell # pop up button 1
           
           click button 1 # "Utiliser comme valeurs par défaut"
           click button 2 # close the window
       end tell
   end tell
end ruleSettings

I always get an error on Catalina (with Script Debugger + BridgePlus)…. Maybe someone have a better solution to resolve my problem.

Thx smile

Last edited by Flavour (2020-01-01 05:11:59 pm)


macOS Catalina 10.15.7 in German

Offline

 

#2 2019-12-28 04:47:36 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 4622

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

Download FileManagerLib from <https://macosxautomation.com/applescrip … _Libs.html>, install it and try to try:

Applescript:

use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use script "FileManagerLib"
--load framework

script o
   property showOptions : ""
end script
set theFolder to (choose folder)
set PosixPath to POSIX path of theFolder
# Grab the localized version of the menu item "Afficher les options de présentation"
tell application "Finder" to set o's showOptions to localized string "N35"

(* List the folders of the selected one *)

set theResult to objects of PosixPath result type urls array with searching subfolders without include files and include invisible items
set theFolders to theResult as list # une liste d' URLs
# Add the root folder to the list
set end of theFolders to theFolder
--return (count theFolders as text)
tell application "Finder"
   repeat with aFolder in theFolders
       open aFolder
       try
           set current view of window 1 to list view
       end try
       my ruleSettings()
       close window 1
   end repeat
end tell

on ruleSettings()
   tell application "System Events" to tell process "Finder"
       set frontmost to true
       if name of menu item 21 of menu 1 of menu bar item 5 of menu bar 1 = o's showOptions then
           keystroke "j" using {command down} -- open Presentation settings window
           
           repeat 10 times
               if subrole of window 1 is "AXSystemFloatingWindow" then exit repeat
               delay 0.1
           end repeat
       end if
       tell window 1
           (*
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"}
*)

           -- name of buttons --> {"Utiliser comme valeurs par défaut", missing value}
           -- name of pop up buttons --> {"Trier par :", "Organiser par :"}
           
           tell pop up button 1
               -- log (get its name)
               repeat 20 times
                   try
                       click it --> pop up button "Trier par :"
                       exit repeat
                   end try
                   delay 0.2
               end repeat
               -- 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"}
               
               repeat 20 times # ran it upon a folder with 1 753 853 folders and never loop more than 5 times
                   try
                       set byKind to name of menu item 1 of menu 1
                       exit repeat
                   end try
                   delay 0.2
               end repeat
               --log byKind
               click menu item byKind of menu 1 # "Kind"
           end tell # pop up button 1
           
           delay 0.2
           tell pop up button 2
               --log (get its name)
               repeat 10 times
                   try
                       click it --> pop up button "Organiser par :"…
                       exit repeat
                   end try
                   delay 0.2
               end repeat
               --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"}}
               
               repeat 20 times # ran it upon a folder with 1 753 853 folders and never loop more than 5 times
                   try
                       set nameItem to name of menu item 2 of menu 1
                       exit repeat
                   end try
                   delay 0.2
               end repeat
               -- log nameItem
               click menu item nameItem of menu 1 # "Name"
           end tell # pop up button 1
           
           click button 1 # "Utiliser comme valeurs par défaut"
           click button 2 # close the window
       end tell
   end tell
end ruleSettings

I tested only under High Sierra because my machine doesn't accept new systems.
You may see that I disabled several instructions which were useful when building the code but are just wasting time when we really use the script.

Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) samedi 28 décembre 2019  11:47:16

Last edited by Yvan Koenig (2019-12-28 04:56:35 am)

Offline

 

#3 2019-12-28 05:18:02 am

Flavour
Member
Registered: 2018-08-27
Posts: 24

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

Thanks Yvan Koenig for your fast reply smile

Now I can use Apple Script-Editor and it loads the FileManagerLib.


But I get this error:

- error "The variable byKind is not defined." number -2753 from "byKind" -


macOS Catalina 10.15.7 in German

Offline

 

#4 2019-12-28 06:49:34 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 4622

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

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

Offline

 

#5 2019-12-28 03:56:55 pm

KniazidisR
Member
From:: Greece
Registered: 2019-03-03
Posts: 2447

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

Plain AppleScript version, without third-party software (tested on Mojave):

Applescript:


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

Last edited by KniazidisR (2019-12-29 08:19:55 am)


Model: MacBook Pro
OS X: Catalina 10.15.7
Web Browser: Safari 14.1
Ram: 4 GB

Offline

 

#6 2019-12-29 04:37:11 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 4622

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

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.

Applescript:

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. wink
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

Last edited by Yvan Koenig (2019-12-29 06:35:37 am)

Offline

 

#7 2019-12-29 06:25:54 am

KniazidisR
Member
From:: Greece
Registered: 2019-03-03
Posts: 2447

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

Yvan Koenig wrote:

No offense intended but KniazidisR forgot a feature available in the original script:
it was designed to treat also the selected folder.


Fair remark. I updated my script. To implement this functionality, I added 1 code line.

Yvan Koenig wrote:


BridgePlus (replaced now by FileManagerLib) was used because the source folder was able to contain numerous subfolders. I tested with 28993 folders.


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.

Last edited by KniazidisR (2019-12-29 07:11:44 am)


Model: MacBook Pro
OS X: Catalina 10.15.7
Web Browser: Safari 14.1
Ram: 4 GB

Offline

 

#8 2019-12-29 07:45:22 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 4622

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

@  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:**********:Desktop:oups:aa:a:", "SSD 1000:Users:**********:Desktop:oups:bb:b:", "SSD 1000:Users:**********:Desktop:oups:dossier /sans titre:", "SSD 1000:Users:**********:Desktop:Resources:"}

I selected two folders and ran it again, (with added linefeeds to make the oddity more legible)
{
"SSD 1000:Users:**********:Desktop:oups:aa:a:", "SSD 1000:Users:**********:Desktop:oups:bb:b:", "SSD 1000:Users:**********:Desktop:oups:dossier /sans titre:",
"SSD 1000:Users:**********:Desktop:oups:aa:a:", "SSD 1000:Users:**********:Desktop:oups:bb:b:", "SSD 1000:Users:**********:Desktop:oups:dossier /sans titre:",
"SSD 1000:Users:**********:Desktop: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:

Applescript:

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

Applescript:

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 wink

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

Applescript:

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:**********:Desktop:oups:", "SSD 1000:Users:**********:Desktop:oups:aa:a:", "SSD 1000:Users:**********:Desktop:oups:bb:b:", "SSD 1000:Users:**********:Desktop:oups:dossier /sans titre:", "SSD 1000:Users:**********:Desktop:Resources:"}
*)

Last edited by Yvan Koenig (2019-12-29 08:02:03 am)

Offline

 

#9 2019-12-29 08:22:14 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 4622

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

KniazidisR wrote:


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.



No luck.

Here is the end of the Log History

Applescript:


-- 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

Offline

 

#10 2019-12-29 08:23:24 am

KniazidisR
Member
From:: Greece
Registered: 2019-03-03
Posts: 2447

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

Yvan Koenig wrote:


No offense intended but there is a problem with your late change.
I will let you play with the code to get a correct list.


Well, you are absolutely right today big_smile. I forgot to make aFolder HFS path, when added new code line. I updated my script above.

Last edited by KniazidisR (2019-12-29 08:27:52 am)


Model: MacBook Pro
OS X: Catalina 10.15.7
Web Browser: Safari 14.1
Ram: 4 GB

Offline

 

#11 2019-12-29 08:47:18 am

Flavour
Member
Registered: 2018-08-27
Posts: 24

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

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?


1. [x] alway open in list view
    [x] browse in list view
______________________________
                  2. arrange by: kind (Already works)
                  3. sort by: name (Already works)
______________________________
4. Icon size -> LARGE
5. Text size -> 14
______________________________
6. show columns
    [x] date modified
    [x] size
    [x] kind
______________________________
7. [x] use relative dates
    [x] calculate all sizes
    [x] show icon preview


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.

Last edited by Flavour (2019-12-29 08:51:06 am)


macOS Catalina 10.15.7 in German

Offline

 

#12 2019-12-29 09:06:09 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 4622

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

No offense intended…
No luck again.

The edited version return the list:

{"SSD 1000:Users:**********:Desktop:oups:", "SSD 1000:Users:**********:Desktop:oups:aa:a:", "SSD 1000:Users:**********:Desktop:oups:bb:b:", "SSD 1000:Users:**********:Desktop:oups:dossier /sans titre:", "SSD 1000:Users:**********:Desktop:Resources:", "SSD 1000:Users:**********:Desktop: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:**********:Desktop:oups:", "SSD 1000:Users:**********:Desktop:oups:aa:a:", "SSD 1000:Users:**********:Desktop:oups:bb:b:", "SSD 1000:Users:**********:Desktop:oups:dossier /sans titre:", "SSD 1000:Users:**********:Desktop:Resources:", "SSD 1000:Users:**********:Desktop: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:

Applescript:

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:**********:Desktop:oups:", "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:", "SSD 1000:Users:**********:Desktop: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 wink

Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) dimanche 29 décembre 2019  15:41:08

Offline

 

#13 2019-12-29 09:10:28 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 4622

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

Flavour wrote:

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?


1. [x] alway open in list view
    [x] browse in list view
______________________________
                  2. arrange by: kind (Already works)
                  3. sort by: name (Already works)
______________________________
4. Icon size -> LARGE
5. Text size -> 14
______________________________
6. show columns
    [x] date modified
    [x] size
    [x] kind
______________________________
7. [x] use relative dates
    [x] calculate all sizes
    [x] show icon preview


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.



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

Offline

 

#14 2019-12-29 09:42:38 am

KniazidisR
Member
From:: Greece
Registered: 2019-03-03
Posts: 2447

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

Yvan Koenig wrote:

No offense intended…
No luck again.Here is my proposal:

Applescript:

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



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:

Applescript:


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

Last edited by KniazidisR (2019-12-29 09:49:32 am)


Model: MacBook Pro
OS X: Catalina 10.15.7
Web Browser: Safari 14.1
Ram: 4 GB

Offline

 

#15 2019-12-29 11:34:40 am

CK
Member
From:: UK
Registered: 2018-11-04
Posts: 176

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

KniazidisR wrote:

Applescript:

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"


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.

Offline

 

#16 2019-12-29 01:07:11 pm

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 4622

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

I hope that I forgot nothing.

Applescript:

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 roll

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"

Last edited by Yvan Koenig (2020-01-02 09:34:49 pm)

Offline

 

#17 2019-12-29 05:39:32 pm

Shane Stanley
Member
From:: Australia
Registered: 2002-12-07
Posts: 6791

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

Yvan Koenig wrote:

I hope that I forgot nothing.

Applescript:

   set theBundle to ((path to library folder from system domain as text) & "Frameworks:ApplicationServices.framework:Versions:A:Frameworks:HIServices.framework:Versions:A:Resources:") as «class furl»



A minor thing, but Framework versions can (and do) change. You should use "Versions:Current:Resources:" to be safe.


Shane Stanley <sstanley@myriad-com.com.au>
www.macosxautomation.com/applescript/apps/
latenightsw.com

Offline

 

#18 2019-12-30 02:46:42 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 4622

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

Shane Stanley wrote:
Yvan Koenig wrote:

I hope that I forgot nothing.

Applescript:

   set theBundle to ((path to library folder from system domain as text) & "Frameworks:ApplicationServices.framework:Versions:A:Frameworks:HIServices.framework:Versions:A:Resources:") as «class furl»



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:

Applescript:

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

Last edited by Yvan Koenig (2019-12-30 02:47:20 am)

Offline

 

#19 2019-12-30 09:55:01 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 4622

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

The code contain:

Applescript:


-- 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

Last edited by Yvan Koenig (2019-12-30 11:30:26 am)

Offline

 

#20 2019-12-30 11:11:31 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 4622

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

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".

Applescript:

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:

Applescript:

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

Offline

 

#21 2019-12-30 11:24:00 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 4622

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

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

Last edited by Yvan Koenig (2019-12-30 11:33:16 am)

Offline

 

#22 2019-12-30 02:29:53 pm

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 4622

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

Flavour wrote:

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. sad



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.

Applescript:

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:

Applescript:


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 wink

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.

Last edited by Yvan Koenig (2019-12-30 10:02:42 pm)

Offline

 

#23 2019-12-31 09:13:05 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 4622

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

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 roll

Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) mardi 31 décembre 2019  16:10:09

Last edited by Yvan Koenig (2019-12-31 11:43:23 am)

Offline

 

#24 2019-12-31 01:28:03 pm

Flavour
Member
Registered: 2018-08-27
Posts: 24

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

Yvan your script is a timesaver!
I never expected that this can be done, but you did it!

I found a small issue. If arrange by is set as none (german: ohne) then

Applescript:

keystroke "2" using {command down, control down} --> "Organiser par Type" or "Arrange By Kind"

doesn't work and arrange by remains as none (german: ohne)

It just works when I set arrange manually for example to name or application, etc...

Please tell me if I should delete some posts.

I wish you and your loved ones a happy new year.
Thank you for your effort smile

Last edited by Flavour (2019-12-31 01:28:56 pm)


macOS Catalina 10.15.7 in German

Offline

 

#25 2019-12-31 02:43:26 pm

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 4622

Re: Finder listview (arrange by: Kind & sort by: Name) MacOS Catalina

Tomorrow I will try to understand why "Arrange by" doesn't work.
It's curious because as far as I know, shortcuts aren't localization dependent.

Here, it does the job.
Easy to check because I always use "Arranged by : None"

Maybe I will reactivate the original scheme in which I didn't used the shortcut but the dedicated pop up menu. All the code is already available.

You may delete #26, #25, #23, # 20.

When it will be done, in fact tomorrow, I will delete some of my messages.

Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) mardi 31 décembre 2019  21:43:20

Last edited by Yvan Koenig (2019-12-31 02:55:10 pm)

Offline

 

Board footer

Powered by FluxBB

RSS (new topics) RSS (active topics)