summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom Willemse2013-12-10 02:25:06 +0100
committerGravatar Tom Willemse2013-12-10 02:25:06 +0100
commit9c7e633e769d84efe971cb68011949428c5f98d4 (patch)
tree83268449c2db8acfe0bb9c816f01a0f0479f77d9
parent10367dd27f4e21035b095c9d951358656d1fec50 (diff)
downloadorgweb-9c7e633e769d84efe971cb68011949428c5f98d4.tar.gz
orgweb-9c7e633e769d84efe971cb68011949428c5f98d4.zip
Add old Notstumpwm blog post
-rw-r--r--articles/notstumpwm.org114
-rw-r--r--blog.org7
2 files changed, 121 insertions, 0 deletions
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]]