From a9fed7009d403d26e69fa1d257c39e92b3dabbc8 Mon Sep 17 00:00:00 2001 From: William Carroll Date: Fri, 6 Jul 2018 13:35:22 -0400 Subject: [PATCH] Define KBDs conditionally based on flag Create KBDs that work when the Ergodox isn't attached. There is a little noise in this diff created by running Prettier on the buffer. --- configs/os_x/.slate.js | 167 ++++++++++++++++++++++------------------- 1 file changed, 90 insertions(+), 77 deletions(-) diff --git a/configs/os_x/.slate.js b/configs/os_x/.slate.js index 438d691f1..690f065a9 100644 --- a/configs/os_x/.slate.js +++ b/configs/os_x/.slate.js @@ -1,110 +1,123 @@ -/* globals S,slate,_ */ -// Bindings for slate. -// Forked from rschmukler/dotfiles -// Hotkeys for quickly opening apps & changing window size +// Support flag to branch KBDs depending on presence of Ergodox keyboard. +// Since the Ergodox has complicated modifier keys like "hyper" and "meh" key, +// we should prefer to use these when that keyboard is attached because it +// reduces the potential for collisions for Emacs KBDs. This becomes +// problematic, however, when the Ergodox is not attached because these keys are +// unavailable. Slate KBDs. Under these circumstances, potential collisions +// with Emacs KBDs is acceptable. -var modal_key = ":alt;shift;cmd;ctrl"; // hyper key -var resize_key = ":alt;shift;ctrl"; // meh key +var ergodox_attached = false; +var HYPER = ":alt;shift;cmd;ctrl"; +var MEH = ":alt;shift;ctrl"; + +var modal_key = ergodox_attached ? HYPER : ":ctrl;shift"; +var resize_key = ergodox_attached ? MEH : ":alt;shift"; // Configs S.cfga({ defaultToCurrentScreen: true, secondsBetweenRepeat: 0.1, checkDefaultsOnLoad: true, - focusCheckWidthMax: 3000, + focusCheckWidthMax: 3000 }); - - // window resizing bindings var window_resizing_bindings = { - ';': { - x: 'screenSizeX/3*2 + screenOriginX+20', - y: 'screenOriginY+20', - width: 'screenSizeX/3 - 40', - height: 'screenSizeY-100' + ";": { + x: "screenSizeX/3*2 + screenOriginX+20", + y: "screenOriginY+20", + width: "screenSizeX/3 - 40", + height: "screenSizeY-100" }, - 'g': { - x: 'screenOriginX+20', - y: 'screenOriginY+20', - width: 'screenSizeX/3*2 - 40', - height: 'screenSizeY-100' + g: { + x: "screenOriginX+20", + y: "screenOriginY+20", + width: "screenSizeX/3*2 - 40", + height: "screenSizeY-100" }, - 'o': { - x: 'screenSizeX / 2 + screenOriginX + 20', - y: 'screenOriginY + 20', - width: 'screenSizeX / 2 - 40', - height: '(screenSizeY - 120) / 2' + o: { + x: "screenSizeX / 2 + screenOriginX + 20", + y: "screenOriginY + 20", + width: "screenSizeX / 2 - 40", + height: "(screenSizeY - 120) / 2" }, - ',': { - x: 'screenSizeX / 2 + screenOriginX + 20', - y: '(screenSizeY - 120) / 2 + 20 + 20', - width: 'screenSizeX / 2 - 40', - height: '(screenSizeY - 120) / 2' + ",": { + x: "screenSizeX / 2 + screenOriginX + 20", + y: "(screenSizeY - 120) / 2 + 20 + 20", + width: "screenSizeX / 2 - 40", + height: "(screenSizeY - 120) / 2" }, - 'h': { - x: 'screenOriginX+20', - y: 'screenOriginY+20', - width: 'screenSizeX*0.5 - 40', - height: 'screenSizeY-100' + h: { + x: "screenOriginX+20", + y: "screenOriginY+20", + width: "screenSizeX*0.5 - 40", + height: "screenSizeY-100" }, - 'j': { - x: 'screenOriginX+screenSizeX/6', - y: 'screenOriginY+20', - width: '2*screenSizeX/3', - height: 'screenSizeY - 100' + j: { + x: "screenOriginX+screenSizeX/6", + y: "screenOriginY+20", + width: "2*screenSizeX/3", + height: "screenSizeY - 100" }, - 'k': { - x: 'screenOriginX+20', - y: 'screenOriginY+20', - width: 'screenSizeX - 40', - height: 'screenSizeY - 100' + k: { + x: "screenOriginX+20", + y: "screenOriginY+20", + width: "screenSizeX - 40", + height: "screenSizeY - 100" }, - 'l': { - x: 'screenSizeX/2 + screenOriginX+20', - y: 'screenOriginY+20', - width: 'screenSizeX*0.5 - 40', - height: 'screenSizeY-100' - }, -} + l: { + x: "screenSizeX/2 + screenOriginX+20", + y: "screenOriginY+20", + width: "screenSizeX*0.5 - 40", + height: "screenSizeY-100" + } +}; -var window_resizing_bindings = Object.keys(window_resizing_bindings).reduce(function(acc, kbd) { - acc[kbd + resize_key] = S.op('move', window_resizing_bindings[kbd]); - return acc; -}, {}); +var window_resizing_bindings = Object.keys(window_resizing_bindings).reduce( + function(acc, kbd) { + acc[kbd + resize_key] = S.op("move", window_resizing_bindings[kbd]); + return acc; + }, + {} +); S.bnda(window_resizing_bindings); - // Moves applications across multiple screens -var throwLeft = slate.operation('throw', {screen: '0', width: 'screenSizeX', height: 'screenSizeY',}); -var throwRight = slate.operation('throw', {screen: '1', width: 'screenSizeX', height: 'screenSizeY',}); - -slate.bind('1:ctrl', throwLeft); -slate.bind('2:ctrl', throwRight); +var throwLeft = slate.operation("throw", { + screen: "0", + width: "screenSizeX", + height: "screenSizeY" +}); +var throwRight = slate.operation("throw", { + screen: "1", + width: "screenSizeX", + height: "screenSizeY" +}); +slate.bind("1:ctrl", throwLeft); +slate.bind("2:ctrl", throwRight); var focus_apps = { - 1: '1Password', - i: 'iTunes', - a: 'Atom', - h: 'Dash', - e: 'Emacs', - t: 'iTerm2', - m: 'Messages', - s: 'Spotify', - c: 'Google Chrome', - l: 'LimeChat', - k: 'Slack', - w: 'Wireshark', - p: 'Tomato One', - d: 'Discord', + 1: "1Password", + i: "iTunes", + a: "Atom", + h: "Dash", + e: "Emacs", + t: "iTerm2", + m: "Messages", + s: "Spotify", + c: "Google Chrome", + l: "LimeChat", + k: "Slack", + w: "Wireshark", + p: "Tomato One", + d: "Discord" }; - Object.keys(focus_apps).forEach(function(key) { app = focus_apps[key]; - S.bind(key + modal_key, S.op("focus", {app: app})); + S.bind(key + modal_key, S.op("focus", { app: app })); });