Add old Notstumpwm blog post
This commit is contained in:
parent
10367dd27f
commit
9c7e633e76
2 changed files with 121 additions and 0 deletions
114
articles/notstumpwm.org
Normal file
114
articles/notstumpwm.org
Normal file
|
@ -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.
|
7
blog.org
7
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]]
|
||||
|
|
Loading…
Reference in a new issue