Slate - eine „Silberkugel“ zum Anordnen von Fenstern auf OS X-Bildschirmen

Hallo habr Ich möchte ein sehr interessantes Tool zum „Zähmen“ der Position von Fenstern in OS X vorstellen. Kurz gesagt, hier ist ein Link zum Repository mit der wunderbaren Slate-Anwendung. Für Details, willkommen bei cat.

Bild

Ich bin auf das Problem der Position (und vor allem der Beibehaltung dieser Position!) Von Fenstern auf mehreren Monitoren in OS X gestoßen. Dieses Problem ist besonders relevant, wenn die Hauptarbeitsmaschine ein Laptop ist und Sie viel arbeiten und daher eine Verbindung herstellen müssen verschiedene Monitore und in verschiedenen Mengen. Ich habe zum Beispiel einen ziemlich großen Monitor im Büro, zu Hause und unterwegs - es gibt überhaupt keine Möglichkeit, einen zweiten Monitor anzuschließen. Daher beginnt jede meiner Arbeitssitzungen mit der Einbeziehung der IDE und der Position aller Tool-Fenster (Terminal, Versionsverlauf, Projektstruktur, Klasseninspektor usw.) der IDE auf Monitoren. Dieser Prozess wird durch Anwendungen wie ShiftIt erheblich beschleunigtSie müssen sich jedoch immer noch mit der genauen Position jedes Fensters befassen. Sie möchten nur die beliebte Tastenkombination drücken und sehen, wie sich die Fenster selbst an vorbestimmten Positionen befinden.

Und heute habe ich eine Lösung gefunden, die alle meine Bedürfnisse mit einem Kopf deckt und die ich mit Ihnen teilen möchte.

Eigentlich heißt die Anwendung Slate. Hier ist der Link zum Github. Mit dieser Anwendung können Sie Ihre eigenen Konfigurationen des Fensterlayouts auf Monitoren in Form einer JS-Konfigurationsdatei erstellen. Slate bietet eine sehr leistungsstarke und gleichzeitig einfach zu verstehende API zum Bearbeiten von Fenstern, ermöglicht das Binden von Ereignissen an Tastaturkürzel, verfügt über eine hervorragende Dokumentation und funktioniert (vor allem)!

Um Ihre eigene Konfiguration zu erstellen, müssen Sie die Datei ~ / .slate.js erstellen und die Position der Fenster dort beschreiben.

So stellte sich zum Beispiel für mich heraus:

// При нажатии на 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
			}));
		});
	});
});

Und hier ist das Ergebnis:

Bild

Bild

Vielen Dank für Ihre Aufmerksamkeit!

Jetzt auch beliebt: