A dynamic window manager for X11 written with Node.js
mixu.net
mixu.net
The actual window manager (which is what is implemented in this project) is separate. It's called Mutter and is written in C, like many other window managers.
Gnome, KDE, LXDE, Mate, Cinnamon (and windows 10) all seem to assume that I'd only every be doing the same thing on both monitors which just seems inherently wrong.
* one pool of WSs for all monitors (gnome,mate,win10)
* one shared pool of WSs for each monitor (xmonad)
* one pool of WSs for each monitor (awesome,dwm,e17)
So what xmonad has is one set of workspaces and each monitor can pick one from the shared pool! It's so great to have a WS dedicated for WWW on a side monitor and when something important comes up, I can bring that WS to the main monitor. Not easily done with the last idea.
I recently switched over to bspwm [0], and I really like it. Instead of automatic layouts, all areas can be split horizontally or vertically (similar to e.g. vim or tmux windowing). The layout tree can be manipulated in various ways, but the only on I use is rotate (ie. change vertical split to horizontal or vice versa). I don't have any status bars or launchers.
It's not all good, though. Just recently the config syntax changed and it was somewhat annoying to upgrade my old config to the new syntax, albeit the new syntax is much better. Hopefully it stabilizes soon.
It's also split in a funny way, so that bspwm only manages windows. It doesn't even listen to the keyboard, but typically uses another app (sxhkd [1]) for listening to the keyboard and launching a process (bspc) to control the wm. This is elegant and unix-ey but responsiveness suffers under heavy load. On the other hand, it's not tied together with a scripting language like e.g. Awesome is bound to Lua and XMonad to Haskell, which is nice.
Status bars and launchers are done with external apps but I don't use any at the moment. I do miss a desktop activity indicator a little, though (tint2 didn't work out of the box with bspwm, lemonbar was too hacky for my taste).
[0] https://github.com/baskerville/bspwm [1] https://github.com/baskerville/sxhkd
Would have expected either "Why you should use this", or "Why I/we wrote this".
JS (not node) is usable for embedded coding. An example would be http://www.espruino.com/. Newer boards that come on Kickstarter typically support JS since it's a great intro language for coding especially for kids.
var bazCopy = [];
for (var i=0; i<bar.baz.length; i++) {
var orig = bar.baz[i];
bazCopy[i] = {
fizz: orig.fiz,
buzz: orig.buzz
};
}
parentCopy.baz = bazCopy;
Over map/reduce/filter, and the like... Sometimes doing code reviews on pull requests is exhausting.It already has. See Tessel (now on v2 of their board), and the Espruino which powers the pretty sweet Puck.js board.
I'm working with Cortex-M0/M3 devices kicking bytes over wifi modems, and Microsoft believes a "device" is a desktop-class SoC with an Ethernet jack running Node.
But in this universe I'm all out of hair.
It is composed by the likes of PTC, IBM J9 Embedded or other alternative languages like .NET MF and Oberon.
But I do conceded it is not an option most of the time.
Good luck with the project.
I can se leveraging web/js as part of skinning/theming a window manager ui, but not sure about having it this far down the rabbit hole.
There's another project but I'm having a hard time finding the link again.
https://www.destroyallsoftware.com/talks/the-birth-and-death...
One example of bare metal JavaScript.
The biggest problem with such systems are more political than technical.
We have tons of CPU cycles to spare compared with what Burroughs, Xerox PARC, ETHZ and many other similar systems required.
As an example, the Xerox Alto used for Smalltalk-80 had 512 KB of RAM with 4 74181's running at 5.88 MHz.
By default:
Mod+Left click = move window
Mod+Right click = resize grid (when tiled) or window (when floating)