Slate – «срібна куля» для розташування вікон на екранах OS X

Привіт, Хабр! Хочу поділитися дуже цікавим інструментом для «приручення» положення вікон в OS X. Якщо коротко, то ось посилання репозиторій з чудовим додатком Slate. За подробицями, ласкаво просимо під кат.

image

Я зіткнувся з проблемою розташування (і, що найголовніше, збереження цієї позиції!) вікон на кількох моніторах в OS X. Особливо ця проблема актуальна в разі, якщо основна робоча машина – це ноутбук, а працювати доводиться багато, і, відповідно, підключати різні монітори і в різній кількості. У мене, наприклад, коштує досить великий монітор в офісі, по-менше дому, а в дорозі – можливості підключити другий монітор немає взагалі. У підсумку, кожен мій робочий сеанс починається з включення IDE і розташування всіх вікон-інструментів (термінал, історія версій, структура проекту, інспектор класу і т. д.) IDE по моніторам. Цей процес прискорюється такими додатками як ShiftIt, але все одно доводиться витрачати час на точне розташування кожного вікна. Хочеться просто натиснути заповітну комбінацію клавіш і спостерігати як самі вікна розташовуються по заздалегідь заданих позиціях.

І ось сьогодні я знайшов рішення, яке покриває всі мої потреби з головою і хочу поділитися ним з вами.

Власне, додаток називається Slate. Ось посилання на гитхаб. Це додаток дозволяє створювати свої власні конфігурації розташування вікон на моніторах у вигляді JS файлу з конфігурацією. Slate надає дуже потужний і в той же час простий для розуміння API для маніпуляції з вікнами, що дозволяє байндить події на поєднання клавіш, має відмінну документацію і (що найголовніше) працює!

Для створення своєї власної конфігурації необхідно створити файл ~/.slate.js і описати там розташування вікон.

Ось так, наприклад, вийшло в мене:

// При натисненні на ctrl+alt+cmd+shift+1 будемо розставляти вікна на місце
slate.bind("1:ctrl,alt,cmd,shift", function() {
// Поки що не будемо обробляти ситуацію, коли кількість моніторів не дорівнює 2-м.
if (slate.screenCount() !== 2) {
return;
}
// Виберемо більш великий за розміром монітор як головний, а другий як додатковий
var screen0 = slate.screenForRef('0');
var screen1 = slate.screenForRef('1');
var mainScreen = null,
additionalScreen = null;
if (screen0.rect().width * screen0.rect().height > screen1.rect().width * screen1.rect().height) {
mainScreen = screen0;
additionalScreen = screen1;
} else {
mainScreen = screen1;
additionalScreen = screen0;
}

// Пробіжимося по всіх відкритих додатків
slate.eachApp(function(app) {
// Але будемо працювати тільки з вікнами IntelliJ IDEA
var appName = app.name();
if (appName !== 'IntelliJ IDEA') {
return;
}
app.eachWindow(function(win) {
//Залежно від назви вікна - інструменту IntelliJ IDEA задамо йому позицію, розміри і монітор
var w, h, xOffset, yOffset, screen;
switch (win.title()) {
case 'Terminal':
w = 5;
h = 5;
xOffset = 7;
yOffset = 7;
screen = mainScreen;
break;
case 'Version Control':
w = 5;
h = 5;
xOffset = 7;
yOffset = 2;
screen = mainScreen;
break;
case 'Database':
w = 3;
h = 2;
xOffset = 9;
yOffset = 0;
screen = mainScreen;
break;
case 'Workspaces':
w = 2;
h = 2;
xOffset = 7;
yOffset = 0;
screen = mainScreen;
break;
case 'Project':
w = 6;
h = 12;
xOffset = 0;
yOffset = 0;
screen = additionalScreen;
break;
case 'Structure':
w = 6;
h = 12;
xOffset = 6;
yOffset = 0;
screen = additionalScreen;
break;
default:
w = 7;
h = 12;
xOffset = 0;
yOffset = 0;
screen = mainScreen;
}
// Застосуємо зміни до вікна
win.doOperation(slate.operation('move', {
'x': 'screenOriginX+screenSizeX/12*' + xOffset,
'y': 'screenOriginY+screenSizeY/12*' + yOffset,
'width': 'screenSizeX/12*' + w,
'height': 'screenSizeY/12*' + h,
'screen': screen
}));
});
});
});

І ось такий результат:

image

image

Спасибі за увагу!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.