From 9c7e633e769d84efe971cb68011949428c5f98d4 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Tue, 10 Dec 2013 02:25:06 +0100 Subject: [PATCH] Add old Notstumpwm blog post --- articles/notstumpwm.org | 114 ++++++++++++++++++++++++++++++++++++++++ blog.org | 7 +++ 2 files changed, 121 insertions(+) create mode 100644 articles/notstumpwm.org diff --git a/articles/notstumpwm.org b/articles/notstumpwm.org new file mode 100644 index 0000000..df63ded --- /dev/null +++ b/articles/notstumpwm.org @@ -0,0 +1,114 @@ +#+TITLE: + +* Notstumpwm :notion:wm:lua:config: + +I have just returned from an excursion into the land of [[http://exherbo.org/][exherbo]], which +is an awesome source-based distro, and I found that while I was gone, +something changed that made [[http://www.nongnu.org/stumpwm/][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 [[http://notion.sf.net][notion]] 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 [[http://www.xsteve.at/prg/ion/ion3_functions_xsteve.lua][page]] 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: + + #+BEGIN_SRC lua + 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 + #+END_SRC + + 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: + + #+BEGIN_SRC lua + 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')"), + }), + }) + #+END_SRC + +*** 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: + + #+BEGIN_SRC lua + defbindings("WClientWin", { + -- ... + submap("Control+Z", { + -- ... + kpress("Q", "WClientWin.quote_next(_)"), + }), + }) + #+END_SRC + + 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. diff --git a/blog.org b/blog.org index 9709925..3975273 100644 --- a/blog.org +++ b/blog.org @@ -43,3 +43,10 @@ :PUBDATE: <2013-08-11 0:54> :END: Making git see more diff. [[file:articles/some_quick_git_diff_tips.org][Read]] + +* Notstumpwm :notion:wm:lua:config: + :PROPERTIES: + :RSS_PERMALINK: articles/notstumpwm.html + :PUBDATE: <2013-05-24 0:10> + :END: + Pretending Notion is (like) stumpwm. [[file:articles/notstumpwm.org][Read]]