# Slate, utilitaire pour gérer vos fenêtres au clavier



## [MGZ] Shralldam (25 Juillet 2013)

Bonsoir à tous !

Je ne sais pas si je poste au bon endroit, mais à vrai dire je ne vois pas quelle partie du forum conviendrait mieux. 

Dans ce fil, je vous propose de parler de Slate, un utilitaire gratuit qui permet de gérer ses fenêtres avec énormément de contrôle. Vous pouvez le télécharger via ce lien.

J'ai découvert cette application il y a quelques temps, après avoir essayé des logiciels tels que Divvy, Cinch, HyperDock Ces utilitaires étaient sympas, mais je restais toujours un peu sur ma faim, cherchant un moyen de spécifier des tailles exactes et d'avoir dans l'ensemble plus de contrôle sur le maniement des fenêtres.

*Slate*, en plus d'être gratuit, permet un contrôle inégalé sur le comportement des fenêtres. Mais cela a un prix : aucune interface graphique pour paramétrer le tout, il faut rédiger un fichier de configuration (on a le choix entre une syntaxe spécifique au logiciel, ou alors du Javascript). Cela paraît peu évident au départ, mais en s'y intéressant quelques heures, on peut en fait créer ses propres réglages sans trop de soucis, et cela fonctionne vraiment très bien !

Le fichier de configuration de *Slate* doit être enregistré dans le dossier de départ, et doit porter le nom ".slate" (oui, avec le point devant, mais sans les guillemets évidemment) ou ".slate.js" (si on choisit la voie Javascript, plus compliquée mais autrement plus puissante). Tout est expliqué sur le site du projet sur Github, mais en Anglais. Je ferai peut-être un tuto sur le sujet, mais en attendant, je vous propose de récupérer mes propres réglages (que je suis en train de refaire, mon MacBook Pro m'a lâché et je n'ai pas ma précédente config sous la main) :

*Fichier .slate*

```
# CONFIGURATION PRINCIPALE
	config defaultToCurrentScreen true
	config keyboardLayout azerty

# ALIAS POUR POSITIONS RECURRENTES
	alias left move screenOriginX;screenOriginY screenSizeX/2;screenSizeY
	alias right move screenSizeX/2;screenOriginY screenSizeX/2;screenSizeY
	alias top move screenOriginX;screenOriginY screenSizeX;screenSizeY/2
	alias topleft move screenOriginX;screenOriginY screenSizeX/2;screenSizeY/2
	alias topright move screenSizeX/2;screenOriginY screenSizeX/2;screenSizeY/2
	alias bottom move screenOriginX;screenSizeY/2+22 screenSizeX;screenSizeY/2
	alias bottomleft move screenOriginX;screenSizeY/2+22 screenSizeX/2;screenSizeY/2
	alias bottomright move screenSizeX/2;screenSizeY/2+22 screenSizeX/2;screenSizeY/2
	alias fullscreen move screenOriginX;screenOriginY screenSizeX;screenSizeY
	alias hdready move screenOriginX;screenOriginY 1280;720
	alias fullhd move screenOriginX;screenOriginY 1920;1080

# ALIAS POUR DEPLACEMENTS
	alias left10 nudge -10 +0
	alias right10 nudge +10 +0

# ALIAS POUR REDIMENSIONNEMENTS
	alias shrinkX resize -10% +0
	alias shrinkY resize +0 -10%
	alias growX resize +10% +0
	alias growY resize +0 +10%
	alias shrinkBoth resize -10% -10%
	alias growBoth resize +10% +10%

# DISPOSITIONS (LAYOUTS)
	# à faire

# RACCOURCIS
	bind pad1:ctrl ${bottomleft}
	bind pad2:ctrl ${bottom}
	bind pad3:ctrl ${bottomright}
	bind pad4:ctrl ${left}
	bind pad5:ctrl ${fullscreen}
	bind pad6:ctrl ${right}
	bind pad7:ctrl ${topleft}
	bind pad8:ctrl ${top}
	bind pad9:ctrl ${topright}
	bind h:ctrl ${hdready}
	bind h:ctrl,shift ${fullhd}
	bind i:ctrl ${left10}
	bind o:ctrl ${right10}
	bind pad-:ctrl ${shrinkX}
	bind pad-:ctrl,shift ${shrinkY}
	bind pad+:ctrl ${growX}
	bind pad+:ctrl,shift ${growY}
	bind pad/:ctrl ${shrinkBoth}
	bind pad=:ctrl ${growBoth}
```

