[HN Gopher] A Native Tiling Window Manager for Windows 10, Inspi...
       ___________________________________________________________________
        
       A Native Tiling Window Manager for Windows 10, Inspired by I3wm
        
       Author : mcyoloswagham
       Score  : 178 points
       Date   : 2021-02-28 17:35 UTC (5 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | ianhanschen wrote:
       | Looks cool. If you want to get rid of your hook DLLs and the need
       | for the x86ipc child process, you can use SetWinEventHook() with
       | EVENT_OBJECT_CREATE / EVENT_OBJECT_DESTROY as min/max event
       | values and WINEVENT_OUTOFCONTEXT to get notification on newly
       | created/destroyed windows, all within the context of your
       | process. No hook DLLs required.
        
         | mcyoloswagham wrote:
         | Oh wow, that's huge I'll definitely add that, that'll help a
         | lot with dealing with processes that don't need injection, and
         | protected processes (anticheats/drm etc...).
         | 
         | edit: though regardless, I need to inject ForceResize into
         | them, but still maybe I can come up with some way to subclass
         | windows without subclassing windows lmao, need some gui thread
         | message hijacking
        
       | willjp wrote:
       | Thank you! I am very excited to try this
        
       | galkk wrote:
       | Are workspaces integrated with windows desktops or they are
       | separate entities?
        
         | mcyoloswagham wrote:
         | They are integrated with windows desktops. You can see them in
         | the Win+Tab menu
        
       | emily-c wrote:
       | This is awesome. It's always nice to see new Win32 productivity
       | software. Thank you!
        
       | greggturkington wrote:
       | Fantastic work, THANK you!
       | 
       | A suggestion: get rid of any spaces between the windows, but keep
       | the snapping.
       | 
       | Sort of how Aero Snap works today, snap to the entire left half,
       | or the entire right.
       | 
       | Keep the 2x2 grid you have now, but just make it easy to snap to
       | the full size of each grid cell (or 1x2 or 2x1 spaces).
        
         | mcyoloswagham wrote:
         | you can totally change that in the settings, set the
         | "adjust_for_nc" on and disable gaps. I'll change the defaults
         | right now. it's in config.json the explanations are here
         | mcyoloswagham.github.io/win3wm
        
       | Miner49er wrote:
       | I'll have to try this one out, I've been using PyleWM[0] for a
       | few months, and it works well, but doesn't have as much workspace
       | support as this project, it seems.
       | 
       | One recent thing PyleWM has added, but isn't in the readme, is a
       | fuzzy program launcher, does this have anything like that?
       | 
       | [0]: https://github.com/GGLucas/PyleWM
        
       | flipcoder wrote:
       | Nice work. I'll definitely be using this!
        
       | filmgirlcw wrote:
       | Great work! I love FancyZones but this is a bit more configurable
       | (a friend on Twitter calls FZ "lighter touch," which I think is a
       | perfect descriptor, whereas this is more flexible and more of a
       | traditional tiling manager) and it's such a good start!
       | 
       | I'm primarily a macOS user, but projects like this really make me
       | wish there were more options (yes, I'm aware of Amethyst, Yabai,
       | Spectacle (now Rectangle), Hammerspoon, and so on. Those options
       | all have their own deficits and trade-offs) in the Apple world.
        
         | abandonliberty wrote:
         | FZ is awesome. I think few people are aware of it.
         | 
         | https://docs.microsoft.com/en-us/windows/powertoys/fancyzone...
        
       | majkinetor wrote:
       | One important distinction is that you can still resize the window
       | without affecting other windows, so not really true tiling WM in
       | linux sense, where you can never escape the tiles.
       | 
       | I have never seen Windows WM behave the way i3 does.
        
         | RMPR wrote:
         | > where you can never escape the tiles
         | 
         | Tbf that's exactly what floating mode is for
        
         | ianhanschen wrote:
         | Windows can be made to behave like i3, with a lot of work. I've
         | done a few different things over the years, but I never got
         | into i3 so I haven't made my personal WM software work like
         | that.
         | 
         | It's a bit of a curiosity nowadays, but Windows started out as
         | a tiling system - if memory serves, overlapping windows were
         | not supported until 2.1. But even then, it wasn't like i3.
         | 
         | - guy that worked on the Windows WM (USER & DWM) for over a
         | decade
        
           | mcyoloswagham wrote:
           | damn that's very interesting, due to certain performance
           | issues on very old hardware, I was debating writing a driver
           | for win32k, make it work faster, like I mean 1-5ms render
           | times, but it was too much of a mess. DWM & Win32k are very
           | complicated
        
             | ianhanschen wrote:
             | Before coming to Microsoft, I wrote my own EngAlphaBlend()
             | accelerator driver in 2003 or so. I knew a lot about how
             | things worked from disassembly but after coming to MS in
             | 2004 I quickly destroyed a lot of my own assumptions. Mess?
             | no. Complicated? yes.
        
               | mcyoloswagham wrote:
               | well I mean it was too much of a mess in my own work, I
               | know a bit about win32k, but trying to deal with all the
               | xxx, yyy,zzz functions and the locks and everything kinda
               | confused me, and so I gave up. :(
        
       | rtlfe wrote:
       | Can you turn it on/off without logging out? I use i3 at work, and
       | I'd guess I would want it 20% of the time for my personal
       | computer.
        
         | mcyoloswagham wrote:
         | yes you can the default shortcut for turning it off and
         | restoring everything to a single virtual destkops is MOD + T
        
       | tiborsaas wrote:
       | How is this different from the default tiling support in Win 10?
       | If you drag a window to a corner/edge it starts to offer you
       | options to add windows.
        
       | josteink wrote:
       | On Linux I'm a now full time sway-user, and a former i3 user.
       | 
       | While on Windows I never found a good i3-replacement, I found a
       | fairly mature and stable tiling WM I've been contributing too,
       | although it's more in the style of xmonad.
       | 
       | So if you're into tiling WMs and you're stuck on Windows you may
       | want to give that one a try too:
       | 
       | https://workspacer.org/
        
       | fortran77 wrote:
       | It's nice that Windows allows alternate Windows Managers unlike
       | that other proprietary operating system. Give users a choice!
        
       | qwerty456127 wrote:
       | Does it have workspaces (virtual monitors)? Can it save them and
       | restore them after I reboot?
        
         | mcyoloswagham wrote:
         | yes it does have workspaces, 9 of them that aren't just moving
         | around windows but windows's own Virtual Desktop, but no the
         | state isn't stored through reboots, though that is one of the
         | goals.
        
           | lolive wrote:
           | I have dozen _named_ workspaces on i3. Limiting them or not
           | providing the ability to (re)name them or create them on the
           | fly makes the whole experience of virtual desktops pretty
           | lame.
        
             | NathanielK wrote:
             | The biggest issue on W10 is that there's no way to even
             | more windows from one workspace to another without several
             | clicks, unlike most Linux implementations that have hot
             | keys or dragging the icon around.
        
             | mcyoloswagham wrote:
             | since it's using virtual desktops you can just win+tab and
             | do that
        
               | lolive wrote:
               | Direct access through names and autocompletion: I won't
               | accept anything less productive. Also: Auto creation of
               | workspaces on new name, auto deletion of workspace when
               | it contains no window.
               | 
               | This is the base of i3.
               | 
               | That plus its scriptability that is so freaking awesome.
        
       | Already__Taken wrote:
       | How different from https://docs.microsoft.com/en-
       | gb/windows/powertoys/fancyzone... is i3 or this i3 spinoff?
        
         | bondarchuk wrote:
         | > _The subtractive Grid model starts with a three column grid
         | and allows zones to be created by splitting and merging zones,
         | resizing the gutter between zones as desired._
         | 
         | i3wm is basically like that except ad-hoc instead of
         | preconfigured, and starting from a single full-screen window.
        
         | mcyoloswagham wrote:
         | fancyzones is pretty good but it's more like fixed layouts that
         | you can change to, where as i3wm and other twms let you change
         | the layout on the fly making them a bit more flexible.
        
       | vxNsr wrote:
       | So happy to see so much more active development in windows stuff
       | these days, for a while it looked like all the cool stuff was
       | happening in the apple ecosystem, I'm happy to see developers
       | starting to trust windows again.
       | 
       | One of the things that I'd love to see in this that fancy zones
       | is missing is the ability of windows to remember where they
       | should be after I reconnect to my dock. Like maybe I run some
       | shortcut right before I disconnect the dock that stores window
       | locations and then when I reconnect I click the shortcut again to
       | restore them to those monitors.
        
         | mcyoloswagham wrote:
         | what do you mean by reconnect to my dock? Feel free to open an
         | issue if you'd like and I'll try and to my best to implement
         | it. edit: I think I understand, WinWM has a hotkey called
         | refresh after you move windows you can use it to return all
         | windows to the current layout.
        
           | rodrigodlu wrote:
           | I think he is talking bout plugging or unplugging a
           | new/different display.
           | 
           | You can connect external displays to USB-C or Thunderbolt
           | docks / hubs.
        
             | mcyoloswagham wrote:
             | ah I see, I'll add that to the checklist
        
               | DoingIsLearning wrote:
               | Worth remembering that you can configure a machine to
               | either mirror a display (I would expect the most common
               | case) or extend the desktop (new display becomes display
               | #2).
               | 
               | It is also not uncommon to dock a laptop at a workstation
               | with dual or triple monitors.
        
         | 0xdba wrote:
         | > One of the things that I'd love to see in this that fancy
         | zones is missing is the ability of windows to remember where
         | they should be after I reconnect to my dock.
         | 
         | When I worked in an office, and had frequent meetings I had to
         | take my laptop to, it irked me enough to come up with my own
         | solution:
         | 
         | https://github.com/nearwood/windmill
        
           | jmlucjav wrote:
           | can you save different 'layouts' so you can load a different
           | one in diff context?
        
             | 0xdba wrote:
             | No. It's pretty bare-bones. Save before a disconnect,
             | restore after re-connect.
             | 
             | And it's hWnd based, so if the window handle ever changes
             | it won't work. Also won't work for admin windows, unless
             | run as an admin.
             | 
             | But it worked well enough for me.
        
       | graycat wrote:
       | Gee, what the OP has is a LOT of advanced Windows software but,
       | still, gives results not what I prefer!!
       | 
       | I don't want to change the sizes of the windows and but just move
       | them so that I can easily make use of all of them and for that
       | goal:
       | 
       | For each window, I want its UL (upper left) corner to be on a
       | line from roughly the top center of the screen to roughly the
       | left center of the screen. And I want all those UL corners
       | equally spaced on that line.
       | 
       | So, for the goal: With this arrangement (1) can see at least a
       | little of each of the windows, (2) usually can see the title of
       | each of the windows, and (3) properties (1) and (2) continue to
       | hold for any Z-order for the windows, i.e., can click on the
       | windows in any order, thus, changing the Z-order, and still have
       | properties (1) and (2). So, with (3) can just click on any
       | window, bring it to the top of the Z-order, see all of that
       | window, and still have (1) and (2). That is, can continue working
       | with all the windows without more _arranging_.
       | 
       | I wrote a little script in Rexx to do this _arranging_ and put an
       | icon on the desktop to run that script. Best place for the icon?
       | Sure, in the UL corner of the screen thus, not covered by any of
       | the so _arranged_ windows.
       | 
       | The version of the Firefox Web browser I'm using does something
       | similar BUT with a difference: The line I mentioned goes from the
       | top center of the screen to the center RIGHT of the screen
       | instead of the center left. Sooo, when a window is brought to the
       | top of the Z-order, usually all the windows with UL corner to the
       | lower right are fully covered, i.e., usually can't see any part
       | of any of them. So, lose property (3) and often soon also
       | properties (1) and (2).
       | 
       | So, having that "line" go to the center left of the screen
       | instead of the center right is a biggie!
        
         | mcyoloswagham wrote:
         | I'm not too sure what you mean, if you mean the little
         | inequalities from the top of the screen, the option
         | "adjust_for_nc" should be turned on, I should probably change
         | that to include it. As for the rest of the stuff I'm not sure
        
           | graycat wrote:
           | I thought what I wrote was crystal clear.
           | 
           | For your response, I have no idea what you mean:
           | 
           | > little inequalities from the top of the screen
           | 
           | I know nothing about any "little inequalities". Maybe you are
           | talking about the screen in the OP, and I am not. By "the
           | screen", I mean just the full rectangular video _screen_ of
           | essentially any computer running Windows for the past 20+
           | years.
           | 
           | My post mentioned a "LINE". By a "line" I mean one as in high
           | school plane geometry, what get when use a ruler to draw a
           | "line", what is meant by a "line" from about the 2nd grade
           | on, what every carpenter call a "line".
           | 
           | Then for the "screen", that is just the video screen on the
           | computer. As we know it is rectangular. The long dimension is
           | horizontal. The "top" of the screen is the line that forms
           | the upper horizontal boundary of the screen. Go to that line,
           | the "top of the screen", and pick the midpoint. Now go to the
           | left side of the screen, and pick its midpoint. Now imagine a
           | "line" from the first point to the second. So we would call
           | that line a diagonal line.
           | 
           | With all that geometry clear, in arranging windows on the
           | screen, I want the UL (upper left) corner of each window on
           | that line. I thought that all that was clear.
           | 
           | For
           | 
           | > option "adjust_for_nc"
           | 
           | I have no idea what that is. Maybe it has to do with the
           | output of the OP. All I know about the output of the OP is
           | the screen image I saw in the documentation. There I saw what
           | looked like full but low magnification versions of all the
           | windows on the screen. As I started my post:
           | 
           | > gives results not what I prefer!!
           | 
           | Mod: HN does not like my post. Please delete it. Thanks.
        
       | marliechiller wrote:
       | i was just thinking of removing windows 10 and going back to
       | manjaro i3 this evening. Will give this a go before I do! Thanks
        
       | saint_angels wrote:
       | this is great! Did you encounter any Win10 quirks, that wouldn't
       | allow to recreate full i3 window-tiling experience like
       | fullscreen focus?
        
         | mcyoloswagham wrote:
         | Yeah, there are definitely a few, I've implemented an
         | experimental thing that removes titlebars for windows, but
         | that's totally dependant on the application it works on, so
         | browers that do fancy things don't work as well, but something
         | like notepad/cmd/etc... work pretty well.
         | 
         | Also the focus bar is a little overlay line that could be
         | improved, but it's very difficult to make it like in i3wm
         | without covering a significant portion of a windows content
         | since you can't really control a windows rendering, etc....
        
       | joombaga wrote:
       | Nice work! One thing I always miss from MacOS is per-monitor
       | workspaces. Does your WM support this? Gonna give it a shot.
       | Right now I'm using the Microsoft's FancyZones PowerToy which is
       | more about custom snap zones than proper tiling.
        
         | mcyoloswagham wrote:
         | well each monitor has it own workspace, but when you change
         | workspaces it will change them all in sync with each monitor,
         | so I don't know if that's what you mean. you can have different
         | layouts on different monitors if that is what you mean
        
           | joombaga wrote:
           | Okay, I think that answers my question.
           | 
           | I meant the ability to change workspaces on each monitor
           | separately. In MacOS I can have a 2 monitors each with 2
           | workspaces, and switch to workspace 2 on monitor 1 without
           | affecting monitor 2's workspace.
        
             | Cu3PO42 wrote:
             | I also find this feature extremely useful on macOS,
             | especially combined with the ability to move entire
             | workspaces from one monitor to another.
             | 
             | I have a primary and secondary monitor (with actual
             | physical differences) and being able to easily move a task
             | from one to the other is such a useful feature. I'd go so
             | far as to say this is the most significant thing from macOS
             | I'm missing right now.
        
           | deorder wrote:
           | May be you can help me with this.
           | 
           | I am using the same computer from 2 locations, one 10 meters
           | away (using extension cables) from the computer. Both
           | locations have a keyboard and a mouse. When I start an
           | application it always opens on the primary display, not the
           | display I initiated the opening of the application from.
           | 
           | On Linux with X11 (with BSPWM or not) this is flawless. The
           | multi display support in Linux / X11 seems to be much more
           | advanced compared to Windows.
           | 
           | Any idea how I can get this in Windows 10?
        
             | mcyoloswagham wrote:
             | I actually have no idea, this is something I had to work
             | around in my twm, since the windows always spawn on the
             | primary monitor
        
             | ianhanschen wrote:
             | On Linux you have two X servers instances, with 2 window
             | managers, and 2 consoles. Each X server is working with a
             | different display, so naturally the content ends up on the
             | right display.
             | 
             | On Windows you have just one console, one window manager,
             | and multiple monitors. The easiest way to accomplish this
             | is to clone the two monitors in display settings so you're
             | always using the same monitor, regardless of where you're
             | sitting.
        
       | ghostpepper wrote:
       | This is really cool. It doesn't seem to capture every app though
       | - the first one I tried was Calculator, which just floated on
       | top.
        
         | mcyoloswagham wrote:
         | Yes my bad, this is a debugging remnant because all UWP windows
         | share the same name meaning that it gets very confusing when
         | the settings and other applications get captured by WinWM, or
         | like the wifi popup, etc...
         | 
         | I'll address the bug soon
        
       ___________________________________________________________________
       (page generated 2021-02-28 23:00 UTC)