summaryrefslogtreecommitdiffstats
path: root/notstumpwm.post
diff options
context:
space:
mode:
Diffstat (limited to 'notstumpwm.post')
-rw-r--r--notstumpwm.post121
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: -->