I like that the whole WM is implemented in two files, a .h for configuration and a .c. The code looks clean and has embedded ascii-art. This looks like a project made with love.
Thank you, this is my first proper C project so I have learnt a lot and have come a long way. I have really enjoyed working on it and would certainly describe it as a labour of love.
Really dislike software with configuration baked into the code, every key binding and experiment requires recompilation which prevents managing it sanely through a package manager.
I get the appeal of "minimal" in this case, but it just doesn't work for me.
I understand that it isn't a nice idea having code and configuration mixed together and that splitting them would be preferable. However, howm takes less than 1 second to compile on my laptop, once you have a configuration that you like you'll rarely change it and I feel that having the configuration in code makes it easier for hackers to find subtle new ways of customising howm.
A downside that I can see to using a header file for configuration is that a compile is required for installation and configuration. I don't see this as being too much of an issue as I don't plan on making howm available as a binary, so a compiler would be required anyway.
The benefits of this model include less attack surface area and much leaner code resulting in less bugs. It doesn't fit every project, but the "configuration" code for this WM would likely be larger than the WM itself.
I really love vim keybindings and I use them wherever I can (firefox with vimperator, the shell etc), however I'm not sure that modes make sense on a window manager. In my opininon it doesn't have that many operations, and they don't differ that much from each other, I think that having to think which mode you're on and which one you need to use would only introduce friction and slow you down (in this case the normal mode is not that normal, i switch windows as often or more than I create new ones or switch layouts).
Another thing is that the operators, motions, and objects each need its modifier keys; in my opinion that just misses the point of having modes and one of the strong points of the vim keybindings. Because of that it was really hard for me to understand how to use Howm:
the first time around I skipped the configuration part and went directly to the examples, and you don't mention anywhere there that q4c (for example) is really Alt_L+q, Alt_L+4, Alt_L+c. When I read the configuration part and the configuration file, to see each keybinding I got it, but still it took some googling to figure out that I needed to use xmodmap to know which keys are the MODXMASK.
EDIT: It seems you do mention that the operators, motions and objects need a modifier key, I missed it. Still, I think that it would be clearer if the keys to press were explicitly indicated (like Alt_L+q, Alt_L+4, Alt_L+c)
I have some more ideas for operations to add, this is the first release I have done and so it is lacking some features. I agree that some people might not find certain commands to be in the correct mode. You can change that from the configuration file though. I certainly take your point on board about moving being in normal mode and will have a think about whether or not this should be the default.
That's really great feedback about the documentation, I'll make it more obvious which modifiers keys need to be held down. Again, you can change the modifier key used for operators, counts and motions so that howm only uses one modifier key. This is how I had it for most of howm's development. I changed to using two modifier keys as I felt that it was nicer to have a logical separation between the commands and the operators, motions and counts. It also meant that some keys could be reused but with different modifiers.
One of the reasons I continue development work predominantly in windows OS is its vast support for mouse-free operability. I love vim for the same reason. I tried ratpoison in linux but found it to interfere with application keyboard shortcuts. I also tried AwesomeWM but it wasnt as graceful as the windows key in windows.
If someone was to solve this issue elegantly it would compel me to reconsider moving my daily development activities back to linux
Have you tried other tiling window managers ? i3 [0] comes to mind, but XMonad [1] and Awesome WM [2] are 2 other popular choices in this domain. There are plenty of others to pick from, too [3].
"I tried ratpoison in linux but found it to interfere with application keyboard shortcuts."
Huh? Rat poison is the only window manager I've used that interferes (meaningfully) with precisely zero application keyboard shortcuts. This is because it only intercepts one key, and having pressed that you there is a key bound in the next map to send the original key. And of course you can pick that top level key.
Edited to add: Though having said that, does anyone have any thoughts as to why my compose key doesn't work in ratpoison? I'd like to cut out the switch to unity when I want to study Polish...
I use xmonad when I'm on linux. Now that I'm required to use windows, I use python-windows-tiler[0]. The one thing I sorely miss about xmonad is its multi-monitor support. You get nine workspaces. Each of these is monitor independent. It is trivial to put ws1 on m1 and ws2 on m2, then switch m2 to have ws7. The tiling window managers I've found for ms Windows simply don't have any concept of having workspaces independent of monitors. Every workspace always take up all of your monitors.
On linux I'll usually have a browser workspace, an ide workspace, an email/chat workspace, a console workspace, etc. And I'm able to rapidly put any combination of workspaces on my set of monitors.
I have used the awesome window manager (http://awesome.naquadah.org) for a long time. I think most of the big tiling window managers (DWM, xmonad) are similar.
The only things I ever use a mouse for on my linux computers is browsing the web.
Harvey, your code looks very nice and expressive with appropriate comments. There is some space for improvements on this matter (well, there always is) but I found it very good to read and easy to follow!
Thanks for the kind words! It'd be great if you could tell me what improvements you think would be best, I'm trying to make howm's code as nice as I can. I know that having everything in one file is frowned upon, but I quite like the simplicity of it.
It's loosely inspired by dwm in that it uses a similar configuration file and keybinding system.
On a technical level, howm uses xcb- a more modern and efficient X protocol binding. dwm uses xlib.
From a user's perspective, howm has multiple modes for manipulating different kinds of windows as well as operators, motions and counts. This means that multiple windows can have the same operation performed upon them. For example (assuming that the correct modifier keys are being pressed) pressing "q4w" will lead to 4 windows being closed.
howm also has some features that dwm only provides as patches, such as useless gaps and a grid layout.
[+] [-] zimbatm|11 years ago|reply
[+] [-] hunt|11 years ago|reply
[+] [-] joaomsa|11 years ago|reply
I get the appeal of "minimal" in this case, but it just doesn't work for me.
[+] [-] hunt|11 years ago|reply
A downside that I can see to using a header file for configuration is that a compile is required for installation and configuration. I don't see this as being too much of an issue as I don't plan on making howm available as a binary, so a compiler would be required anyway.
[+] [-] doki_pen|11 years ago|reply
[+] [-] Zikes|11 years ago|reply
[+] [-] amackera|11 years ago|reply
[+] [-] shapeshed|11 years ago|reply
[+] [-] blux|11 years ago|reply
[+] [-] Rampoina|11 years ago|reply
Another thing is that the operators, motions, and objects each need its modifier keys; in my opinion that just misses the point of having modes and one of the strong points of the vim keybindings. Because of that it was really hard for me to understand how to use Howm: the first time around I skipped the configuration part and went directly to the examples, and you don't mention anywhere there that q4c (for example) is really Alt_L+q, Alt_L+4, Alt_L+c. When I read the configuration part and the configuration file, to see each keybinding I got it, but still it took some googling to figure out that I needed to use xmodmap to know which keys are the MODXMASK.
EDIT: It seems you do mention that the operators, motions and objects need a modifier key, I missed it. Still, I think that it would be clearer if the keys to press were explicitly indicated (like Alt_L+q, Alt_L+4, Alt_L+c)
[+] [-] hunt|11 years ago|reply
That's really great feedback about the documentation, I'll make it more obvious which modifiers keys need to be held down. Again, you can change the modifier key used for operators, counts and motions so that howm only uses one modifier key. This is how I had it for most of howm's development. I changed to using two modifier keys as I felt that it was nicer to have a logical separation between the commands and the operators, motions and counts. It also meant that some keys could be reused but with different modifiers.
[+] [-] pweissbrod|11 years ago|reply
If someone was to solve this issue elegantly it would compel me to reconsider moving my daily development activities back to linux
[+] [-] rakoo|11 years ago|reply
Have you tried other tiling window managers ? i3 [0] comes to mind, but XMonad [1] and Awesome WM [2] are 2 other popular choices in this domain. There are plenty of others to pick from, too [3].
[0] http://i3wm.org/
[1] http://xmonad.org/
[2] http://awesome.naquadah.org/
[3] https://en.wikipedia.org/wiki/Tiling_window_manager
[+] [-] dllthomas|11 years ago|reply
Huh? Rat poison is the only window manager I've used that interferes (meaningfully) with precisely zero application keyboard shortcuts. This is because it only intercepts one key, and having pressed that you there is a key bound in the next map to send the original key. And of course you can pick that top level key.
Edited to add: Though having said that, does anyone have any thoughts as to why my compose key doesn't work in ratpoison? I'd like to cut out the switch to unity when I want to study Polish...
[+] [-] djeikyb|11 years ago|reply
On linux I'll usually have a browser workspace, an ide workspace, an email/chat workspace, a console workspace, etc. And I'm able to rapidly put any combination of workspaces on my set of monitors.
[0]: https://github.com/Tzbob/python-windows-tiler
[+] [-] sp332|11 years ago|reply
[+] [-] rkowalick|11 years ago|reply
The only things I ever use a mouse for on my linux computers is browsing the web.
[+] [-] maikklein|11 years ago|reply
[+] [-] hunt|11 years ago|reply
This imgur album has a couple of gifs: http://imgur.com/a/8aqD9
[+] [-] TimGremalm|11 years ago|reply
[+] [-] dons|11 years ago|reply
[+] [-] deweerdt|11 years ago|reply
[+] [-] cessor|11 years ago|reply
Really well done, keep up the good work!
[+] [-] hunt|11 years ago|reply
[+] [-] gpo|11 years ago|reply
[+] [-] hunt|11 years ago|reply
On a technical level, howm uses xcb- a more modern and efficient X protocol binding. dwm uses xlib.
From a user's perspective, howm has multiple modes for manipulating different kinds of windows as well as operators, motions and counts. This means that multiple windows can have the same operation performed upon them. For example (assuming that the correct modifier keys are being pressed) pressing "q4w" will lead to 4 windows being closed.
howm also has some features that dwm only provides as patches, such as useless gaps and a grid layout.
[+] [-] unknown|11 years ago|reply
[deleted]
[+] [-] cheery|11 years ago|reply
[deleted]