I wrote a script to cycle window resizing through corners as a single hotkey. I initially wrote it in Javascript and used the text field in BTT to try to execute it, but it didn't work in either sync or async modes. However, if I ran it as an external file async, it does work. As per this issue to avoid memory leaks, I decided to run it as an Applescript as text instead (as opposed to executing a file), which works fine. I'm wondering if anyone can see an issue with the Javascript version as to why it wouldn't work, or maybe it's just a bug with the Javascript script runner in BTT.
Short version:
JS version works as file, not directly input to BTT. Applescript version works as file and direct input, using direct input to avoid memory leak.
Javascript version:
var BTT = Application("BetterTouchTool");
var currentCornerIndex = BTT.get_number_variable("currentCornerIndex") || 0;
var actionDefinition = {};
switch (currentCornerIndex) {
case 0:
actionDefinition = { "BTTPredefinedActionType" : 90 };
break;
case 1:
actionDefinition = { "BTTPredefinedActionType" : 92 };
break;
case 2:
actionDefinition = { "BTTPredefinedActionType" : 93 };
break;
case 3:
actionDefinition = { "BTTPredefinedActionType" : 91 };
break;
}
BTT.trigger_action(JSON.stringify(actionDefinition));
currentCornerIndex = (currentCornerIndex + 1) % 4;
BTT.set_number_variable("currentCornerIndex", {to: currentCornerIndex});
Applescript version:
tell application "BetterTouchTool"
set currentCornerIndex to get_number_variable "currentCornerIndex"
if currentCornerIndex is equal to missing value then
set currentCornerIndex to 0
end if
if (currentCornerIndex = 0) then
trigger_action "{\"BTTPredefinedActionType\":90}"
else if (currentCornerIndex = 1) then
trigger_action "{\"BTTPredefinedActionType\":92}"
else if (currentCornerIndex = 2) then
trigger_action "{\"BTTPredefinedActionType\":93}"
else if (currentCornerIndex = 3) then
trigger_action "{\"BTTPredefinedActionType\":91}"
end if
set currentCornerIndex to (currentCornerIndex + 1) mod 4
set_number_variable "currentCornerIndex" to currentCornerIndex
end tell