Exwm – Emacs X Window Manager
github.com
github.com
Both have really similar designs, but for me StumpWM has a decisive advantage: it's implemented in Common Lisp and doesn't run inside of Emacs. Still, it has pretty good Emacs integration and many commands are Emacs-inspired. For example, there's a winner-mode equivalent.
Since Emacs is not multi-threaded, if something inside Emacs freezes your whole X session will become in blocked case you run Exwm. For the same reason, it is a bit more responsive.
After a decade using XMonad, I switched to StumpWM after carefully test-driving exwm and other options. I found I really prefer manual window tiling. StumpWM is really underappreciated. It's the successor of ratpoison, which kind of started the whole tiling window manager saga in Linux.
I've been using EXWM for a few years now and the fact that emacs isn't multi-threaded has caused me very little pain. It really isn't something to worry about. I've had way more issues with StumpWM than I have ever had with EXWM.
I find it slightly amusing that you list Common Lisp as a plus for StumpWM. At the time the gigamonkeys lisp book was published I was using StumpWM and had some issues I wanted to fix (which still existed when I finally switched to EXWM). Trying to learn Common Lisp exposed me to a community that is, to this day, the absolutely most toxic I have ever experienced. For a decade lisp was anathema to me until I discovered Clojure and from there realized that the Scheme and other non Common Lisp communities are great.
Unfortunately the developer stopped supporting it. Because of that I stopped using Linux. There is a fork which was maintained at least for some time, but I don't know how feasible to use with modern X/Wayland apps it is right now.
Before I discovered tiling window managers I used to use evilwm and later fvwm customized to work the same as evilwm. Both of those window managers had options to make windows snap to the screen edge or each others borders if moved within so many pixels of each other. Maybe something like that would work for you?
I believe at the time I gave up I was trying to get weather information into StumpWM by querying the NWS SOAP api over https. I vaguely remember that there was no http library that supported SSL? I was told to just use the SBCL FFI to wrap libcurl, that SSL was useless anyway and I was an idiot for even wanting to use it.
Maybe the community is better now, but I see comments on Clojure articles from Common Lispers sometimes and I have my doubts.
I don't think that answer makes a large and diverse 'community' of thousands of people forever 'toxic'.
You also are not helping make the case that the Common Lisp community is fine. Your response completely ignores the actual issue which makes it feel like a passive aggressive attack.
I don't know, that probably wasn't your intent. But I already stated that I had extremely poor experiences with the community so I'm not exactly primed to give the benefit of the doubt.
I don't make the case. There is no single 'Common Lisp community' and I have no idea how all the various groups are doing.
I know lots of great people in the Common Lisp community. It would make me sad to see them labelled as 'toxic'.
I only rarely use the splitting function; mostly, I work with one window per monitor. I've worked for years on a laptop like this. Now I have two external displays and my laptop display. The main one in front of me usually shows Emacs; a vertical one on the side shows a terminal or two.
That said, it was neat running slime inside Emacs to connect to and reprogram the window manager Emacs was running inside, in real time.
If StumpWM would get a “i3-mode” easily enabled OOB, I would probably give it another try.
Is there a way around this?
I just played around with exwm a bit, and that seems like it would be a major issue for me. I love the idea of exwm, though.
BTW, I had to run exwm under emacs26 (the first blocker for emacs25 in my case was the function string-version-lessp). The wiki[0] says that it'll work with emacs24 and greater.
I also had to install it with package-check-signatures set to nil, because my emacs couldn't verify the signature on elpa package exwm-0.22. It's possible that's a spacemacs configuration issue, or something to do with switching from emacs25 to 26.
Mostly I just installed the async package and enabled all its features. I could have also sworn that I spent a lot of time configuring gnus so it wouldn't freeze my X session. Looking at my init.el though I don't see anything other than the standard gnus configuration. Maybe my tweaks got rolled into gnus as defaults at some point?
Why is CL an advantage? How does it make the software better than if it weren't written in CL?
It is a big big problem and one that has almost driven me to leave EXWM more than once. The developer has stated this is intended behavior which is insane to me.
I don't really see the issue once you're used to it.
Love emacs, but I hang/tweak/break it enough that I would be scared to use it as my main WM. But it would be awesome to open R graphics inside it, a la Rstudio.
[1] https://www.x.org/releases/X11R7.7/doc/man/man1/Xnest.1.xhtm...
For example you might initially keep using tools like dmenu to launch applications, and over time move to using things like ivy/counsel for that instead. My window management (inside of emacs) habits also changed a lot.
If it's of interest, my emacs configuration is here: https://github.com/tazjin/emacs.d
Most of the EXWM specific stuff is in `init/nixos.el`.
The Arch AUR package is also fine.
Lastly, you can go the Quicklisp route (which is a Common Lisp package manager, equivalent to pip or gem). That works fine too and is distribution independent.
I personally started building into vim keybindings in emacs via spacemacs, and then over time created my own config with the features I needed from spacemacs (which is much more than just vim emulation).
PS: Should also mention https://github.com/noctuid/general.el. I don't use this one, but it is pretty popular too.
I guess I made a good choice since emacs is able to integrate an x manager (lol).
The issue for me is my tmux leader is Ctrl-f and my vim Ctrl-p uses ctrl-p.. ctrl-d and ctrl-u are used in vim for page up and down. And some other nice Ctrlkeys are taken by vim as well. I will need to carry these key bindings into emacs evil mode...
So Really running out of good leader keys I can use !
I started on evil-mode only. Heard about space macs but I wasn’t sure how well it could work with emacs ide-packages such as SLIME for lisp (and I will want to find emacs ides for Java, Js, Python, C, Cpp, ruby, Ocaml - any suggestions here much appreciated as well)
I am currently a happy i3/neovim/Mate User, but this looks really cool
I just recently started using i3wm but miss my some features from OpenBox, this seems like it has some features of both i3wm and OpenBox.
But will it work well with dmenu/i3bar i wonder?
Magit people usually compare with stock git.
I simply can't imagine my life without Magit, Org-mode and (EXWM on Linux).
What this exactly means to me is the ability to manage as much possible with keeping fingers on the "home row", ideally without having to touch mouse or arrow keys at all. Is that achievable? Without having to introduce plethora of different keybindings?
Yes, that's possible with modality. So for example: I want to be able to control my music volume by pressing `j` and `k`. And move windows up and down also by using `j` and `k`. And resize windows vertically, again, by `j` and `k`. And move windows across multiple monitors, and resize font in my browser, scroll up and down in my pdf viewer, etc. etc. Sounds crazy? Well, maybe. But I promise you, once you get used to it - you wouldn't want to go back to your ordinary, boring and complicated old way.
My main work machine is a Mac and fortunately for OSX there's an automation tool called Hammerspoon. One day I wrote a nice config inspired by Spacemacs, so for the lack of better ideas I called it Spacehammer. You can find it here: https://github.com/agzam/spacehammer.
To my surprise sadly there's nothing similar to Hammerspoon exists for Linux. Initially I simply wanted something trivial: "how do I rebind `Ctrl+Tab`/`Shift+Ctrl+Tab` to `Win+J`/`Win+K` so I can switch between tabs in my browser more efficiently?". See? `j` and `k` again. Even something simple like that turned out to be difficult to achieve. And AFAIK none of the popular WMs let you do that sort of stuff. With the exception of StumpWM (formerly known as RatPoison).
I wanted to try StumpWM but honestly I didn't give a heartfelt attempt to actually use it. I am still skeptical and the main reason is - CommonLisp. It is an amazing language but its popularity has declined drastically and at this point it's pretty much "Latin" of PLs. Yes, it's cool to know it but practicality of that knowledge might be a bit questionable. Learning whole new language for the sake of configuring a window manager doesn't feel very enticing to me. But at some point maybe I will give it a try.
Then I found EXWM. And almost immediately regretted not trying it out sooner. It took a few days to configure it and next thing I know I wrote a plugin for it: https://github.com/agzam/exwm-edit. Yes, the project is still young and from time to time you stumble upon some rare quirks. Multimonitor setup is a pain. It doesn't support "gaps" so praised in other WMs - I personally don't care about aesthetics of my WM though.
With EXWM everything simply becomes just a buffer in Emacs - your browser, Slack, pdf-viewer, music player - you name it. Because everything goes through Emacs you can create complex keybindings and "simulate" keypresses, for example: you can make `Win+W` to act like `Ctrl+W` in your browser or any other app (no context switching between Mac and Linux).
It is indeed an awesome project and if you are an avid Emacsen and seasoned Linux user - I really encourage you to give it a try.