Skip to content
jigish edited this page Jan 24, 2013 · 60 revisions

This page documents the JavaScript config feature of Slate. This feature is available in Slate version 1.0.19 and above.

Appetizer

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:

  • 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
  • if the window's title is "OMG I WANT TO BE FULLSCREEN" then fullscreen the window regardless of the application.

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.

Main Course

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:

Clone this wiki locally