-
Notifications
You must be signed in to change notification settings - Fork 0
JavaScript Configs
This page documents the JavaScript config feature of Slate. This feature is available in Slate version 1.0.19 and above.
Normally, the way Slate is configured, a truly dynamic operation is impossible.
For example, lets say I'm a nutjob and I wanted the keystroke ctrl+1 to:
- if the window's title is "OMG I WANT TO BE FULLSCREEN" then fullscreen the window regardless of the application.
- push the window to the right if the application of the current window is iTerm
- push the window to the left if the application is Google Chrome
- push the window to the top if the application is anything else
And again, I want the keystroke ctrl+1 to handle all of this. In the typical Slate config, this is impossible.
Enter JavaScript Configs:
// Create Operations
var pushRight = slate.operation("push", {
"direction" : "right",
"style" : "bar-resize:screenSizeX/3"
});
var pushLeft = slate.operation("push", {
"direction" : "left",
"style" : "bar-resize:screenSizeX/3"
});
var pushTop = slate.operation("push", {
"direction" : "top",
"style" : "bar-resize:screenSizeX/2"
});
var fullscreen = slate.operation("move", {
"x" : "screenOriginX",
"y" : "screenOriginY",
"width" : "screenSizeX",
"height" : "screenSizeY"
});
// Bind A Crazy Function to 1+ctrl
slate.bind("1:ctrl", function(win) {
// here win is a reference to the currently focused window
if (win.title() === "OMG I WANT TO BE FULLSCREEN") {
win.doOperation(fullscreen);
return;
}
var appName = win.app().name();
if (appName === "iTerm") {
win.doOperation(pushRight);
} else if (appName === "Google Chrome") {
win.doOperation(pushLeft);
} else {
win.doOperation(pushTop);
}
});
Definitely verbose, but they can do much more than normal configs. Yum.
Disclaimer: I have only done basic smoke screen testing on this so far. It is definitely possible that some things don't work as expected. If that is the case please create an issue and I'll take a look.
To use JavaScript configs, create the file .slate.js in your home directory. You can use .slate.js alongside your .slate file if you like and Slate will load both (.slate first, then .slate.js). All JavaScript configs should go into the .slate.js file.
In the .slate.js file you will have access to the following global objects:
-
slate- the API to access Slate -
_- Underscore.js
The slate object serves two purposes: configuring Slate and accessing information about the your environment and windows.
The slate object is aliased to S. For example, instead of calling slate.log("hi"); you can simply call S.log("hi");. Most of the config APIs are aliased as well. See their sections below for their aliases.