Copy link to clipboard
Copied
Hello -
I would like to copy a string to the clipboard (on Mac) when Illustrator is launch.
So I copy-paste the below script into a new .jsx file (Startup Scripts folder), but I get an error…
Any idea why I get this error?
var SWTY = "bGE-PJk";
// var x = app.documents[0].selections.toString();
// This should be escaped OK
var sh = app.system("osascript -e 'set the clipboard to \"" + SWTY + "\"'");
sh ? alert('Failed?') : alert('Done…');
Copy link to clipboard
Copied
app.system is not part of the Illustrator API, it's on the Photoshop API if that helps
Copy link to clipboard
Copied
Hey Carlos 🙂
It helps,
but how can I copy-paste that string (SWTY) into the clipboard at launch (without having specifically an document open)?
Thanks…
Copy link to clipboard
Copied
create a new document, add a text frame, add the contents you want copied to the clipboard, app.copy() then close the document.
it's a bit too much but that the only option I can think of right now
Copy link to clipboard
Copied
So this is a crazy way to do this but it's the only way I can sort out how to run a system command from Ai (requires Photoshop). Since Ai doesn't have the `app.system()` method, we are going to send a Bridge Talk message (docs) to Photoshop to execute the system command for us.
Before this idea, I tried a few different ways of doing this all within Ai but none of them worked...
/**
* AiCopyToClipboardViaPhotoshop.jsx
*
* Run a Mac system command from Illustrator via the `app.system()` Photoshop method
* using Bridge Talk (https://extendscript.docsforadobe.dev/interapplication-communication/)
*
* Notes:
* 1. Photoshop must be installed and open on your system
* 2. This file needs to be placed in your Ai start up scripts folder
* (https://extendscript.docsforadobe.dev/introduction/scripting-for-specific-applications.html?highlight=startup#startup-scripts)
*/
// item to be copied to clipboard
var SWTY = "bGE-PJk";
// use Bridge Talk to run a system command in Photoshop (must be installed)
var bt = new BridgeTalk();
bt.target = "photoshop";
bt.body = 'app.system("echo ' + SWTY + ' | pbcopy")';
// send the message
bt.send();
Copy link to clipboard
Copied
Hey jduncan 🙂
W0W thx a lot, it works perfectly.
Just a bi "sad" that Photoshop needs to be open.
Even I'm absolutely not a programmer…
I was working on a piece of coding but I'm stuck with the part with the part I will highlight.
That highlighted part works "alone", but when I embed it in the below piece of code it doesn't work anymore…
Hereunder the basic code. As comment = highlighted part 😉
// #targetengine miscellaneous;
#target Illustrator
#targetengine main
var SWD = "bGE-PJk";
// PALETTE
// =======
var myPalette = new Window("palette"); // , {resizeable: true}
myPalette.text = "DC TOOLS";
myPalette.orientation = "column";
myPalette.alignChildren = ["center","top"];
myPalette.spacing = 5;
myPalette.margins = 5;
var button2 = myPalette.add("button", undefined, "PACK", {name: "button2"});
button2.graphics.font = ScriptUI.newFont ("Helvetica", "Bold", 11); // <— From p78 https://www.daube.ch/docu/fm-documentation/ExtendScript/ScriptUI_for_Dummies-%5BPeterKahrel%5D.pdf // button2.pointSize = 15; // button2.text.font.size = "12pt";
button2.helpTip = "XXX";
myPalette.frameLocation = [ 1850, 70 ];
myPalette.show();
button2.addEventListener('mousedown', function () {
/*
// Clear the clipboard
app.activeDocument.selection = null;
app.copy();
var tempObj = app.activeDocument.pathItems.add(); // create some temporary object
var myText = app.activeDocument.textFrames.add(); // create the text frame
myText.contents = SWD;
tempObj.selected = true; // select the temporary object first -- it is important part!
myText.selected = true; // <--- suprise! now you can select the text frame just like any other object
tempObj.remove(); // delete the temporary object
app.copy(); // var sh = app.copy();
*/
openURL('https://adobe.com/');
})
function openURL(url) {
var html = new File(Folder.temp.absoluteURI + '/aisLink.html');
html.open('w');
var htmlBody = '<html><head><META HTTP-EQUIV=Refresh CONTENT="0; URL=' + url + '"></head><body> <p></body></html>';
html.write(htmlBody);
html.close();
html.execute();
}
Copy link to clipboard
Copied
Ohhh and by the way…
that doesn't ssems to work neiter 😛
button2.graphics.font = ScriptUI.newFont ("Helvetica", "Bold", 11);
// button2.pointSize = 15;
// button2.text.font.size = "12pt";
Copy link to clipboard
Copied
If you need the onClick functionality for your button in a palette it's messy and requires using BridgeTalk (docs) but doable.
The first example below sends all the code you need to execute as a string through BridgeTalk to Illustrator allowing you to use a palette.
Credit to @Davide_Barranca for the idea.
/*
ButtonOnClickFromPalette.jsx for Adobe Illustrator
--------------------------------------------------
Execute a palette button onClick function via BridgeTalk.
Created in response to this question on the Adobe forum:
https://community.adobe.com/t5/illustrator-discussions/copy-a-string-to-clipboard-at-launch-via-javascript/td-p/13616550
This script is distributed under the MIT License.
See the LICENSE file for details.
Versions:
0.1.0 initial release
*/
var SWD = "SOME TEXT TO COPY";
var URL = "https://adobe.com/";
// the BridgeTalk Object
var bt = new BridgeTalk();
// the communication target
bt.target = "illustrator";
// The script to be executed as a String
var codeAsString =
"app.activeDocument.selection = null;" +
"\n" +
"var tempObj = app.activeDocument.pathItems.add();" +
"\n" +
"var myText = app.activeDocument.textFrames.add();" +
"\n" +
'myText.contents = "' +
SWD +
'";' +
"\n" +
"tempObj.selected = true;" +
"\n" +
"myText.selected = true;" +
"\n" +
"app.copy();" +
"\n" +
"tempObj.remove();" +
"\n" +
"myText.remove();" +
"\n" +
'var html = new File(Folder.temp.absoluteURI + "/aisLink.html");' +
"\n" +
'html.open("w");' +
"\n" +
"var htmlBody = " +
"\"<html><head><META HTTP-EQUIV=Refresh CONTENT='0; URL=" +
URL +
"'></head><body><p></body></html>\";" +
"\n" +
"html.write(htmlBody);" +
"\n" +
"html.close();" +
"\n" +
"html.execute();";
// assign to the object's body the message
bt.body = codeAsString;
// make your dialog (not palette)
var win = new Window("palette");
win.text = "DC TOOLS";
// make your button
var button = win.add("button", undefined, "PACK");
// add all the things you want done when button is clicked
button.onClick = function () {
// send the message to the target app
bt.send();
};
// show the dialog
win.show();
If you don't need the functionality of a palette you can do the same things much cleaner/easier just using a dialog like below.
var SWD = "SOME TEXT TO COPY";
// make your dialog (not palette)
var win = new Window("dialog");
win.text = "DC TOOLS";
// make your button
var button = win.add("button", undefined, "PACK");
// add all the things you want done when button is clicked
button.onClick = function () {
// clear the current selection
app.activeDocument.selection = null;
// add temp objects to hold text for copying
var tempObj = app.activeDocument.pathItems.add();
var myText = app.activeDocument.textFrames.add();
myText.contents = SWD;
tempObj.selected = true;
myText.selected = true;
// copy the text
app.copy();
// remove the two temp object made for copying
tempObj.remove();
myText.remove();
openURL("https://adobe.com/");
win.close();
};
// show the dialog
win.show();
function openURL(url) {
var html = new File(Folder.temp.absoluteURI + "/aisLink.html");
html.open("w");
var htmlBody =
'<html><head><META HTTP-EQUIV=Refresh CONTENT="0; URL=' +
url +
'"></head><body> <p></body></html>';
html.write(htmlBody);
html.close();
html.execute();
}
Copy link to clipboard
Copied
Hey jduncan 🙂
Many thx for your reply, your time and your talent…
Will definitively give it a try ASAP.
Enjoy your day.
- Dimitri