Hi @Frank1,
If I understand your goal correctly, you want the Stickies app to automatically appear when App A (e.g., Google Chrome) is active and be hidden when any other app takes focus. Here's how you can achieve this in BetterTouchTool (BTT) using "Trigger On Change Of Advanced Trigger Condition / BTT Variables."
Steps:
- Set up an advanced condition: Configure a condition to check if either Google Chrome or Stickies is the active app.
- Add actions:
- When the condition evaluates to
True
, use JavaScript for Automation (JXA) to make Stickies visible.
- When the condition evaluates to
False
, use JXA to hide Stickies.
JXA Scripts:
To show Stickies:
var systemEvents = Application('System Events');
systemEvents.applicationProcesses['Stickies'].visible = true;
To hide Stickies:
var systemEvents = Application('System Events');
systemEvents.applicationProcesses['Stickies'].visible = false;
Important Note:
This solution only works if the Sticky note(s) you want to show or hide are set to “Float on Top”. You can enable this setting by:
-
Selecting the Sticky note you want to modify.
-
Navigating to the menu bar and clicking Window > Float on Top.
Without this setting, the Stickies app might appear in the background but won’t consistently show the notes in front of other application windows.
Example Configuration:
You can copy and paste the JSON below into BTT to replicate my setup. It checks the active application name and runs the appropriate action based on whether the condition is True or False.
[
{
"BTTActionCategory" : 0,
"BTTLastUpdatedAt" : 1736801134.3442769,
"BTTTriggerConditionsFormatReadOnly" : "active_app_name == \"Google Chrome\" OR active_app_name == \"Stickies\"",
"BTTTriggerConditionsData" : "YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGvEBoLDBMZISssLzY6P0BDR0tQUVRcYGRpbG1wclUkbnVsbNMNDg8QERJfEBdOU0NvbXBvdW5kUHJlZGljYXRlVHlwZV8QD05TU3VicHJlZGljYXRlc1YkY2xhc3MQAoACgBnSFA8VGFpOUy5vYmplY3RzohYXgAOAFIAY1A8aGxwdHh8gXxARTlNSaWdodEV4cHJlc3Npb25fEBBOU0xlZnRFeHByZXNzaW9uXxATTlNQcmVkaWNhdGVPcGVyYXRvcoATgA6ABIAR1SIjJCUPJicoKSpZTlNPcGVyYW5kXk5TU2VsZWN0b3JOYW1lXxAQTlNFeHByZXNzaW9uVHlwZVtOU0FyZ3VtZW50c4AGgAUQA4AIgA1cdmFsdWVGb3JLZXk60iQPLS4QAYAH0jAxMjNaJGNsYXNzbmFtZVgkY2xhc3Nlc18QEE5TU2VsZkV4cHJlc3Npb26jMjQ1XE5TRXhwcmVzc2lvblhOU09iamVjdNIUDzc5oTiACYAM0w8kOzw9PllOU0tleVBhdGiACxAKgApfEA9hY3RpdmVfYXBwX25hbWXSMDFBQl8QHE5TS2V5UGF0aFNwZWNpZmllckV4cHJlc3Npb26jQTQ10jAxREVeTlNNdXRhYmxlQXJyYXmjREY1V05TQXJyYXnSMDFISV8QE05TS2V5UGF0aEV4cHJlc3Npb26kSEo0NV8QFE5TRnVuY3Rpb25FeHByZXNzaW9u00wkD01OT18QD05TQ29uc3RhbnRWYWx1ZYAPEACAEF1Hb29nbGUgQ2hyb21l0jAxUlNfEBlOU0NvbnN0YW50VmFsdWVFeHByZXNzaW9uo1I0NdUPVVZXWFlOWk5bWk5TTW9kaWZpZXJYTlNOZWdhdGVZTlNPcHRpb25zXk5TT3BlcmF0b3JUeXBlgBIIEATSMDFdXl8QG05TRXF1YWxpdHlQcmVkaWNhdGVPcGVyYXRvcqNdXzVfEBNOU1ByZWRpY2F0ZU9wZXJhdG9y0jAxYWJfEBVOU0NvbXBhcmlzb25QcmVkaWNhdGWjYWM1W05TUHJlZGljYXRl1A8aGxwdZh9ogBOAFYAEgBfTTCQPak5PgBaAEFhTdGlja2llc9UPVVZXWFlOWk5bgBII0jAxRnGiRjXSMDFzdF8QE05TQ29tcG91bmRQcmVkaWNhdGWjc2M1AAgAEQAaACQAKQAyADcASQBMAFEAUwBwAHYAfQCXAKkAsACyALQAtgC7AMYAyQDLAM0AzwDYAOwA_wEVARcBGQEbAR0BKAEyAUEBVAFgAWIBZAFmAWgBagF3AXwBfgGAAYUBkAGZAawBsAG9AcYBywHNAc8B0QHYAeIB5AHmAegB+gH_Ah4CIgInAjYCOgJCAkcCXQJiAnkCgAKSApQClgKYAqYCqwLHAssC1gLhAuoC9AMDAwUDBgMIAw0DKwMvA0UDSgNiA2YDcgN7A30DfwOBA4MDigOMA44DlwOiA6QDpQOqA60DsgPIAAAAAAAAAgEAAAAAAAAAdQAAAAAAAAAAAAAAAAAAA8w=",
"BTTTriggerType" : 797,
"BTTTriggerTypeDescriptionReadOnly" : "Trigger On Change Of Advanced Trigger Condition \/ BTT Variables",
"BTTTriggerClass" : "BTTTriggerTypeOtherTriggers",
"BTTUUID" : "B239D679-FD36-49D0-BD19-7AB99CE7ECA4",
"BTTPredefinedActionType" : 366,
"BTTPredefinedActionName" : "Empty Placeholder",
"BTTATCTriggerForInitialValue" : 1,
"BTTATCCheckInterval" : 1,
"BTTRepeatRate" : 1,
"BTTEnabled" : 1,
"BTTEnabled2" : 1,
"BTTOrder" : 35,
"BTTAdditionalActions" : [
{
"BTTActionCategory" : 7,
"BTTLastUpdatedAt" : 1736801225.1756439,
"BTTTriggerParentUUID" : "B239D679-FD36-49D0-BD19-7AB99CE7ECA4",
"BTTIsPureAction" : true,
"BTTTriggerClass" : "BTTTriggerTypeOtherTriggers",
"BTTUUID" : "239544B7-8289-4F88-A9AD-190FDC6AE85F",
"BTTPredefinedActionType" : 252,
"BTTPredefinedActionName" : "Run JavaScript for Automation (async in background)",
"BTTAdditionalActionData" : {
"BTTScriptType" : 1,
"BTTAppleScriptString" : "var systemEvents = Application('System Events');\nsystemEvents.applicationProcesses['Stickies'].visible = false;",
"BTTAppleScriptUsePath" : false,
"BTTAppleScriptRunInBackground" : true,
"SelectedAction" : 195,
"BTTScriptLocation" : 0
},
"BTTInlineAppleScript" : "var systemEvents = Application('System Events');\nsystemEvents.applicationProcesses['Stickies'].visible = false;",
"BTTEnabled" : 1,
"BTTEnabled2" : 1,
"BTTOrder" : 1
},
{
"BTTActionCategory" : 0,
"BTTLastUpdatedAt" : 1736801214.529562,
"BTTTriggerParentUUID" : "B239D679-FD36-49D0-BD19-7AB99CE7ECA4",
"BTTIsPureAction" : true,
"BTTTriggerClass" : "BTTTriggerTypeOtherTriggers",
"BTTUUID" : "C47972F5-919C-4EC9-A67B-FB50E484F550",
"BTTPredefinedActionType" : 252,
"BTTPredefinedActionName" : "Run JavaScript for Automation (async in background)",
"BTTAdditionalActionData" : {
"BTTScriptType" : 1,
"BTTAppleScriptString" : "var systemEvents = Application('System Events');\nsystemEvents.applicationProcesses['Stickies'].visible = true;",
"BTTAppleScriptUsePath" : false,
"BTTAppleScriptRunInBackground" : true,
"SelectedAction" : 195,
"BTTScriptLocation" : 0
},
"BTTInlineAppleScript" : "var systemEvents = Application('System Events');\nsystemEvents.applicationProcesses['Stickies'].visible = true;",
"BTTEnabled" : 1,
"BTTEnabled2" : 1,
"BTTOrder" : 694
}
]
}
]
This setup will ensure Stickies appears only when App A is active and hides when focus shifts elsewhere. Let me know if this works for you or if you encounter any issues!