Peter, can you provide me with details about how KM executes an AppleScript?
If I have enough details, I'll go to some of the experts in the AppleScript community to see if there is a way to communicate KM instance variables to a Execute AppleScript. In the back of my mind there is something about passing parameters to a AppleScript script.
The first one ("KMVAR_Variable") is expected, but the second one ("KMVAR_Variable_") is not expected. (Note the trailing underscore of the second one.)
Furthermore: When I close and reopen the "Preferences: Variables" window I now see two instances of "Variable" in that window:
When I delete one of them both disappear and a new empty "Variable" variable is created.
Note:
I don't have any issues with the strange behavior of that "Variable" variable, I'm posting this just in case that behavior has something to do with the local variables not being sent to the environment.
I have changed 8.0.2, so any variable that starts with “Local” or “Instance” is a local or instance variable (no space required). So you can use space, underscore, double underscore, all of them will be Local/Instance.
It’s plausible this will mean some existing variables will become Local/Instance variables, but it should be a small enough change as to not be significantly impactful.
Yes, @peternlewis, if I look for example at the screenshots of my Retina Macros, which are exclusively using instance/local variables, honestly, I cannot say it is nice to have a five- or eight-letter prefix on each variable! It's clunky.
So, this time, I completely agree with @JMichaelTX.
As of 8.0.3, local and instance variables should work in Prompt For User Input and Custom HTML Input windows.
Also, you can now access them from scripts by using the KMINSTANCE environment variable as a key to which set of variables.
set inst to system attribute "KMINSTANCE"
tell application "Keyboard Maestro Engine"
set v to getvariable "LocalVar" instance inst
setvariable "LocalOut" instance inst to "FromAS"
end tell
v
This is huge.
I just confirmed it running Keyboard Maestro 8.0.3 (8.0.3) on macOS 10.11.6.
Also confirmed that running the same script outside of KM does NOT have access to the local/instance variable, which is proper.
##Macro Library Local & Instance Variable Test KM 8.0.3
####DOWNLOAD:
<a class="attachment" href="/uploads/default/original/2X/1/16c2ab380f0621511815e8339616f677fdce2740.kmmacros">Local & Instance Variable Test KM 8.0.3.kmmacros</a> (15 KB)
**Note: This Macro was uploaded in a DISABLED state. You must enable before it can be triggered.**
---
###ReleaseNotes
Author.@JMichaelTX
**PURPOSE:**
* **Demo The Use of Local & Instance Variables**
* Shows that multiple simultaneous executions (instances) of a macro keep both private to that instance.
* Changing a Variable in one instance does NOT affect the other instance
* The script run by each instance also sees the proper variable values
**REQUIRES:**
1. **KM 8.0.3+**
.
2. **macOS 10.11.6 (El Capitan)**
* KM 8 Requires Yosemite or later, so this macro will probably run on Yosemite, but I make no guarantees. :wink:
**NOTICE: This macro/script is for _TEST_ Purposes ONLY**
HOW TO USE:
1. Trigger the macro to start the _first_instance
2. Observe the variable values in each Display Window
3. Trigger the macro again to start the _second_ instance.
4. Observe the variable values in each Display Window
5. Press OPT-KeyPad1 to continue BOTH instances.
6. Observe the Script popup Dialog for BOTH
7. Click OK on BOTH dialogs
8. Observe the Display Windows for BOTH instances.
**MACRO SETUP**
* **Carefully review the Release Notes and the Macro Actions**
* Make sure you understand what the Macro will do.
* You are responsible for running the Macro, not me. 😉
.
* Assign a Trigger to this maro. I prefer TBD.
* Move this macro to a Macro Group that is only Active when you need this Macro.
* ENABLE this Macro.
.
TAGS: @KM8 @LocalVar @InstanceVar @Script
---
<img src="/uploads/default/original/2X/1/1bbe1b4b37debc5c25f70e0b664f63f677cb842c.png" width="478" height="1496">
@peternlewis, thanks again for giving us local and instance variables. Very, very useful.
Feature Request
I know you're going to shoot me for asking this, but I need to ask: Could you please provide a way of viewing local and instance variables while a macro is running?
One UI would be to allow them in the Pref > Variables panel.
Use Case: Would greatly aid in debugging a macro.
Without being able to see these variables as we step through the actions makes it very hard to identify the problem sometimes.
I'm sure you understand, since you have used many software debuggers over the years.
Actually it just hit me: Maybe a better UI would be to have a Variables panel in the KM Debugger, you know, like the Chrome JavaScript debugger:
####DOWNLOAD:
<a class="attachment" href="/uploads/default/original/2X/5/535ead5e89e0af65ad08addf4309b564e43a55ca.kmmacros">Get Local Variables in JXA Script.kmmacros</a> (3.1 KB)
**Note: This Macro was uploaded in a DISABLED state. You must enable before it can be triggered.**
---
<img src="/uploads/default/original/2X/0/04514eafd3fecd08b8b0b5f68b08793193cf8940.png" width="459" height="845">