Patrick Hennessey
Patrick Hennessey

Reputation: 481

Photoshop script: output name of every selected top-level layer?

I've got an ActionReference Photoshop Javascript code working here that spits out the name of every selected layer:

var lyrs = [];
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID('Dcmn'), charIDToTypeID('Ordn'), charIDToTypeID('Trgt'));
var targetLayers = executeActionGet(ref).getList(stringIDToTypeID('targetLayers'));
for (var i = 0; i < targetLayers.count; i++) {
    var ref2 = new ActionReference();
    ref2.putIndex(charIDToTypeID('Lyr '), targetLayers.getReference(i).getIndex() + 1);
    var desc = executeActionGet(ref2);
    lyrs.push(desc.getString(charIDToTypeID('Nm  ')));
}
lyrs.join('\\n');

(I join these into a single line-delimited string at the end for use in AppleScript, so ignore that part for now).

However, this code also includes the nested layers as well (this happens when you shift-click groups of layer sets), and I'm not sure how to modify this code to ignore those lower level nested layers, and only output the list of the top-level layer names.

I'm very experienced with AppleScript, but I'm a novice at JavaScript, so go easy on me!

Upvotes: 0

Views: 140

Answers (1)

Patrick Hennessey
Patrick Hennessey

Reputation: 481

I figured it out: Needed to include a line about the parentLayerID:

var ref = new ActionReference(); sTT = stringIDToTypeID;
ref.putEnumerated(sTT('document'), sTT('ordinal'), sTT('targetEnum'));
var targetLayers = executeActionGet(ref).getList(sTT('targetLayers')); var lyrs = [];
for (var i = 0; i < targetLayers.count; i++) {
    var ref2 = new ActionReference();
    ref2.putIndex(sTT('layer'), targetLayers.getReference(i).getIndex() + 1);
    var desc = executeActionGet(ref2);
    desc.getInteger(sTT('parentLayerID')) < 0 && lyrs.push(desc.getString(sTT('name'))); }
lyrs.join('\\n');

Upvotes: 0

Related Questions