Reputation: 481
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
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