• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

• Copy a string to clipboard (at launch) via javascript

Engaged ,
Feb 28, 2023 Feb 28, 2023

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…');

 

 

TOPICS
Scripting

Views

1.4K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Engaged , Mar 02, 2023 Mar 02, 2023

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

Votes

Translate

Translate
Adobe
Community Expert ,
Mar 01, 2023 Mar 01, 2023

Copy link to clipboard

Copied

app.system is not part of the Illustrator API, it's on the Photoshop API if that helps

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Mar 01, 2023 Mar 01, 2023

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…

 

 

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Mar 01, 2023 Mar 01, 2023

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

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Mar 01, 2023 Mar 01, 2023

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.

 

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 (docs)

 

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();

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Mar 01, 2023 Mar 01, 2023

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();
}

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Mar 02, 2023 Mar 02, 2023

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

 

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Mar 02, 2023 Mar 02, 2023

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();
}

 

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Mar 02, 2023 Mar 02, 2023

Copy link to clipboard

Copied

LATEST

Hey jduncan  🙂

 

Many thx for your reply, your time and your talent…

Will definitively give it a try ASAP.

 

Enjoy your day.

 

 

 

- Dimitri

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines