Description:

Let snapped window edges stick together when one window is resized.

The script registers two global shortcuts: one for enabling/disabling the script permanently, and one for enabling/disabling the script only for the next resize. The default shortcut keys are Meta+Shift+S and Ctrl+Shift+S, respectively. You can change them using systemsettings (or kcmshell4 keys); they are associated with the component “KWin”. Their names are prefixed by “KWin Script: Sticky Window Snapping”.

Known issues:
[li]There is no optical feedback when a shortcut is pressed. I do not know how to initiate a KNotify notification from a KWin script. There is the function callDBus, but I do not know if or how it can be used for that purpose. KNotify provides the method “event” by dbus, but it expects arguments of types for which I do not know how to produce values with Java Script.[/li]
[li]Currently, not only snapped window edges are considered as connected, but even edges which are only on the same row/column are considered as connected. I have not decided, if this is a bug or a feature, yet.[/li]
Last changelog:

4 years ago

v0.2.1:
[li]fixed resizing for windows spanning multiple screens[/li]

v0.2:
[li]maximized windows are ignored now[/li]
[li]shaded windows are ignored now[/li]
[li]windows on other screens are ignored now[/li]
[li]changed behavior when windows get very small while resizing[/li]

v0.1:
[li]initial release[/li]

KIMW

5 months ago

Excellent. Thank you!

Report

Zren

6 months ago

I modified your script slightly for personal use. I made it not sticky windows unless they split the entire screen, and not stick when the windows originally touch the edge of the screen.

https://github.com/Zren/kwin-script-sticky-window-snapping/commit/fb71809b065969b8c67077bcfa2af790a954a571

Report

jakubleska

11 months ago

Hi, I don't know how to make knotify from KWin script but this is working in nodejs(maybe there is some better way how to do it, I just rewrite it from python)

var dbus = require('dbus-native');
var sessionBus = dbus.sessionBus();
sessionBus.getService('org.kde.knotify').getObject('/Notify', (err, obj)=>{

var knotify = obj.proxy['org.kde.KNotify'];
knotify.event("warning", "kde", [], "title", "text", [], ["action"], 0, 0);
});

I hope this can help you.

Report

andyandybobandy

11 months ago

Thank you, this is excellent!

Report

jospoortvliet

2 years ago

I would absolutely love an update that makes this work on kwin in Plasma 5 as it doesn't seem to work here. And this is just such an amazing script I think it should be there by default....

Report

jospoortvliet

2 years ago

hmmm, so it isn't that it doesn't work, but the situation where I used it most (moving the 'divide' between quick tiled windows) is broken. So - quick tile a window do the left, quick tile another to the right, move the divide between them to give one more space than the other. I do this a lot (web development stuff...) and in kwin4 it works. With kwin5 it doesn't, the windows lose their 'quick tile' size, so they pop back to a smaller size or whatever they were before.

Report

C

Flupp

2 years ago

This problem was caused by a bug in KWin, which is now fixed. (cf. https://github.com/Flupp/sticky-window-snapping/issues/1)

Report

mcaceres

3 years ago

Just discovered this. Extremely useful. I've been looking for a way of doing this ever since quick pack/tile became part of my workflow. The behavior is as expected and my window resizing is measurably better (:

I have a suggestion: I'd like a way of deciding whether to "unstick" a particular window on the fly. For instance, alt + right-click resizes with all snapped windows sticking (even if only part of the edge is snapped, which I really like). But it'd be useful if, say, alt + meta + right-click resized the window without sticking.

Thanks!

Report

jhnnslschnr

3 years ago

I find this script pretty useful, but i would like an option for deciding whether windows should be sticky on borders that are not between the windows.
However this behaviour causes a small bug regarding the maximization state: in case i have two quick tiled windows and shrink one from the bottom, the other one follows, but is still marked as vertically maximized, so i have to middle click the maximize button twice to remaximize it vertically.

Report

csslayer

4 years ago

I found this script seems also resize window that are overlapped, for example

--------
| | |
| |----
| |
-------

Resize the upper edge will resize both window, I can't think of a useful case for this.

Report

jospoortvliet

4 years ago

This is really awesome. I have a small behavioral suggestion which could make it a bit more intuitive, esp when you do NOT want a window to follow resizing: only resize both windows in the area where they touch each other. Say that one window is full-height of the screen and the other half-height, then resizing the full-height one in the area where the other is not, should leave the other alone, un-snapping them.

This is what I intuitively expected when I tried to 'unsnap' the windows. It is easier than having to move one of the windows to unsnap.

Not sure how hard this is, though, and in any case - great script :D

Report

C

Flupp

4 years ago

Unfortunately, as far as I know, it is not possible to get the mouse position with a KWin script. But I also think the behavior would be rather unintuitive if there are two small windows snapped to the same edge of a large window.

Report

Crespyl

4 years ago

Ever since I found out about the removal of tiling features in 4.10 I've been looking for a good work-around, and I'm really liking this so far.
Really elegant idea.

The one suggestions/request I have is that I would like to see support for the kwin "Resize Window" effect during resize, which displays the resizing window using a faster/more responsive scale effect until the resize ends. I've no idea how hard that might be though...

Report

Crespyl

4 years ago

Actually, I should clarify about the resize effect; The focused window is scaled appropriately, but the snapped window being resized by the script has to keep recalculating its layout.

Report

Henri

4 years ago

I've installed and enabled the script. When I snap two windows side by side and resize one window it doesn't resize the another one. Using Kde 4.10.2.

Report

C

Flupp

4 years ago

Have you forgotten to press the “Apply” button in systemsettings? (Maybe this seems like a stupid question, but I occasionally forget it myself.)

Have you tried restarting kwin after applying the changes (Alt+F2: kwin --replace)? I have to do this sometimes – this may be a bug in kwin, but I am not sure.

Alternatively you can try to log out and log in again.

Report

Henri

4 years ago

I've rebooted my system and it's working now as it should. Thanks. I love the script! Something that should be default in KDE imho.

Report

herrbatka

4 years ago

Thank you for 0.2 update. This script just got even better.

Report

herrbatka

4 years ago

I don't think that this script should effect shaded windows.

BTW: I can't live without it anymore! :D

Report

herrbatka

4 years ago

If stoping resizing overlaping windows is against usability or difficult to make then it's a good idea to prohibit resizing maximized windows instead.

Report

Contrast

4 years ago

Great idea. Good to see you're still active. I noticed the relative lack of commits to this project - https://bitbucket.org/flupp/smooth-tasks-fork/ - and thought you might have moved away from KDE. By the way, is that project more or less "dead?" I only ask because it was my favorite task manager widget, but this issue - https://bitbucket.org/flupp/smooth-tasks-fork/issue/22/custumizable-alignement-and-order-of-task made it unusable for me. (Sorry for the off-topic comment.)

Report

herrbatka

4 years ago

As I wrote It is awesome, but I see one small problem. This script should have a one additional check to not work on window that overlaps resized window.

BTW: I consider resizing column and row as a feature.

Report

herrbatka

4 years ago

Insanly good idea!

Report

C

Flupp

4 years ago

Thank you.

Report

4 years ago

v0.2.1:
[li]fixed resizing for windows spanning multiple screens[/li]

v0.2:
[li]maximized windows are ignored now[/li]
[li]shaded windows are ignored now[/li]
[li]windows on other screens are ignored now[/li]
[li]changed behavior when windows get very small while resizing[/li]

v0.1:
[li]initial release[/li]

File (click to download) Version Description Filetype Packagetype License Downloads Date Filesize OCS-Install DL
Details
version
0.2.1
updated Jul 24 2016
added Mar 09 2013
downloads today
page views today