You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

229 lines
5.5 KiB
JavaScript

/* global slate: false */
// show the overlay hints for applications
var hint = slate.operation('hint', {
characters: 'jkl;asdfqwertyuiop[]zxcvbnm,'
});
// custom resize grids for all monitors 6x4
var grid = slate.operation('grid', {
padding: 10,
grids: {
0: {
width: 6,
height: 2
},
1: {
width: 6,
height: 2
},
2: {
width: 6,
height: 2
}
}
});
// ultrafast application-switching
var iterm = slate.operation('focus', { app: 'iTerm' });
var chrome = slate.operation('focus', { app: 'Google Chrome' });
var mail = slate.operation('focus', { app: 'Mail' });
var fork = slate.operation('focus', { app: 'ForkLift' });
var things = slate.operation('focus', { app: 'Things' });
var tyme = slate.operation('focus', { app: 'Tyme' });
var fullscreen = slate.operation('move', {
x: 'screenOriginX',
y: 'screenOriginY',
width: 'screenSizeX',
height: 'screenSizeY'
});
var fullheight = slate.operation('move', {
x: 'windowTopLeftX',
y: 'windowTopLeftY',
width: 'windowSizeX',
height: 'screenSizeY'
});
var resizeToBottom = slate.operation('resize', {
width: '+0',
height: '+10'
});
var resizeToRight = slate.operation('resize', {
width: '+10',
height: '+0'
});
var throwNext = function (win) {
'use strict';
var winRect = win.rect();
var screen = win.screen().visibleRect();
var newX = (winRect.x - screen.x) / screen.width + '*screenSizeX+screenOriginX';
var newY = (winRect.y - screen.y) / screen.height + '*screenSizeY+screenOriginY';
var newWidth = winRect.width / screen.width + '*screenSizeX';
var newHeight = winRect.height / screen.height + '*screenSizeY';
throwNext = slate.operation('throw', {
x: newX,
y: newY,
width: newWidth,
height: newHeight,
screen: 'next'
});
win.doOperation(throwNext);
};
var throwPrev = function (win) {
'use strict';
var winRect = win.rect();
var screen = win.screen().visibleRect();
var newX = (winRect.x - screen.x) / screen.width + '*screenSizeX+screenOriginX';
var newY = (winRect.y - screen.y) / screen.height + '*screenSizeY+screenOriginY';
var newWidth = winRect.width / screen.width + '*screenSizeX';
var newHeight = winRect.height / screen.height + '*screenSizeY';
throwPrev = slate.operation('throw', {
x: newX,
y: newY,
width: newWidth,
height: newHeight,
screen: 'prev'
});
win.doOperation(throwPrev);
};
var lefthalf = slate.operation('move', {
x: 'screenOriginX',
y: 'screenOriginY',
width: 'screenSizeX/2',
height: 'screenSizeY'
});
var righthalf = slate.operation('move', {
x: 'screenOriginX+screenSizeX/2',
y: 'screenOriginY',
width: 'screenSizeX/2',
height: 'screenSizeY'
});
var tophalf = slate.operation('move', {
x: 'screenOriginX',
y: 'screenOriginY',
width: 'screenSizeX',
height: 'screenSizeY/2'
});
var bottomhalf = slate.operation('move', {
x: 'screenOriginX',
y: 'screenOriginY+screenSizeY/2',
width: 'screenSizeX',
height: 'screenSizeY/2'
});
var mobile = slate.operation('move', {
x: 'screenOriginX',
y: 'screenOriginY',
width: '480',
height: 'screenSizeY'
});
var tablet = slate.operation('move', {
x: 'screenOriginX',
y: 'screenOriginY',
width: '1024',
height: '768'
});
var desktop = slate.operation('move', {
x: 'screenOriginX',
y: 'screenOriginY',
width: '1280',
height: '800'
});
var large = slate.operation('move', {
x: 'screenOriginX',
y: 'screenOriginY',
width: '1440',
height: '900'
});
var fullhd = slate.operation('move', {
x: 'screenOriginX',
y: 'screenOriginY',
width: '1920',
height: '1080'
});
/* Key configurations
====================================================================== */
var hyper = ':shift,ctrl,alt,cmd';
var hyperModal = hyper + ',s:toggle';
/* default configs
====================================================================== */
slate.configAll({
checkDefaultsOnLoad: true,
defaultToCurrentScreen: true,
focusCheckWidthMax: 3000,
modalEscapeKey: 'esc',
nudgePercentOf: 'screenSize',
resizePercentOf: 'screenSize',
secondsBetweenRepeat: 0.1,
windowHintsDuration: 5,
windowHintsFontColor: '0;255;0;1.0',
windowHintsFontName: 'Menlo',
windowHintsFontSize: 60,
windowHintsHeight: 72,
windowHintsIgnoreHiddenWindows: false,
windowHintsShowIcons: true,
windowHintsSpread: true,
windowHintsWidth: 72
});
/* more key bindings
====================================================================== */
slate.bind('tab' + hyper, hint, false);
slate.bind('g' + hyper, grid, false);
// most important apps on easy accesible keys
slate.bind('i' + hyper, iterm, false);
slate.bind('c' + hyper, chrome, false);
slate.bind('m' + hyper, mail, false);
slate.bind('f' + hyper, fork, false);
slate.bind('t' + hyper, things, false);
slate.bind('y' + hyper, tyme, false);
// movements in modal mode with m
slate.bind('h' + hyperModal, lefthalf, false);
slate.bind('l' + hyperModal, righthalf, false);
slate.bind('k' + hyperModal, tophalf, false);
slate.bind('j' + hyperModal, bottomhalf, false);
slate.bind('1' + hyperModal, mobile, false);
slate.bind('2' + hyperModal, tablet, false);
slate.bind('3' + hyperModal, desktop, false);
slate.bind('4' + hyperModal, large, false);
slate.bind('5' + hyperModal, fullhd, false);
slate.bind('space' + hyperModal, fullscreen, false);
slate.bind('f' + hyperModal, fullheight, false);
slate.bind('right' + hyperModal, resizeToRight, false);
slate.bind('down' + hyperModal, resizeToBottom, false);
slate.bind(']' + hyperModal, throwNext, false);
slate.bind('[' + hyperModal, throwPrev, false);