Skip to content

Instantly share code, notes, and snippets.

@randylien
Created March 24, 2014 06:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save randylien/9735299 to your computer and use it in GitHub Desktop.
Save randylien/9735299 to your computer and use it in GitHub Desktop.
slate configuration file
// Configs
S.cfga({
"defaultToCurrentScreen" : true,
"secondsBetweenRepeat" : 0.1,
"checkDefaultsOnLoad" : true,
"focusCheckWidthMax" : 3000,
"orderScreensLeftToRight" : true
});
// Monitors
var monTboltL = "0";
var monTboltR = "2";
var monLaptop = "1680x1050";
// Operations
var lapChat = S.op("corner", {
"screen" : monLaptop,
"direction" : "top-left",
"width" : "screenSizeX/9",
"height" : "screenSizeY"
});
var lapMain = lapChat.dup({ "direction" : "top-right", "width" : "8*screenSizeX/9" });
var tboltLFull = S.op("move", {
"screen" : monTboltL,
"x" : "screenOriginX",
"y" : "screenOriginY",
"width" : "screenSizeX",
"height" : "screenSizeY"
});
var tboltLLeft = tboltLFull.dup({ "width" : "screenSizeX/3" });
var tboltLMid = tboltLLeft.dup({ "x" : "screenOriginX+screenSizeX/3" });
var tboltLRight = tboltLLeft.dup({ "x" : "screenOriginX+(screenSizeX*2/3)" });
var tboltLLeftTop = tboltLLeft.dup({ "height" : "screenSizeY/2" });
var tboltLLeftBot = tboltLLeftTop.dup({ "y" : "screenOriginY+screenSizeY/2" });
var tboltLMidTop = tboltLMid.dup({ "height" : "screenSizeY/2" });
var tboltLMidBot = tboltLMidTop.dup({ "y" : "screenOriginY+screenSizeY/2" });
var tboltLRightTop = tboltLRight.dup({ "height" : "screenSizeY/2" });
var tboltLRightBot = tboltLRightTop.dup({ "y" : "screenOriginY+screenSizeY/2" });
var tboltRFull = S.op("move", {
"screen" : monTboltR,
"x" : "screenOriginX",
"y" : "screenOriginY",
"width" : "screenSizeX",
"height" : "screenSizeY"
});
var tboltRLeft = tboltRFull.dup({ "width" : "screenSizeX/3" });
var tboltRMid = tboltRLeft.dup({ "x" : "screenOriginX+screenSizeX/3" });
var tboltRRight = tboltRLeft.dup({ "x" : "screenOriginX+(screenSizeX*2/3)" });
var tboltRLeftTop = tboltRLeft.dup({ "height" : "screenSizeY/2" });
var tboltRLeftBot = tboltRLeftTop.dup({ "y" : "screenOriginY+screenSizeY/2" });
var tboltRMidTop = tboltRMid.dup({ "height" : "screenSizeY/2" });
var tboltRMidBot = tboltRMidTop.dup({ "y" : "screenOriginY+screenSizeY/2" });
var tboltRRightTop = tboltRRight.dup({ "height" : "screenSizeY/2" });
var tboltRRightBot = tboltRRightTop.dup({ "y" : "screenOriginY+screenSizeY/2" });
// common layout hashes
var lapMainHash = {
"operations" : [lapMain],
"ignore-fail" : true,
"repeat" : true
};
var adiumHash = {
"operations" : [lapChat, lapMain],
"ignore-fail" : true,
"title-order" : ["Contacts"],
"repeat-last" : true
};
var mvimHash = {
"operations" : [tboltLRight, tboltRLeft],
"repeat" : true
};
var iTermHash = {
"operations" : [tboltLMidTop, tboltLMidBot, tboltRMidTop, tboltRMidBot, tboltRRightBot],
"sort-title" : true,
"repeat" : true
};
var genBrowserHash = function(regex) {
return {
"operations" : [function(windowObject) {
var title = windowObject.title();
if (title !== undefined && title.match(regex)) {
windowObject.doOperation(tboltLLeft);
} else {
windowObject.doOperation(lapMain);
}
}],
"ignore-fail" : true,
"repeat" : true
};
};
// 3 monitor layout
var threeMonitorLayout = S.lay("threeMonitor", {
"MacVim" : mvimHash,
"iTerm" : iTermHash,
"Google Chrome" : genBrowserHash(/^Developer\sTools\s-\s.+$/),
"GitX" : {
"operations" : [tboltLLeftTop],
"repeat" : true
},
"Firefox" : genBrowserHash(/^Firebug\s-\s.+$/),
"Safari" : lapMainHash,
"Spotify" : {
"operations" : [tboltRRightTop],
"repeat" : true
}
});
// 1 monitor layout
var oneMonitorLayout = S.lay("oneMonitor", {
"Google Chrome" : lapMainHash,
"Xcode" : lapMainHash,
"Firefox" : lapMainHash,
"Safari" : lapMainHash,
"Spotify" : lapMainHash
});
var twoMonitorLayout = oneMonitorLayout;
// Defaults
S.def(3, threeMonitorLayout);
S.def(2, twoMonitorLayout);
S.def(1, oneMonitorLayout);
// Layout Operations
var threeMonitor = S.op("layout", { "name" : threeMonitorLayout });
var twoMonitor = S.op("layout", { "name" : twoMonitorLayout });
var oneMonitor = S.op("layout", { "name" : oneMonitorLayout });
var universalLayout = function() {
// Should probably make sure the resolutions match but w/e
S.log("SCREEN COUNT: "+S.screenCount());
if (S.screenCount() === 3) {
threeMonitor.run();
} else if (S.screenCount() === 2) {
twoMonitor.run();
} else if (S.screenCount() === 1) {
oneMonitor.run();
}
};
// Batch bind everything. Less typing.
S.bnda({
// Layout Bindings
"space:ctrl" : universalLayout,
// Resize Bindings
// NOTE: some of these may *not* work if you have not removed the expose/spaces/mission control bindings
"right:ctrl;cmd" : S.op("resize", { "width" : "+10%", "height" : "+0" }),
"left:ctrl;cmd" : S.op("resize", { "width" : "-10%", "height" : "+0" }),
"up:ctrl;cmd" : S.op("resize", { "width" : "+0", "height" : "-10%" }),
"down:ctrl;cmd" : S.op("resize", { "width" : "+0", "height" : "+10%" }),
// "right:alt;cmd;shift" : S.op("resize", { "width" : "-10%", "height" : "+0", "anchor" : "bottom-right" }),
// "left:cmd;shift;alt" : S.op("resize", { "width" : "+10%", "height" : "+0", "anchor" : "bottom-right" }),
// "up:alt;cmd;shift" : S.op("resize", { "width" : "+0", "height" : "+10%", "anchor" : "bottom-right" }),
// "down:alt;cmd;shift" : S.op("resize", { "width" : "+0", "height" : "-10%", "anchor" : "bottom-right" }),
// Push Bindings
// NOTE: some of these may *not* work if you have not removed the expose/spaces/mission control bindings
"r:alt;cmd" : S.op("push", { "direction" : "right", "style" : "bar-resize:screenSizeX/2" }),
"l:alt;cmd" : S.op("push", { "direction" : "left", "style" : "bar-resize:screenSizeX/2" }),
"t:alt;cmd" : S.op("push", { "direction" : "up", "style" : "bar-resize:screenSizeY/2" }),
"b:alt;cmd" : S.op("push", { "direction" : "down", "style" : "bar-resize:screenSizeY/2" }),
"m:alt,cmd" : S.op("push", { "direction" : "up", "style" : "bar-resize:screenSizeY" }),
// Nudge Bindings
// NOTE: some of these may *not* work if you have not removed the expose/spaces/mission control bindings
"right:ctrl;alt" : S.op("nudge", { "x" : "+10%", "y" : "+0" }),
"left:ctrl;alt" : S.op("nudge", { "x" : "-10%", "y" : "+0" }),
"up:ctrl;alt" : S.op("nudge", { "x" : "+0", "y" : "-10%" }),
"down:ctrl;alt" : S.op("nudge", { "x" : "+0", "y" : "+10%" }),
// Throw Bindings
// NOTE: some of these may *not* work if you have not removed the expose/spaces/mission control bindings
"pad1:ctrl;alt" : S.op("throw", { "screen" : "2", "width" : "screenSizeX", "height" : "screenSizeY" }),
"pad2:ctrl;alt" : S.op("throw", { "screen" : "1", "width" : "screenSizeX", "height" : "screenSizeY" }),
"pad3:ctrl;alt" : S.op("throw", { "screen" : "0", "width" : "screenSizeX", "height" : "screenSizeY" }),
"right:ctrl;alt;cmd" : S.op("throw", { "screen" : "right", "width" : "screenSizeX", "height" : "screenSizeY" }),
"left:ctrl;alt;cmd" : S.op("throw", { "screen" : "left", "width" : "screenSizeX", "height" : "screenSizeY" }),
"up:ctrl;alt;cmd" : S.op("throw", { "screen" : "up", "width" : "screenSizeX", "height" : "screenSizeY" }),
"down:ctrl;alt;cmd" : S.op("throw", { "screen" : "down", "width" : "screenSizeX", "height" : "screenSizeY" }),
// Focus Bindings
// NOTE: some of these may *not* work if you have not removed the expose/spaces/mission control bindings
// "l:cmd" : S.op("focus", { "direction" : "right" }),
// "h:cmd" : S.op("focus", { "direction" : "left" }),
// "k:cmd" : S.op("focus", { "direction" : "up" }),
// "j:cmd" : S.op("focus", { "direction" : "down" }),
// "k:cmd;alt" : S.op("focus", { "direction" : "behind" }),
// "j:cmd;alt" : S.op("focus", { "direction" : "behind" }),
// "right:cmd" : S.op("focus", { "direction" : "right" }),
// "left:cmd" : S.op("focus", { "direction" : "left" }),
// "up:cmd" : S.op("focus", { "direction" : "up" }),
// "down:cmd" : S.op("focus", { "direction" : "down" }),
// "up:cmd;alt" : S.op("focus", { "direction" : "behind" }),
// "down:cmd;alt" : S.op("focus", { "direction" : "behind" }),
// Window Hints
"esc:cmd" : S.op("hint"),
// Switch currently doesn't work well so I'm commenting it out until I fix it.
//"tab:cmd" : S.op("switch"),
// Grid
"esc:ctrl" : S.op("grid")
});
// Test Cases
S.src(".slate.test", true);
S.src(".slate.test.js", true);
// Log that we're done configuring
S.log("[SLATE] -------------- Finished Loading Config --------------");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment