Emacs-like WM

9 February 2012 0:00 AM (emacs | hlwm | guile)

I've been trying to get a more emacs~/~stumpwm-y feel in my window manager since I discovered that I can use xbindkeys to create emacs-like keybindings.

Today I got a little closer to that. I had some bash scripts that helped my xbindkeys setup with things like switching tags and moving windows, since that involved gathering some information and piping it into dmenu.

I figured out how I should do that, though. So now I've changed my ~/.xbindkeys.scm to include some functions to do that for me. You could look at it here.

I was having some trouble with calling dmenu though. I started with trying to use open-pipe with OPEN_BOTH argument so I could first write to and afterwards read from it. I didn't get it to work, I think it's because I didn't send an EOF at the end of the input, but I haven't found out how to do that yet. I ended up building a string that looks like echo 'value1\nvalue2\nvalue3\n' | dmenu and using that with open-input-pipe and using read-line on it. This looks like:

(define list '("value1" "value2" "value3"))
(let* ((file (open-input-pipe
              (string-append "echo '" (string-join list "\n") "' | dmenu")))
       (tag (read-line file)))
  (close-port file))

(display tag)

That will give the result of the dmenu call, it can be seen in the choose-tag function.

Of course you shouldn't forget that tag can still be nil or something that isn't in the list, so I use the string? and member functions to check whether I got something at all and if it exists in list.

Next up will be seeing what I can do with the information at hand. First idea is to reorder the tags and such as they do in emacs. I can (easily) keep track of the last picked value and I could keep an eye on the current value. Another idea, not directly related to all this is run-or-raise functionality, if I keep track what is started/moved where I might be able to do that as well, although that is not emacs related.

No responses

Leave a Reply