Copy link to clipboard
Copied
I work with a lot of groups (layersets) that contain content that clutters the screen. It would be great to use some ExtendScript command to collapse groups (similar to pressing the triangle next to the group, not talking about visibility). Is there a way to do this? The Script Listener does not record any code when doing this, and I can't find any documentation on it. But it seems like something that should be addressable in code. Thanks for any suggestions!
Hi 😃
I had this broblem too. But i found a answer. It strange a little bit, but it works.
So, we have a layers in the group, and group is expand. Group is a acive layer.
...var groupname = app.activeDocument.activeLayer.name // remember name of group
var idungroupLayersEvent = stringIDToTypeID( "ungroupLayersEvent" ); // this part from Script Listene -- ungroup group
var desc14 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref13 = new ActionReference();
var idLyr = charIDToTy
Type in search collapseAllGroupsEvent
Copy link to clipboard
Copied
If I remember correctly there was a work-around, probably the thread was over at the now-defunct ps-scripts.com.
You might be able to find something in the archive:
Copy link to clipboard
Copied
The work-a-round could be these scripts here.
Copy link to clipboard
Copied
Thanks!
Copy link to clipboard
Copied
While this script definitely works as advertised, it takes a very roundabout approach. I'm concerned with potential robustness, as well as speed on complex images. If anyone knows a more direct option to open/close layer sets, would love any suggestions. Thanks!
Copy link to clipboard
Copied
Hi 😃
I had this broblem too. But i found a answer. It strange a little bit, but it works.
So, we have a layers in the group, and group is expand. Group is a acive layer.
var groupname = app.activeDocument.activeLayer.name // remember name of group
var idungroupLayersEvent = stringIDToTypeID( "ungroupLayersEvent" ); // this part from Script Listene -- ungroup group
var desc14 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref13 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref13.putEnumerated( idLyr, idOrdn, idTrgt );
desc14.putReference( idnull, ref13 );
executeAction( idungroupLayersEvent, desc14, DialogModes.NO );
var idMk = charIDToTypeID( "Mk " ); // this part from Script Listene -- group selected layers
var desc15 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref14 = new ActionReference();
var idlayerSection = stringIDToTypeID( "layerSection" );
ref14.putClass( idlayerSection );
desc15.putReference( idnull, ref14 );
var idFrom = charIDToTypeID( "From" );
var ref15 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref15.putEnumerated( idLyr, idOrdn, idTrgt );
desc15.putReference( idFrom, ref15 );
executeAction( idMk, desc15, DialogModes.NO );
app.activeDocument.activeLayer.name = groupname // recall group name
P.S. Sorry of my english. It doesn't my mother tonque.
Copy link to clipboard
Copied
Works when multiple layers are selected. Any idea how to create a closed group that only contains a single layer?
Copy link to clipboard
Copied
A workaround could be to create a temporary layer inside the group, then to use the above script by Vova_p, and then to delete the temp layer ?
Copy link to clipboard
Copied
Sorry, my suggestion was loosy. The last step would reopen the group!
Copy link to clipboard
Copied
I spoke too fast (well... Ok...lesson learned). It's possible too delete the temp layer without reopen the group.
Copy link to clipboard
Copied
It has been a few years, however, it is still a great answer Vova_p!
Copy link to clipboard
Copied
the suggestions listed here so far work under limited assumptions. But closing a group this way removes a lot of information from the group: layer styles, lock status, color, blendIf, opacity changes, etc.
Is there no JSX command to do it without altering the group?
Copy link to clipboard
Copied
Type in search collapseAllGroupsEvent
Copy link to clipboard
Copied
Thank you
Copy link to clipboard
Copied
I have extended the script from @Vova_p and collected some related scripts here:
https://gist.github.com/MarshySwamp/a39e3e1efee41174b3b92ee68c40fcd8