diff options
Diffstat (limited to 'notstumpwm.post')
-rw-r--r-- | notstumpwm.post | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/notstumpwm.post b/notstumpwm.post new file mode 100644 index 0000000..244fad5 --- /dev/null +++ b/notstumpwm.post @@ -0,0 +1,121 @@ +;;;;; +title: Notstumpwm +tags: experiments, notion, wm, lua, config, stumpwm, lisp, archlinux, exherbo +date: 2013-05-24 00:10 +format: md +;;;;; + +I have just returned from an excursion into the land of +[exherbo](http://exherbo.org/), which is an awesome source-based +distro, and I found that while I was gone, something changed that made +[stumpwm](http://www.nongnu.org/stumpwm/) cause a segmentation fault +in X11 a few seconds after starting up. + +I have tried everything I can think of to get it running again, but +alas, to no avail. So I started looking at alternatives again. Feeling +a little crazy I decided to give [notion](http://notion.sf.net) +another try. And it fits strangely well. + +It's configured/extended in lua, which I'm not particularly fond of, +and it has a (in my opinion) crazy default configuration. **But** it +also allows Emacs-like key combinations out-of-the-box, which is a +very big plus in my book. So the quest to bring it closer to my +stumpwm setup has begun. + +## Window layout + +One of the nicest additions to my stumpwm configuration I made in the +last few weeks was a loaded window configuration which put my Emacs +frames in a big chunk of my left monitor, my terminals on my left +monitor with just enough space for 80 columns and my web browser +filling my right screen. I had also set-up some rules to always place +them in the correct spots. + +I have not yet tried to automatically place the windows in the right +spots, but I do have the proportions right. I just had to delete the +right frames and resize the one for terminals and, by default, notion +remembers this set-up and automatically restores it when I log in. + +I will look at creating a special layout for this so I don't have to +worry about (accidentally) changing things. + +## run-or-raise + +I found this interesting +[page](http://www.xsteve.at/prg/ion/ion3_functions_xsteve.lua) about +`run-or-raise`-like functionality for Ion3, which notion is a fork of. +This is a little outdated, though, since notion has changed +(apparently) the workings of some functions and lua 5.2 introduced the +goto keyword, so I had to change it to this: + +``` +function oni_match_class(class) + local result = {} + ioncore.clientwin_i( + function (win) + if class `` win:get_ident().class then + table.insert(result, win) + return false + end + return true + end + ) + return result +end + +function xsteve_run_byclass(prog, class) + local win = oni_match_class(class)[1] + if win then + win:goto_() + else + ioncore.exec(prog) + end +end +``` + +There is no function to get a list of all the client windows, only a +function to iterate over them. For the moment I am only interested in +finding the first window with class CLASS, so I return `false` when a +match is found, this stops the iteration process. I also had to use +the `WRegion.goto_` function, instead of `WRegion.goto` because of the +mentioned change in lua 5.2, but they are the same. + +I then only have to bind it: + +``` +defbindings("WScreen", { + -- ... + submap("Control+Z", { + -- ... + kpress("E", "xsteve_run_byclass('emacsclient -ca emacs', 'Emacs')"), + kpress("W", "xsteve_run_byclass('conkeror', 'Conkeror')"), + kpress("C", "xsteve_run_byclass('urxvt', 'URxvt')"), + }), +}) +``` + +## Quoting C-z + +One of the coolest things about using a prefix in stumpwm that I have +been able to find in precious few other solutions is the ability to +send the prefix key to the applications you use, so you don't entirely +miss its functionality. In stumpwm this is easy, but in notion its a +little more work: + +``` +defbindings("WClientWin", { + -- ... + submap("Control+Z", { + -- ... + kpress("Q", "WClientWin.quote_next(_)"), + }), +}) +``` + +This means that I have to type `C-z q C-z` to send the `C-z` key to, +for instance, Emacs. That a few more keys than I was used to in +stumpwm, but at least it's possible. + +<!-- Local Variables: --> +<!-- mode: markdown --> +<!-- End: --> |