En y regardant bien, la syntaxe n'est pas très compliquée. J'ai des réglages que j'ai assignés principalement au pavé numérique, me permettant de redimensionner et replacer les fenêtres en utilisant les chiffres combinés à la touche Ctrl.

Si vous connaissez déjà Slate et que vous avez réalisé des configs plus poussées, ce serait sympa si on pouvait les échanger via ce fil. De mon côté je continue à expérimenter avec ce logiciel, les possibilités sont nombreuses et je n'ai pas encore tout essayé, notamment les layouts qui ont l'air très puissants : par exemple, si on a l'habitude de lancer plusieurs programmes à la fois pour un même projet (courant en webdesign), on appuie sur une combinaison de touches et hop, toutes les fenêtres des différents logiciels se positionnent où il faut, y compris sur des écrans multiples !

Voilà Je ne sais pas si ça va intéresser des membres du forum, mais j'avais envie de parler de ce petit programme et de susciter l'envie d'en discuter et d'échanger des idées/configs !


----------



## Anonyme (26 Juillet 2013)

Merci, je ne connaissais pas .


----------



## [MGZ] Shralldam (26 Juillet 2013)

J'ai retrouvé le fichier de config en Javascript que j'avais commencé. C'est assez brouillon et il y a des doublons par rapport au fichier avec la syntaxe Slate, mais ça montre un petit peu ce qu'il est possible de faire :


```
// CONFIGURATION DE BASE
	var mainConfig = slate.configAll({
		"defaultToCurrentScreen" : true,
		"keyboardLayout" : "azerty"
	});

// OPERATIONS
// 1. Placer au centre à l'échelle 1,5
	var moveCenter = slate.operation("move", {
		"x" : "screenOriginX+screenSizeX/6",
		"y" : "screenOriginY+screenSizeY/6",
		"width" : "screenSizeX/1.5",
		"height" : "screenSizeY/1.5"
		}
	);

// 2. Placer à gauche, moitié écran
	var moveLeft = slate.operation("move", {
		"x" : "screenOriginX",
		"y" : "screenOriginY",
		"width" : "screenSizeX/2",
		"height" : "screenSizeY"
	});

// 3. Placer à droite, moitié écran
	var moveRight = slate.operation("move", {
		"x" : "screenSizeX/2",
		"y" : "screenOriginY",
		"width" : "screenSizeX/2",
		"height" : "screenSizeY"
	});

// 4. Fonction qui place Sublime Text 2 à gauche et les navigateurs à droite
	function webSetup(window) {
		var getAppName = window.app().name();
		if (getAppName === "Sublime Text 2") {
			window.doOperation(moveLeft);
		} else if (getAppName === "Google Chrome" || getAppName === "Firefox" || getAppName === "Safari") {
			window.doOperation(moveRight);
		} else {
			window.doOperation(moveCenter);
		}
	}

// 5. Déplacement incrémental de 10 pixels à gauche ou à droite
	var pushLeft = slate.operation("nudge", {
		"x" : "-10",
		"y" : "+0"
	});
	var pushRight = slate.operation("nudge", {
		"x" : "+10",
		"y" : "+0"
	});

// ATTRIBUTION DES RACCOURCIS
	slate.bind("pad=:ctrl", moveCenter);
	slate.bind("l:ctrl", moveLeft);
	slate.bind("r:ctrl", moveRight);
	slate.bind("t:ctrl", webSetup);
	slate.bind("i:ctrl",pushLeft, true);
	slate.bind("o:ctrl",pushRight, true);
```


---------- Nouveau message ajouté à 15h12 ---------- Le message précédent a été envoyé à 15h03 ----------

Petite démo en vidéo :

Slate Demo


----------



## pascalformac (26 Juillet 2013)

ca me rappelle un  Applescript pondu il y a peu

layouts:
présenté là
http://projects.jga.me/layouts/
( et le script est  visible criticable editable  etc sur github)


----------



## [MGZ] Shralldam (27 Juillet 2013)

Je ne connaissais pas Layouts, effectivement les approches des deux logiciels ont des points similaires 

Mais visiblement Slate permet plus de choses par extension. Je ne suis encore qu'à la surface, j'espère pouvoir créer des commandes en chaîne via l'opération _sequence_, avec détection de l'écran et des logiciels ouverts. Ça fait un peu geek tout ça, mais ça m'amuse


----------

