examples: cycle-edge-snap

This commit is contained in:
Ole Jørgen Brønner
2019-10-07 00:05:17 +02:00
parent 29cd9695b2
commit 02ccc35fd4
+35
View File
@@ -9,6 +9,7 @@ var Scratch = Extension.imports.scratch;
`init` function in "user.js":
Extension.imports.examples.keybindings.gotoByIndex();
*/
function gotoByIndex() {
@@ -76,6 +77,40 @@ function windowMarks() {
}
}
function cycleEdgeSnap(binding = "<Super>d") {
var Tiling = Extension.imports.tiling;
var Meta = imports.gi.Meta;
Keybindings.bindkey(binding, "cycle-edge-snap", (mw) => {
// Snaps window to the left/right monitor edge
// Note: mostly the same as quickly switching left+right / right+left
// Note: We work in monitor relative coordinates here
let margin = Tiling.prefs.horizontal_margin;
let space = Tiling.spaces.spaceOfWindow(mw);
let workarea = Main.layoutManager.getWorkAreaForMonitor(space.monitor.index);
let clone = mw.clone;
let x = clone.targetX + space.targetX;
let width = clone.width;
let wax = workarea.x - space.monitor.x;
let leftSnapPos = wax + margin;
let rightSnapPos = wax + workarea.width - width - margin;
let targetX;
if (x == leftSnapPos) {
targetX = rightSnapPos;
} else if (x == rightSnapPos) {
targetX = leftSnapPos;
} else {
targetX = leftSnapPos;
}
Tiling.move_to(space, mw, {x: targetX});
}, {activeInNavigator: true});
}
function swapNeighbours(binding = "<Super>y") {
var Tiling = Extension.imports.tiling;
var Meta = imports.gi.Meta;