Created
December 29, 2021 14:23
-
-
Save JohnAtl/f372989ebb6239e834f10b7411d5863d to your computer and use it in GitHub Desktop.
Keyboard Maestro Window Mover macros that account for the menu bar
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
<plist version="1.0"> | |
<array> | |
<dict> | |
<key>Activate</key> | |
<string>OnceAfterTrigger</string> | |
<key>AddToMacroPalette</key> | |
<false/> | |
<key>AddToStatusMenu</key> | |
<false/> | |
<key>CreationDate</key> | |
<real>620338378.17791295</real> | |
<key>DisplayToggle</key> | |
<false/> | |
<key>KeyCode</key> | |
<integer>32767</integer> | |
<key>Macros</key> | |
<array> | |
<dict> | |
<key>Actions</key> | |
<array> | |
<dict> | |
<key>ActionUID</key> | |
<integer>102</integer> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>SetVariableToText</string> | |
<key>Text</key> | |
<string>%WindowFrame%Front%</string> | |
<key>Variable</key> | |
<string>W1</string> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>103</integer> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>SetVariableToText</string> | |
<key>Text</key> | |
<string>%ScreenVisible%Front%</string> | |
<key>Variable</key> | |
<string>S1</string> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>104</integer> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>SetVariableToText</string> | |
<key>Text</key> | |
<string>%ScreenVisible%Back%</string> | |
<key>Variable</key> | |
<string>S2</string> | |
</dict> | |
<dict> | |
<key>Action</key> | |
<string>MoveAndResize</string> | |
<key>ActionUID</key> | |
<integer>105</integer> | |
<key>HeightExpression</key> | |
<string>W1.height * S2.height / S1.height</string> | |
<key>HorizontalExpression</key> | |
<string>(W1.left - S1.left) * S2.width / S1.width + S2.left</string> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ManipulateWindow</string> | |
<key>TargetApplication</key> | |
<dict/> | |
<key>Targeting</key> | |
<string>FrontWindow</string> | |
<key>TargetingType</key> | |
<string>Front</string> | |
<key>VerticalExpression</key> | |
<string>(W1.top - S1.top) * S2.height / S1.height + S2.top</string> | |
<key>WidthExpression</key> | |
<string>W1.width * S2.width / S1.width</string> | |
<key>WindowIndexExpression</key> | |
<string>2</string> | |
<key>WindowName</key> | |
<string></string> | |
</dict> | |
</array> | |
<key>CreationDate</key> | |
<real>623953677.32074797</real> | |
<key>ModificationDate</key> | |
<real>662311957.38352394</real> | |
<key>Name</key> | |
<string>Other Display</string> | |
<key>Triggers</key> | |
<array> | |
<dict> | |
<key>FireType</key> | |
<string>Pressed</string> | |
<key>KeyCode</key> | |
<integer>31</integer> | |
<key>MacroTriggerType</key> | |
<string>HotKey</string> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
</dict> | |
</array> | |
<key>UID</key> | |
<string>0810F12B-9814-4F98-892B-CC4B5CB17612</string> | |
</dict> | |
</array> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
<key>Name</key> | |
<string>- 4 Window</string> | |
<key>PaletteUnderMouse</key> | |
<true/> | |
<key>ToggleMacroUID</key> | |
<string>67E24014-96C9-4D40-8378-310E3C1455DD</string> | |
<key>UID</key> | |
<string>61D3F3A3-4481-4C42-9B67-ABC89CB81DEF</string> | |
</dict> | |
<dict> | |
<key>Activate</key> | |
<string>OnceAfterTrigger</string> | |
<key>AddToMacroPalette</key> | |
<false/> | |
<key>AddToStatusMenu</key> | |
<false/> | |
<key>CreationDate</key> | |
<real>620338378.17791295</real> | |
<key>DisplayToggle</key> | |
<false/> | |
<key>KeyCode</key> | |
<integer>32767</integer> | |
<key>Macros</key> | |
<array> | |
<dict> | |
<key>Actions</key> | |
<array> | |
<dict> | |
<key>ActionUID</key> | |
<integer>97</integer> | |
<key>Asynchronously</key> | |
<false/> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ExecuteMacro</string> | |
<key>MacroUID</key> | |
<string>1F442C17-C707-4550-8B8A-88DC2C375946</string> | |
<key>TimeOutAbortsMacro</key> | |
<true/> | |
<key>UseParameter</key> | |
<false/> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>98</integer> | |
<key>DisplayKind</key> | |
<string>Variable</string> | |
<key>HonourFailureSettings</key> | |
<true/> | |
<key>IncludeStdErr</key> | |
<false/> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ExecuteShellScript</string> | |
<key>NotifyOnFailure</key> | |
<false/> | |
<key>Path</key> | |
<string></string> | |
<key>Source</key> | |
<string>Nothing</string> | |
<key>StopOnFailure</key> | |
<false/> | |
<key>Text</key> | |
<string>#!/usr/bin/env ruby | |
s = `echo $KMVAR_FB_WindowFramesList` | |
l = s.split(/\s/) | |
h = Hash[l.map { |e| e = e.split(':') }] | |
puts h['win_right']</string> | |
<key>TimeOutAbortsMacro</key> | |
<true/> | |
<key>TrimResults</key> | |
<true/> | |
<key>TrimResultsNew</key> | |
<true/> | |
<key>UseText</key> | |
<true/> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>99</integer> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>Comment</string> | |
<key>StyledText</key> | |
<data> | |
cnRmZAAAAAADAAAAAgAAAAcAAABU | |
WFQucnRmAQAAAC6VAwAAKwAAAAEA | |
AACNAwAAe1xydGYxXGFuc2lcYW5z | |
aWNwZzEyNTJcY29jb2FydGYyNTgw | |
Clxjb2NvYXRleHRzY2FsaW5nMFxj | |
b2NvYXBsYXRmb3JtMHtcZm9udHRi | |
bFxmMFxmc3dpc3NcZmNoYXJzZXQw | |
IEhlbHZldGljYTt9CntcY29sb3J0 | |
Ymw7XHJlZDI1NVxncmVlbjI1NVxi | |
bHVlMjU1O30Ke1wqXGV4cGFuZGVk | |
Y29sb3J0Ymw7O30KXHBhcmRcdHg1 | |
NjBcdHgxMTIwXHR4MTY4MFx0eDIy | |
NDBcdHgyODAwXHR4MzM2MFx0eDM5 | |
MjBcdHg0NDgwXHR4NTA0MFx0eDU2 | |
MDBcdHg2MTYwXHR4NjcyMFxwYXJk | |
aXJuYXR1cmFsXHBhcnRpZ2h0ZW5m | |
YWN0b3IwCgpcZjBcZnMyNCBcY2Yw | |
IGJ1dCB5b3UgbWF5IG5vdCBuZWVk | |
IGl0LiBJIGhhdmUgdHdvIG1vbml0 | |
b3JzLiBUaGUgc2Vjb25kIG1vbml0 | |
b3IgaXMgc21hbGxlciB0aGFuIHRo | |
ZSBtYWluIG9uZSBhbmQgaXMgcG9z | |
aXRpb25lZCB0byB0aGUgcmlnaHQu | |
XApUaGVzZSB0d28gZmFjdHMgbWVh | |
biB0aGF0IGlmIGEgd2luZG93IGlz | |
IHRha2luZyB1cCBhIGxvdCBvZiB0 | |
aGUgbWFpbiBzY3JlZW4sIGFuZCBJ | |
IG1vdmUgaXQgdXNpbmcgJ1dpbmRv | |
dyBSaWdodCcgb250byB0aGUgc21h | |
bGxlciwgcmlnaHQtaGFuZCBzY3Jl | |
ZW4sIGl0IGVuZHMgdXAgYXMgdGhl | |
IHdyb25nIHNpemUsIHVubGVzcyBp | |
dCBpcyBzaHJ1bmsgYmVmb3JlIG1v | |
dmluZy5cClRoZSBwcm9ibGVtIGRv | |
ZXMgbm90IGV4aXN0IGZvciBtb3Zp | |
bmcgbGVmdHdhcmRzIG9udG8gYSBz | |
bWFsbGVyIHNjcmVlbiwgZHVlIHRv | |
IHRoZSBuYXR1cmUgb2YgdGhlIHdp | |
bmRvdyBmcmFtZXMuXApUaGUgc2hy | |
aW5raW5nIHNsb3dzIHRoZSBtYWNy | |
byBkb3duIGV2ZXItc28tc2xpZ2h0 | |
bHksIGFuZCBpcyB2aXNpYmxlLCBz | |
byBpZiB5b3UgZG9uJ3QgdXNlIGEg | |
c2Vjb25kIHNjcmVlbiB5b3UgbWF5 | |
IHdhbnQgdG8gZGVsZXRlIHRoZSBh | |
Y3Rpb24gaGVyZS59AQAAACMAAAAB | |
AAAABwAAAFRYVC5ydGYQAAAAk9KT | |
YbYBAAAAAAAAAAAAAA== | |
</data> | |
<key>Title</key> | |
<string>The resize to 200 x 600 below has a reason…</string> | |
</dict> | |
<dict> | |
<key>Action</key> | |
<string>ResizeWindowTo</string> | |
<key>ActionUID</key> | |
<integer>100</integer> | |
<key>HeightExpression</key> | |
<string>300</string> | |
<key>HorizontalExpression</key> | |
<string>200</string> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ManipulateWindow</string> | |
<key>TargetApplication</key> | |
<dict/> | |
<key>Targeting</key> | |
<string>FrontWindow</string> | |
<key>TargetingType</key> | |
<string>Front</string> | |
<key>VerticalExpression</key> | |
<string>600</string> | |
<key>WidthExpression</key> | |
<string>300</string> | |
<key>WindowIndexExpression</key> | |
<string>2</string> | |
<key>WindowName</key> | |
<string></string> | |
</dict> | |
<dict> | |
<key>Action</key> | |
<string>SetWindowFrame</string> | |
<key>ActionUID</key> | |
<integer>101</integer> | |
<key>MacroActionType</key> | |
<string>UseVariable</string> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
</array> | |
<key>CreationDate</key> | |
<real>620338684.51483405</real> | |
<key>ModificationDate</key> | |
<real>662311817.22346997</real> | |
<key>Name</key> | |
<string>Window Right</string> | |
<key>Triggers</key> | |
<array> | |
<dict> | |
<key>FireType</key> | |
<string>Pressed</string> | |
<key>KeyCode</key> | |
<integer>15</integer> | |
<key>MacroTriggerType</key> | |
<string>HotKey</string> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
</dict> | |
</array> | |
<key>UID</key> | |
<string>4513331A-FCAC-473C-840C-98BF763B0D73</string> | |
</dict> | |
</array> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
<key>Name</key> | |
<string>- 4 Window</string> | |
<key>PaletteUnderMouse</key> | |
<true/> | |
<key>ToggleMacroUID</key> | |
<string>67E24014-96C9-4D40-8378-310E3C1455DD</string> | |
<key>UID</key> | |
<string>61D3F3A3-4481-4C42-9B67-ABC89CB81DEF</string> | |
</dict> | |
<dict> | |
<key>Activate</key> | |
<string>OnceAfterTrigger</string> | |
<key>AddToMacroPalette</key> | |
<false/> | |
<key>AddToStatusMenu</key> | |
<false/> | |
<key>CreationDate</key> | |
<real>620338378.17791295</real> | |
<key>DisplayToggle</key> | |
<false/> | |
<key>KeyCode</key> | |
<integer>32767</integer> | |
<key>Macros</key> | |
<array> | |
<dict> | |
<key>Actions</key> | |
<array> | |
<dict> | |
<key>ActionUID</key> | |
<integer>93</integer> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>SetVariableToText</string> | |
<key>Text</key> | |
<string>%FrontWindowFrame%</string> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>94</integer> | |
<key>Asynchronously</key> | |
<false/> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ExecuteMacro</string> | |
<key>MacroUID</key> | |
<string>1F442C17-C707-4550-8B8A-88DC2C375946</string> | |
<key>TimeOutAbortsMacro</key> | |
<true/> | |
<key>UseParameter</key> | |
<false/> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>95</integer> | |
<key>DisplayKind</key> | |
<string>Variable</string> | |
<key>HonourFailureSettings</key> | |
<true/> | |
<key>IncludeStdErr</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ExecuteShellScript</string> | |
<key>NotifyOnFailure</key> | |
<false/> | |
<key>Path</key> | |
<string></string> | |
<key>Source</key> | |
<string>Nothing</string> | |
<key>StopOnFailure</key> | |
<false/> | |
<key>Text</key> | |
<string>#!/usr/bin/env ruby | |
s = `echo $KMVAR_FB_WindowFramesList` | |
l = s.split(/\s/) | |
h = Hash[l.map { |e| e = e.split(':') }] | |
puts h['win_max']</string> | |
<key>TimeOutAbortsMacro</key> | |
<true/> | |
<key>TrimResults</key> | |
<true/> | |
<key>TrimResultsNew</key> | |
<true/> | |
<key>UseText</key> | |
<true/> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
<dict> | |
<key>Action</key> | |
<string>SetWindowFrame</string> | |
<key>ActionUID</key> | |
<integer>96</integer> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>UseVariable</string> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
</array> | |
<key>CreationDate</key> | |
<real>620338684.51483297</real> | |
<key>ModificationDate</key> | |
<real>662311804.14367795</real> | |
<key>Name</key> | |
<string>Window Maximise</string> | |
<key>Triggers</key> | |
<array> | |
<dict> | |
<key>FireType</key> | |
<string>Pressed</string> | |
<key>KeyCode</key> | |
<integer>20</integer> | |
<key>MacroTriggerType</key> | |
<string>HotKey</string> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
</dict> | |
</array> | |
<key>UID</key> | |
<string>DBA64D22-951E-48DB-B93B-403222E3BF65</string> | |
</dict> | |
</array> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
<key>Name</key> | |
<string>- 4 Window</string> | |
<key>PaletteUnderMouse</key> | |
<true/> | |
<key>ToggleMacroUID</key> | |
<string>67E24014-96C9-4D40-8378-310E3C1455DD</string> | |
<key>UID</key> | |
<string>61D3F3A3-4481-4C42-9B67-ABC89CB81DEF</string> | |
</dict> | |
<dict> | |
<key>Activate</key> | |
<string>OnceAfterTrigger</string> | |
<key>AddToMacroPalette</key> | |
<false/> | |
<key>AddToStatusMenu</key> | |
<false/> | |
<key>CreationDate</key> | |
<real>620338378.17791295</real> | |
<key>DisplayToggle</key> | |
<false/> | |
<key>KeyCode</key> | |
<integer>32767</integer> | |
<key>Macros</key> | |
<array> | |
<dict> | |
<key>Actions</key> | |
<array> | |
<dict> | |
<key>ActionUID</key> | |
<integer>77</integer> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>SetVariableToText</string> | |
<key>Text</key> | |
<string>%FrontWindowFrame%</string> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>78</integer> | |
<key>Asynchronously</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ExecuteMacro</string> | |
<key>MacroUID</key> | |
<string>1F442C17-C707-4550-8B8A-88DC2C375946</string> | |
<key>TimeOutAbortsMacro</key> | |
<true/> | |
<key>UseParameter</key> | |
<false/> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>79</integer> | |
<key>DisplayKind</key> | |
<string>Variable</string> | |
<key>HonourFailureSettings</key> | |
<true/> | |
<key>IncludeStdErr</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ExecuteShellScript</string> | |
<key>NotifyOnFailure</key> | |
<false/> | |
<key>Path</key> | |
<string></string> | |
<key>Source</key> | |
<string>Nothing</string> | |
<key>StopOnFailure</key> | |
<false/> | |
<key>Text</key> | |
<string>#!/usr/bin/env ruby | |
s = `echo $KMVAR_FB_WindowFramesList` | |
l = s.split(/\s/) | |
h = Hash[l.map { |e| e = e.split(':') }] | |
puts h['win_r2']</string> | |
<key>TimeOutAbortsMacro</key> | |
<true/> | |
<key>TrimResults</key> | |
<true/> | |
<key>TrimResultsNew</key> | |
<true/> | |
<key>UseText</key> | |
<true/> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
<dict> | |
<key>Action</key> | |
<string>ResizeWindowTo</string> | |
<key>ActionUID</key> | |
<integer>80</integer> | |
<key>HeightExpression</key> | |
<string>300</string> | |
<key>HorizontalExpression</key> | |
<string>200</string> | |
<key>MacroActionType</key> | |
<string>ManipulateWindow</string> | |
<key>TargetApplication</key> | |
<dict/> | |
<key>Targeting</key> | |
<string>FrontWindow</string> | |
<key>TargetingType</key> | |
<string>Front</string> | |
<key>VerticalExpression</key> | |
<string>600</string> | |
<key>WidthExpression</key> | |
<string>300</string> | |
<key>WindowIndexExpression</key> | |
<string>2</string> | |
<key>WindowName</key> | |
<string></string> | |
</dict> | |
<dict> | |
<key>Action</key> | |
<string>SetWindowFrame</string> | |
<key>ActionUID</key> | |
<integer>81</integer> | |
<key>MacroActionType</key> | |
<string>UseVariable</string> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
</array> | |
<key>CreationDate</key> | |
<real>620338684.51483202</real> | |
<key>ModificationDate</key> | |
<real>662315039.39794099</real> | |
<key>Name</key> | |
<string>Right 33%</string> | |
<key>Triggers</key> | |
<array> | |
<dict> | |
<key>FireType</key> | |
<string>Pressed</string> | |
<key>KeyCode</key> | |
<integer>29</integer> | |
<key>MacroTriggerType</key> | |
<string>HotKey</string> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
</dict> | |
</array> | |
<key>UID</key> | |
<string>7DC65E3C-A319-40EF-AD4E-39DF2B670B5C</string> | |
</dict> | |
</array> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
<key>Name</key> | |
<string>- 4 Window</string> | |
<key>PaletteUnderMouse</key> | |
<true/> | |
<key>ToggleMacroUID</key> | |
<string>67E24014-96C9-4D40-8378-310E3C1455DD</string> | |
<key>UID</key> | |
<string>61D3F3A3-4481-4C42-9B67-ABC89CB81DEF</string> | |
</dict> | |
<dict> | |
<key>Activate</key> | |
<string>OnceAfterTrigger</string> | |
<key>AddToMacroPalette</key> | |
<false/> | |
<key>AddToStatusMenu</key> | |
<false/> | |
<key>CreationDate</key> | |
<real>620338378.17791295</real> | |
<key>DisplayToggle</key> | |
<false/> | |
<key>KeyCode</key> | |
<integer>32767</integer> | |
<key>Macros</key> | |
<array> | |
<dict> | |
<key>Actions</key> | |
<array> | |
<dict> | |
<key>ActionUID</key> | |
<integer>90</integer> | |
<key>Asynchronously</key> | |
<false/> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ExecuteMacro</string> | |
<key>MacroUID</key> | |
<string>1F442C17-C707-4550-8B8A-88DC2C375946</string> | |
<key>TimeOutAbortsMacro</key> | |
<true/> | |
<key>UseParameter</key> | |
<false/> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>91</integer> | |
<key>DisplayKind</key> | |
<string>Variable</string> | |
<key>HonourFailureSettings</key> | |
<true/> | |
<key>IncludeStdErr</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ExecuteShellScript</string> | |
<key>NotifyOnFailure</key> | |
<false/> | |
<key>Path</key> | |
<string></string> | |
<key>Source</key> | |
<string>Nothing</string> | |
<key>StopOnFailure</key> | |
<false/> | |
<key>Text</key> | |
<string>#!/usr/bin/env ruby | |
s = `echo $KMVAR_FB_WindowFramesList` | |
l = s.split(/\s/) | |
h = Hash[l.map { |e| e = e.split(':') }] | |
puts h['win_left']</string> | |
<key>TimeOutAbortsMacro</key> | |
<true/> | |
<key>TrimResults</key> | |
<true/> | |
<key>TrimResultsNew</key> | |
<true/> | |
<key>UseText</key> | |
<true/> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
<dict> | |
<key>Action</key> | |
<string>SetWindowFrame</string> | |
<key>ActionUID</key> | |
<integer>92</integer> | |
<key>MacroActionType</key> | |
<string>UseVariable</string> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
</array> | |
<key>CreationDate</key> | |
<real>620338684.51483202</real> | |
<key>ModificationDate</key> | |
<real>662311833.87092197</real> | |
<key>Name</key> | |
<string>Window Left</string> | |
<key>Triggers</key> | |
<array> | |
<dict> | |
<key>FireType</key> | |
<string>Pressed</string> | |
<key>KeyCode</key> | |
<integer>37</integer> | |
<key>MacroTriggerType</key> | |
<string>HotKey</string> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
</dict> | |
</array> | |
<key>UID</key> | |
<string>4BC7FF77-5605-4573-9EB8-C47006B8C252</string> | |
</dict> | |
</array> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
<key>Name</key> | |
<string>- 4 Window</string> | |
<key>PaletteUnderMouse</key> | |
<true/> | |
<key>ToggleMacroUID</key> | |
<string>67E24014-96C9-4D40-8378-310E3C1455DD</string> | |
<key>UID</key> | |
<string>61D3F3A3-4481-4C42-9B67-ABC89CB81DEF</string> | |
</dict> | |
<dict> | |
<key>Activate</key> | |
<string>OnceAfterTrigger</string> | |
<key>AddToMacroPalette</key> | |
<false/> | |
<key>AddToStatusMenu</key> | |
<false/> | |
<key>CreationDate</key> | |
<real>620338378.17791295</real> | |
<key>DisplayToggle</key> | |
<false/> | |
<key>KeyCode</key> | |
<integer>32767</integer> | |
<key>Macros</key> | |
<array> | |
<dict> | |
<key>Actions</key> | |
<array> | |
<dict> | |
<key>ActionUID</key> | |
<integer>73</integer> | |
<key>MacroActionType</key> | |
<string>SetVariableToText</string> | |
<key>Text</key> | |
<string>%FrontWindowFrame%</string> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>74</integer> | |
<key>Asynchronously</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ExecuteMacro</string> | |
<key>MacroUID</key> | |
<string>1F442C17-C707-4550-8B8A-88DC2C375946</string> | |
<key>TimeOutAbortsMacro</key> | |
<true/> | |
<key>UseParameter</key> | |
<false/> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>75</integer> | |
<key>DisplayKind</key> | |
<string>Variable</string> | |
<key>HonourFailureSettings</key> | |
<true/> | |
<key>IncludeStdErr</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ExecuteShellScript</string> | |
<key>NotifyOnFailure</key> | |
<false/> | |
<key>Path</key> | |
<string></string> | |
<key>Source</key> | |
<string>Nothing</string> | |
<key>StopOnFailure</key> | |
<false/> | |
<key>Text</key> | |
<string>#!/usr/bin/env ruby | |
s = `echo $KMVAR_FB_WindowFramesList` | |
l = s.split(/\s/) | |
h = Hash[l.map { |e| e = e.split(':') }] | |
puts h['win_l1']</string> | |
<key>TimeOutAbortsMacro</key> | |
<true/> | |
<key>TrimResults</key> | |
<true/> | |
<key>TrimResultsNew</key> | |
<true/> | |
<key>UseText</key> | |
<true/> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
<dict> | |
<key>Action</key> | |
<string>SetWindowFrame</string> | |
<key>ActionUID</key> | |
<integer>76</integer> | |
<key>MacroActionType</key> | |
<string>UseVariable</string> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
</array> | |
<key>CreationDate</key> | |
<real>620338684.51483405</real> | |
<key>ModificationDate</key> | |
<real>662315108.18633103</real> | |
<key>Name</key> | |
<string>Left 66%</string> | |
<key>Triggers</key> | |
<array> | |
<dict> | |
<key>FireType</key> | |
<string>Pressed</string> | |
<key>KeyCode</key> | |
<integer>19</integer> | |
<key>MacroTriggerType</key> | |
<string>HotKey</string> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
</dict> | |
</array> | |
<key>UID</key> | |
<string>380BF34A-4CFC-4370-B53D-A4170BB0A213</string> | |
</dict> | |
</array> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
<key>Name</key> | |
<string>- 4 Window</string> | |
<key>PaletteUnderMouse</key> | |
<true/> | |
<key>ToggleMacroUID</key> | |
<string>67E24014-96C9-4D40-8378-310E3C1455DD</string> | |
<key>UID</key> | |
<string>61D3F3A3-4481-4C42-9B67-ABC89CB81DEF</string> | |
</dict> | |
<dict> | |
<key>Activate</key> | |
<string>OnceAfterTrigger</string> | |
<key>AddToMacroPalette</key> | |
<false/> | |
<key>AddToStatusMenu</key> | |
<false/> | |
<key>CreationDate</key> | |
<real>620338378.17791295</real> | |
<key>DisplayToggle</key> | |
<false/> | |
<key>KeyCode</key> | |
<integer>32767</integer> | |
<key>Macros</key> | |
<array> | |
<dict> | |
<key>Actions</key> | |
<array> | |
<dict> | |
<key>ActionUID</key> | |
<integer>87</integer> | |
<key>MacroActionType</key> | |
<string>SetVariableToText</string> | |
<key>Text</key> | |
<string>%Screen%1%</string> | |
<key>Variable</key> | |
<string>FB_Monitor0Frame</string> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>56048</integer> | |
<key>Delete</key> | |
<true/> | |
<key>Destination</key> | |
<string>Variable</string> | |
<key>DestinationVariable</key> | |
<string>FB_Monitor0WH</string> | |
<key>First</key> | |
<string>1</string> | |
<key>MacroActionType</key> | |
<string>Substring</string> | |
<key>Second</key> | |
<string>4</string> | |
<key>Source</key> | |
<string>Variable</string> | |
<key>StringRangeType</key> | |
<string>Range</string> | |
<key>Variable</key> | |
<string>FB_Monitor0Frame</string> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>56049</integer> | |
<key>MacroActionType</key> | |
<string>SetVariableToText</string> | |
<key>Text</key> | |
<string>0,24,%Variable%FB_Monitor0WH%</string> | |
<key>Variable</key> | |
<string>FB_Monitor0Frame</string> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>88</integer> | |
<key>MacroActionType</key> | |
<string>SetVariableToText</string> | |
<key>Text</key> | |
<string>%Screen%2%</string> | |
<key>Variable</key> | |
<string>FB_Monitor1Frame</string> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>56050</integer> | |
<key>Delete</key> | |
<true/> | |
<key>Destination</key> | |
<string>Variable</string> | |
<key>DestinationVariable</key> | |
<string>FB_Monitor1WH</string> | |
<key>First</key> | |
<string>1</string> | |
<key>MacroActionType</key> | |
<string>Substring</string> | |
<key>Second</key> | |
<string>8</string> | |
<key>Source</key> | |
<string>Variable</string> | |
<key>StringRangeType</key> | |
<string>Range</string> | |
<key>Variable</key> | |
<string>FB_Monitor1Frame</string> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>56052</integer> | |
<key>Delete</key> | |
<false/> | |
<key>Destination</key> | |
<string>Variable</string> | |
<key>DestinationVariable</key> | |
<string>FB_Monitor1X</string> | |
<key>First</key> | |
<string>1</string> | |
<key>MacroActionType</key> | |
<string>Substring</string> | |
<key>Second</key> | |
<string>4</string> | |
<key>Source</key> | |
<string>Variable</string> | |
<key>StringRangeType</key> | |
<string>Range</string> | |
<key>Variable</key> | |
<string>FB_Monitor1Frame</string> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>56051</integer> | |
<key>MacroActionType</key> | |
<string>SetVariableToText</string> | |
<key>Text</key> | |
<string>%Variable%FB_Monitor1X%,24,%Variable%FB_Monitor1WH%</string> | |
<key>Variable</key> | |
<string>FB_Monitor1Frame</string> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>89</integer> | |
<key>DisplayKind</key> | |
<string>Variable</string> | |
<key>HonourFailureSettings</key> | |
<true/> | |
<key>IncludeStdErr</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ExecuteShellScript</string> | |
<key>NotifyOnFailure</key> | |
<false/> | |
<key>Path</key> | |
<string></string> | |
<key>Source</key> | |
<string>Nothing</string> | |
<key>StopOnFailure</key> | |
<false/> | |
<key>Text</key> | |
<string>#!/usr/bin/env ruby | |
require 'rational' | |
def main | |
window_mover = WindowMover.new | |
puts window_mover.setup_frame_list | |
end | |
class WindowMover | |
# A class to control the front window of the front application. The window and monitor details are fetched through Keyboard Maestro. | |
def initialize | |
# Set up the properties holding the monitor and current frame information. | |
$keys = ["x", "y", "w", "h"] | |
@monitor0_frame = get_kbm_var( "FB_Monitor0Frame" ) | |
@monitor1_frame = get_kbm_var( "FB_Monitor1Frame" ) | |
@current_frame = get_kbm_var( "FB_FrontWindowFrame" ) | |
@monitor0_halves = get_halves( @monitor0_frame ) | |
if @monitor1_frame | |
@monitor1_halves = get_halves( @monitor1_frame ) | |
if @monitor1_frame["x"] < @monitor0_frame["x"] | |
@monitor1_side = :left | |
else | |
@monitor1_side = :right | |
end | |
@current_frame_loc = check_loc() | |
else | |
@current_frame_loc = 0 | |
end | |
@current_monitor = [@monitor0_frame, @monitor1_frame][@current_frame_loc] | |
end | |
def setup_frame_list | |
# This makes a list of string values, one for each potential new frame value. | |
# The idea is that this whole script is held in one macro in Keyboard Maestro, | |
# and is called by every Window Mover macro. This list below is stored in a | |
# KBM variable, then the individual macros parse what they want from that variable. | |
['win_left:' + move_left, | |
'win_right:' + move_right, | |
'win_up:' + split_up, | |
'win_down:' + split_down, | |
'win_l1:' + get_thirds(:l1), | |
'win_l2:' + get_thirds(:l2), | |
'win_r1:' + get_thirds(:r1), | |
'win_r2:' + get_thirds(:r2), | |
'win_max:' + make_string( @current_monitor )] | |
end | |
def split_up | |
new_frame = @current_frame.dup | |
new_frame['h'] /= 2 | |
make_string(new_frame) | |
end | |
def split_down | |
new_frame = @current_frame.dup | |
new_frame['h'] /= 2 | |
new_frame['y'] += new_frame['h'] | |
make_string(new_frame) | |
end | |
def make_string( hash ) | |
# Takes a hash and joins the necessary parts into a string to return a frame. | |
# eg. make_string( {"x" => 0, "y" => 0, "w" => 200, "h" => 300, "m" => 100} ) # => "0,0,200,300" | |
arr = [] | |
arr << hash["x"] | |
arr << hash["y"] | |
arr << hash["w"] | |
arr << hash["h"] | |
arr.join(",") | |
end | |
def get_halves( monitor ) | |
# Takes a monitor of a monitor's frame and calculates and sets up | |
# some new monitors that hold dimensions for frames that take up | |
# half of the monitor - left and right, split vertically. | |
# These are supplied to Keyboard Maestro later as comma-separated | |
# strings. | |
# Duplicate the received monitor twice, for left and right. | |
left = monitor.dup | |
right = monitor.dup | |
left = add_midpoint( left ) | |
right = add_midpoint( right ) | |
left_of_monitor1 = ( monitor["x"] < 0 ) | |
if left_of_monitor1 | |
######### left half ########## | |
left["w"] = (left["x"] / 2).abs | |
midpoint = left["x"] + (left["w"] / 2) | |
left["m"] = midpoint | |
######### right half ######### | |
right["x"] = right["x"] / 2 | |
right["w"] = left["w"] | |
right = add_midpoint( right ) | |
left_of_monitor1 | |
else | |
# this means it is not left_of_monitor1 | |
######### left half ######### | |
if monitor["x"] == 0 | |
left["w"] = (left["w"] / 2).abs | |
else | |
left["w"] = (left["w"] / 2) | |
end | |
midpoint = left["x"] + (left["w"] / 2) | |
left["m"] = midpoint | |
######### right half ######### | |
right["w"] = left["w"] | |
if monitor["x"] == 0 | |
right["x"] = left["w"] | |
midpoint = right["x"] + (right["w"] / 2) | |
right["m"] = midpoint | |
else | |
right["x"] = right["w"] + right["x"] | |
midpoint = right["x"] + (right["w"] / 2) | |
right["m"] = midpoint | |
end | |
end | |
# Return a hash of the two hashes. | |
{"right" => right, "left" => left} | |
end | |
def get_thirds( type_of_third ) | |
# Returns a frame string for Keyboard Maestro depending on the type_of_third specified. | |
# type_of_third can be: | |
# :l1 => left %66 | |
# :l2 => left %33 | |
# :r1 => right %66 | |
# :r2 => right %33 | |
result = Hash.new | |
@current_monitor | |
l1_width = (@current_monitor['w'] * 0.666666666666666).to_i | |
l2_width = (@current_monitor['w'] - l1_width) | |
r1_width = (@current_monitor['w'] * 0.666666666666666).to_i | |
r2_width = (@current_monitor['w'] - r1_width) | |
r1_x = @current_monitor['x'] + (r2_width) | |
r2_x = @current_monitor['x'] + (r1_width) | |
l1 = @current_monitor.dup | |
l1['w'] =l1_width | |
l2 = @current_monitor.dup | |
l2['w'] = l2_width | |
r1 = @current_monitor.dup | |
r1['w'] =r1_width | |
r1['x'] = r1_x | |
r2 = @current_monitor.dup | |
r2['w'] = r2_width | |
r2['x'] = r2_x | |
result[:l1] = l1 | |
result[:l2] = l2 | |
result[:r1] = r1 | |
result[:r2] = r2 | |
make_string(result[type_of_third]) | |
end | |
def check_loc | |
# This checks which monitor the current window is on. | |
# If there is only one window, @monitor1_side is nil. | |
if @monitor1_side == :left | |
if add_midpoint(@current_frame)["m"] < @monitor0_frame["x"] | |
1 # Second monitor | |
else | |
0 # First monitor | |
end | |
else # Either :right or nil. | |
if add_midpoint(@current_frame)["m"] > @monitor0_frame["w"] | |
1 # Second monitor | |
else | |
0 # First monitor | |
end | |
end | |
end | |
def move_left | |
make_string( move_window( false ) ) | |
end | |
def move_right | |
make_string( move_window( true ) ) | |
end | |
def move_window( go_right ) | |
# The go_right variable is true or false, false meaning go_left. | |
if @current_frame_loc == 0 # First monitor | |
temp = @monitor0_halves[ (go_right ? "right" : "left") ].dup | |
temp["y"] = 22 # temp accounts for the 22 pixels in the menu bar. | |
temp["h"] = temp["h"] - 26 # Not sure why the height is 4px less than the y position. | |
#p @current_frame.sort | |
#p @monitor0_halves[ (go_right ? "right" : "left") ].sort | |
if @current_frame.sort == @monitor0_halves[ (go_right ? "right" : "left") ].sort || | |
@current_frame.sort == temp.sort | |
if @monitor1_frame # Second monitor exists. | |
return @monitor1_halves[ (go_right ? "left" : "right") ] | |
else # Just 1 monitor | |
return @monitor0_halves[ (go_right ? "left" : "right") ] | |
end | |
else | |
return @monitor0_halves[ (go_right ? "right" : "left") ] | |
end | |
else # Second monitor | |
if @current_frame.sort == @monitor1_halves[ (go_right ? "right" : "left") ].sort | |
return @monitor0_halves[ (go_right ? "left" : "right") ] | |
else | |
return @monitor1_halves[ (go_right ? "right" : "left") ] | |
end | |
end | |
end | |
def get_kbm_var( var_name ) | |
# Return the string held by Keyboard Maestro in the variable var_name. | |
var = `osascript -e 'tell application "Keyboard Maestro Engine" | |
set val to value of (make variable with properties {name:"#{var_name}"}) | |
val | |
end tell'`.split(",") | |
var = var.map { |e| e.to_i } | |
if var.inject { |sum, n| sum + n } == 0 | |
# This means that KBM has returned "0,0,0,0", which means that Second monitor does not exit. | |
false | |
else | |
var = Hash[*$keys.zip(var).flatten] # Makes a hash of the array. | |
var | |
end | |
end | |
def add_midpoint( frame ) | |
# This accepts a hash of a frame and adds a new key, value | |
# pair to hold the frame's horizontal midpoint. | |
if frame["x"] < 0 | |
midpoint = frame["x"] + (frame["w"] / 2).abs | |
else | |
midpoint = (frame["w"] / 2) + frame["x"] | |
end | |
frame["m"] = midpoint | |
frame | |
end | |
end | |
main()</string> | |
<key>TimeOutAbortsMacro</key> | |
<true/> | |
<key>TrimResults</key> | |
<true/> | |
<key>TrimResultsNew</key> | |
<true/> | |
<key>UseText</key> | |
<true/> | |
<key>Variable</key> | |
<string>FB_WindowFramesList</string> | |
</dict> | |
</array> | |
<key>CreationDate</key> | |
<real>620338684.51483405</real> | |
<key>ModificationDate</key> | |
<real>662480465.29812801</real> | |
<key>Name</key> | |
<string>Setup Frames</string> | |
<key>Triggers</key> | |
<array/> | |
<key>UID</key> | |
<string>1F442C17-C707-4550-8B8A-88DC2C375946</string> | |
</dict> | |
</array> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
<key>Name</key> | |
<string>- 4 Window</string> | |
<key>PaletteUnderMouse</key> | |
<true/> | |
<key>ToggleMacroUID</key> | |
<string>67E24014-96C9-4D40-8378-310E3C1455DD</string> | |
<key>UID</key> | |
<string>61D3F3A3-4481-4C42-9B67-ABC89CB81DEF</string> | |
</dict> | |
<dict> | |
<key>Activate</key> | |
<string>OnceAfterTrigger</string> | |
<key>AddToMacroPalette</key> | |
<false/> | |
<key>AddToStatusMenu</key> | |
<false/> | |
<key>CreationDate</key> | |
<real>620338378.17791295</real> | |
<key>DisplayToggle</key> | |
<false/> | |
<key>KeyCode</key> | |
<integer>32767</integer> | |
<key>Macros</key> | |
<array> | |
<dict> | |
<key>Actions</key> | |
<array> | |
<dict> | |
<key>ActionUID</key> | |
<integer>82</integer> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>SetVariableToText</string> | |
<key>Text</key> | |
<string>%FrontWindowFrame%</string> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>83</integer> | |
<key>Asynchronously</key> | |
<false/> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ExecuteMacro</string> | |
<key>MacroUID</key> | |
<string>1F442C17-C707-4550-8B8A-88DC2C375946</string> | |
<key>TimeOutAbortsMacro</key> | |
<true/> | |
<key>UseParameter</key> | |
<false/> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>84</integer> | |
<key>DisplayKind</key> | |
<string>Variable</string> | |
<key>HonourFailureSettings</key> | |
<true/> | |
<key>IncludeStdErr</key> | |
<false/> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ExecuteShellScript</string> | |
<key>NotifyOnFailure</key> | |
<false/> | |
<key>Path</key> | |
<string></string> | |
<key>Source</key> | |
<string>Nothing</string> | |
<key>StopOnFailure</key> | |
<false/> | |
<key>Text</key> | |
<string>#!/usr/bin/env ruby | |
s = `echo $KMVAR_FB_WindowFramesList` | |
l = s.split(/\s/) | |
h = Hash[l.map { |e| e = e.split(':') }] | |
puts h['win_r1']</string> | |
<key>TimeOutAbortsMacro</key> | |
<true/> | |
<key>TrimResults</key> | |
<true/> | |
<key>TrimResultsNew</key> | |
<true/> | |
<key>UseText</key> | |
<true/> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
<dict> | |
<key>Action</key> | |
<string>ResizeWindowTo</string> | |
<key>ActionUID</key> | |
<integer>85</integer> | |
<key>HeightExpression</key> | |
<string>300</string> | |
<key>HorizontalExpression</key> | |
<string>200</string> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ManipulateWindow</string> | |
<key>TargetApplication</key> | |
<dict/> | |
<key>Targeting</key> | |
<string>FrontWindow</string> | |
<key>TargetingType</key> | |
<string>Front</string> | |
<key>VerticalExpression</key> | |
<string>600</string> | |
<key>WidthExpression</key> | |
<string>300</string> | |
<key>WindowIndexExpression</key> | |
<string>2</string> | |
<key>WindowName</key> | |
<string></string> | |
</dict> | |
<dict> | |
<key>Action</key> | |
<string>SetWindowFrame</string> | |
<key>ActionUID</key> | |
<integer>86</integer> | |
<key>IsDisclosed</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>UseVariable</string> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
</array> | |
<key>CreationDate</key> | |
<real>620338684.51483202</real> | |
<key>ModificationDate</key> | |
<real>662311827.09484196</real> | |
<key>Name</key> | |
<string>Right 66%</string> | |
<key>Triggers</key> | |
<array> | |
<dict> | |
<key>FireType</key> | |
<string>Pressed</string> | |
<key>KeyCode</key> | |
<integer>25</integer> | |
<key>MacroTriggerType</key> | |
<string>HotKey</string> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
</dict> | |
</array> | |
<key>UID</key> | |
<string>83C75ABA-B9F6-423C-B3EE-FC91A623EDBA</string> | |
</dict> | |
</array> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
<key>Name</key> | |
<string>- 4 Window</string> | |
<key>PaletteUnderMouse</key> | |
<true/> | |
<key>ToggleMacroUID</key> | |
<string>67E24014-96C9-4D40-8378-310E3C1455DD</string> | |
<key>UID</key> | |
<string>61D3F3A3-4481-4C42-9B67-ABC89CB81DEF</string> | |
</dict> | |
<dict> | |
<key>Activate</key> | |
<string>OnceAfterTrigger</string> | |
<key>AddToMacroPalette</key> | |
<false/> | |
<key>AddToStatusMenu</key> | |
<false/> | |
<key>CreationDate</key> | |
<real>620338378.17791295</real> | |
<key>DisplayToggle</key> | |
<false/> | |
<key>KeyCode</key> | |
<integer>32767</integer> | |
<key>Macros</key> | |
<array> | |
<dict> | |
<key>Actions</key> | |
<array> | |
<dict> | |
<key>ActionUID</key> | |
<integer>69</integer> | |
<key>MacroActionType</key> | |
<string>SetVariableToText</string> | |
<key>Text</key> | |
<string>%FrontWindowFrame%</string> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>70</integer> | |
<key>Asynchronously</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ExecuteMacro</string> | |
<key>MacroUID</key> | |
<string>1F442C17-C707-4550-8B8A-88DC2C375946</string> | |
<key>TimeOutAbortsMacro</key> | |
<true/> | |
<key>UseParameter</key> | |
<false/> | |
</dict> | |
<dict> | |
<key>ActionUID</key> | |
<integer>71</integer> | |
<key>DisplayKind</key> | |
<string>Variable</string> | |
<key>HonourFailureSettings</key> | |
<true/> | |
<key>IncludeStdErr</key> | |
<false/> | |
<key>MacroActionType</key> | |
<string>ExecuteShellScript</string> | |
<key>NotifyOnFailure</key> | |
<false/> | |
<key>Path</key> | |
<string></string> | |
<key>Source</key> | |
<string>Nothing</string> | |
<key>StopOnFailure</key> | |
<false/> | |
<key>Text</key> | |
<string>#!/usr/bin/env ruby | |
s = `echo $KMVAR_FB_WindowFramesList` | |
l = s.split(/\s/) | |
h = Hash[l.map { |e| e = e.split(':') }] | |
puts h['win_l2']</string> | |
<key>TimeOutAbortsMacro</key> | |
<true/> | |
<key>TrimResults</key> | |
<true/> | |
<key>TrimResultsNew</key> | |
<true/> | |
<key>UseText</key> | |
<true/> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
<dict> | |
<key>Action</key> | |
<string>SetWindowFrame</string> | |
<key>ActionUID</key> | |
<integer>72</integer> | |
<key>MacroActionType</key> | |
<string>UseVariable</string> | |
<key>Variable</key> | |
<string>FB_FrontWindowFrame</string> | |
</dict> | |
</array> | |
<key>CreationDate</key> | |
<real>620338684.51483297</real> | |
<key>ModificationDate</key> | |
<real>662315074.80794704</real> | |
<key>Name</key> | |
<string>Left 33%</string> | |
<key>Triggers</key> | |
<array> | |
<dict> | |
<key>FireType</key> | |
<string>Pressed</string> | |
<key>KeyCode</key> | |
<integer>18</integer> | |
<key>MacroTriggerType</key> | |
<string>HotKey</string> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
</dict> | |
</array> | |
<key>UID</key> | |
<string>B17E5615-8783-470B-AA32-EAE75D345407</string> | |
</dict> | |
</array> | |
<key>Modifiers</key> | |
<integer>0</integer> | |
<key>Name</key> | |
<string>- 4 Window</string> | |
<key>PaletteUnderMouse</key> | |
<true/> | |
<key>ToggleMacroUID</key> | |
<string>67E24014-96C9-4D40-8378-310E3C1455DD</string> | |
<key>UID</key> | |
<string>61D3F3A3-4481-4C42-9B67-ABC89CB81DEF</string> | |
</dict> | |
</array> | |
</plist> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment