You are not logged in.

#1 2012-10-22 06:00:49

BurntSushi
Member
From: Massachusetts
Registered: 2009-06-28
Posts: 362
Website

Wingo: floating and tiling window manager with per-monitor workspaces

triple-head-small.png

More screenshots.

Wingo has two features which, when combined, set it apart from other window managers (maybe):

1) Support for both floating and tiling placement policies. Wingo can be used as a regular floating (stacking) window manager, complete with decorations, maximization, sticky windows, and most other things you might find in a window manager. Wingo can also be switched into a tiling mode where window decorations disappear, and windows are automatically managed via tiling.

2) Workspaces per monitor. In a multi-head setup, each monitor can display its own workspace---independent of the other monitors. This makes changing your view of windows in multi-head setups much easier than in most other window managers, which will only allow you to see one workspace stretched across all of your monitors. Also, since placement policies like floating and tiling affect workspaces, this makes it possible for one monitor to be tiling while another is floating!

Inspiration

Wingo is heavily inspired by Openbox and Xmonad (and of course, pytyle). Basically, Openbox's floating semantics (although most window managers are the same in this regard) and Xmonad's automatic tiling style plus its workspace model (workspaces per monitor). I've also adopted Xmonad's "greedy" workspace switching and embedded the concepts from the "DynamicWorkspaces" contrib library into the Gribble command system.

Configuration

Wingo is extremely configurable. This includes binding any of a vast number of commands to key or mouse presses, theming your window decorations and setting up hooks that will fire depending upon a set of match conditions.

All configuration is done using an INI like file format with support for simple variable substitution (which makes theming a bit simpler). No XML. No recompiling. No scripting.

Configuring key/mouse bindings and hooks uses a central command system called Gribble. For example, one can add a workspace named "cromulent" with this command while Wingo is running:

AddWorkspace "cromulent"

But that's not very flexible, right? It'd be nice if you could specify the name of workspace on the fly... For this, simply use the "Input" command as an argument to AddWorkspace, which shows a graphical prompt and allows you to type in a name:

AddWorkspace (Input "Enter your workspace name:")

The text entered into the input box will be passed to the AddWorkspace command.

Please see the HOWTO-COMMANDS file for more info. We've barely scratched the surface.

Scripting Wingo

So I lied earlier. You can kind of script Wingo by using its IPC mechanism. While Wingo is running, you can send any command you like:

wingo-cmd 'AddWorkspace "embiggen"'

Or perhaps you can't remember how to use the AddWorkspace command:

wingo-cmd --usage AddWorkspace

Which will print the parameters, their types and a description of the command.

Want to pipe some information to another program? No problem, since commands can return stuff!

wingo-cmd GetWorkspace

And you can even make commands repeat themselves every X milliseconds, which is ideal for use with something like dzen to show the name of the currently active window:

wingo-cmd --poll 500 'GetClientName (GetActive)' | dzen2

Finally, you can see a list of all commands, their parameters and their usage: (even if Wingo isn't running)

wingo-cmd --list-usage

(Wingo actually can provide enough information (or will soon) for ambitious hackers to script their own layouts in whatever programming language they like without ever having to deal with X at all. Assuming it has support for connecting to unix domain sockets. Or you could just use a shell with 'wingo-cmd' if you're into that kind of tomfoolery.)

Dynamic Workspaces

Having some set number of workspaces labeled 1, 2, 3, 4, ... is a thing of the past. While Wingo won't stop you from using such a simplistic model, it will egg you on to try something else: dynamic workspaces.

Dynamic workspaces takes advantage of two things: workspace names and adding/removing workspaces as you need them.

This is something that I find useful since I'm typically working on multiple projects, and my needs change as I work on them. For example, when working on Wingo, I might add the "wingo" workspace, along with the "xephyr" workspace and the "gribble" workspace. When I'm done, I can remove those and add other workspaces for my next project. Or I can leave those workspaces intact for when I come back to them later.

With Wingo, such a workflow is natural because you're no longer confined to "removing only the last workspace" or some other such nonsense. Plus, adding a workspace requires that you name it---so workspaces always carry some semantic meaning.

(N.B. I don't mean to imply that this model is new, just uncommon; particularly among floating window managers. I've personally taken the model from xmonad-contrib's DynamicWorkspaces module.)

Tiling layouts

Right now, only simple tiling layouts are available. (Vertical and Horizontal.) Mostly because those are the layouts that I primarily use. I'll be adding more as they are demanded.

Dependencies

Wingo is written in pure Go (including all of its dependencies). As such, Go (and git) is the only package necessary to build and install Wingo. Once Wingo is installed, Go can be removed. (No Xlib/xcb, no cairo, no gui toolkits.)

Installation

Wingo is in the AUR. Alternatively, if you have a Go environment set up, you can download, build and install Wingo and all of its necessary dependencies with:

go get github.com/BurntSushi/wingo
go get github.com/BurntSushi/wingo/wingo-cmd

(Yes, Go's build system is really that awesome.)

There's a lot more at Wingo's github.

Please note that Wingo should be considered in a very alpha state. I've been using it for a little bit myself, but beyond that, Wingo is untested.

Last edited by BurntSushi (2012-10-22 06:02:16)


Education is favorable to liberty. Freedom can exist only in a society of knowledge. Without learning, men are incapable of knowing their rights, and where learning is confined to a few people, liberty can be neither equal nor universal.

Tu ne cede malis sed contra audentior ito

Offline

#2 2012-10-22 06:11:23

Pranavg1890
Member
From: Nagpur,India
Registered: 2012-09-07
Posts: 111

Re: Wingo: floating and tiling window manager with per-monitor workspaces

Great. Installing it right now.Always wanted a wm which would provide floating features like openbox and tiling features like xmonad. Will provide feedback soon..................................................


Using Openbox + Tint2 + Idesk

Offline

#3 2012-10-22 13:49:54

bam365
Member
Registered: 2010-06-05
Posts: 20

Re: Wingo: floating and tiling window manager with per-monitor workspaces

I have been waiting for a WM that was written in Go (I have been watching your project in particular). I tried to install it, but I'm getting this when I try go get on it:

package code.google.com/p/freetype-go/freetype: Get https://code.google.com/p/freetype-go/source/checkout?repo=: x509: certificate has expired or is not yet valid
package code.google.com/p/freetype-go/freetype/truetype: Get https://code.google.com/p/freetype-go/source/checkout?repo=: x509: certificate has expired or is not yet valid
package code.google.com/p/graphics-go/graphics: Get https://code.google.com/p/graphics-go/source/checkout?repo=: x509: certificate has expired or is not yet valid

I'm not sure if this is a problem with my local setup or with the repo code, and google wasn't any help...

Oh, and trying to use the AUR package yields the same result

Last edited by bam365 (2012-10-22 13:58:10)

Offline

#4 2012-10-22 14:11:18

BurntSushi
Member
From: Massachusetts
Registered: 2009-06-28
Posts: 362
Website

Re: Wingo: floating and tiling window manager with per-monitor workspaces

bam365 wrote:

I have been waiting for a WM that was written in Go (I have been watching your project in particular). I tried to install it, but I'm getting this when I try go get on it:

Hmm, I'm not sure. What happens why you try to visit one of the URLs in your browser? https://code.google.com/p/freetype-go/s … kout?repo=

I'm working on getting a wingo-bin into the AUR. Not just because of this, but because Wingo needs a lot of ram to compile.


Education is favorable to liberty. Freedom can exist only in a society of knowledge. Without learning, men are incapable of knowing their rights, and where learning is confined to a few people, liberty can be neither equal nor universal.

Tu ne cede malis sed contra audentior ito

Offline

#5 2012-10-22 14:57:32

bam365
Member
Registered: 2010-06-05
Posts: 20

Re: Wingo: floating and tiling window manager with per-monitor workspaces

I was able to clone the freetype repo with Mercurial, but I get this warning:

warning: code.google.com certificate with fingerprint d0:9c:03:be:6d:8a:80:32:ea:52:9b:95:f4:26:2c:55:87:fb:df:a7 not verified (check hostfingerprints or web.cacerts config setting)

I'm still not exactly sure if this is a local problem or a problem with the repo, but my guess is that go get is having a similar verification failure and instead of warning me it's failing outright.

Offline

#6 2012-10-22 15:03:03

BurntSushi
Member
From: Massachusetts
Registered: 2009-06-28
Posts: 362
Website

Re: Wingo: floating and tiling window manager with per-monitor workspaces

I believe that error is OK.

I'm still not exactly sure if this is a local problem or a problem with the repo, but my guess is that go get is having a similar verification failure and instead of warning me it's failing outright.

I'm not sure either. I haven't heard of anyone else having this problem unfortunately and things are still working for me.

What if you try

go get -u -v -x code.google.com/p/freetype-go/freetype

and paste the output here?


Education is favorable to liberty. Freedom can exist only in a society of knowledge. Without learning, men are incapable of knowing their rights, and where learning is confined to a few people, liberty can be neither equal nor universal.

Tu ne cede malis sed contra audentior ito

Offline

#7 2012-10-22 15:27:24

bam365
Member
Registered: 2010-06-05
Posts: 20

Re: Wingo: floating and tiling window manager with per-monitor workspaces

Whoops, mystery solved. I am working on VM, and the system date/time got completely out of wack on me. I fixed the date/time, and go get works now.
Unfortunately, it looks as though you need 2GB of memory to compile, which is far too stout for my poor VM. I'll have to wait till tonight to try it.

Last edited by bam365 (2012-10-22 15:28:44)

Offline

#8 2012-10-22 15:35:19

BurntSushi
Member
From: Massachusetts
Registered: 2009-06-28
Posts: 362
Website

Re: Wingo: floating and tiling window manager with per-monitor workspaces

bam365 wrote:

Unfortunately, it looks as though you need 2GB of memory to compile, which is far too stout for my poor VM. I'll have to wait till tonight to try it.

Gah. This requirement is pissing me off. I'm going to try to reduce it today. Too many people are running up against it.


Education is favorable to liberty. Freedom can exist only in a society of knowledge. Without learning, men are incapable of knowing their rights, and where learning is confined to a few people, liberty can be neither equal nor universal.

Tu ne cede malis sed contra audentior ito

Offline

#9 2012-10-22 17:23:46

mah0
Member
Registered: 2011-04-21
Posts: 47

Re: Wingo: floating and tiling window manager with per-monitor workspaces

It's not working for me. It starts, but when I press any key it crashes with no messages in the wingo.log.
Using this command from INSTALL file:

exec wingo -p 1 --log-level 3 --log-colors > $HOME/wingo.log

P.S.: installed from AUR
Edit: Tried with --log-level 4 but still, wingo.log is empty

Last edited by mah0 (2012-10-22 17:27:27)

Offline

#10 2012-10-22 17:55:35

BurntSushi
Member
From: Massachusetts
Registered: 2009-06-28
Posts: 362
Website

Re: Wingo: floating and tiling window manager with per-monitor workspaces

Ack, I forgot to have the command redirect stderr to stdout. Try this instead: (I've removed --log-colors so it won't be cluttered with escape sequences when you post the output here.)

exec wingo -p 1 --log-level 3 > $HOME/wingo.log 2>&1

Hopefully that will produce something useful.


Education is favorable to liberty. Freedom can exist only in a society of knowledge. Without learning, men are incapable of knowing their rights, and where learning is confined to a few people, liberty can be neither equal nor universal.

Tu ne cede malis sed contra audentior ito

Offline

#11 2012-10-22 18:15:41

mah0
Member
Registered: 2011-04-21
Posts: 47

Re: Wingo: floating and tiling window manager with per-monitor workspaces

Offline

#12 2012-10-22 18:28:34

BurntSushi
Member
From: Massachusetts
Registered: 2009-06-28
Posts: 362
Website

Re: Wingo: floating and tiling window manager with per-monitor workspaces

Do you have any weird keyboard mappings set up? (Where "weird" in this case is pretty much anything other than the default.)


Education is favorable to liberty. Freedom can exist only in a society of knowledge. Without learning, men are incapable of knowing their rights, and where learning is confined to a few people, liberty can be neither equal nor universal.

Tu ne cede malis sed contra audentior ito

Offline

#13 2012-10-22 18:39:46

mah0
Member
Registered: 2011-04-21
Posts: 47

Re: Wingo: floating and tiling window manager with per-monitor workspaces

BurntSushi,
No. it's default
Edit: wingo.log (pastebin) with default configs in $HOME/.config/wingo/ ("wingo --write-config")

Last edited by mah0 (2012-10-22 18:49:43)

Offline

#14 2012-10-22 19:07:48

BurntSushi
Member
From: Massachusetts
Registered: 2009-06-28
Posts: 362
Website

Re: Wingo: floating and tiling window manager with per-monitor workspaces

mah0 wrote:

BurntSushi,
No. it's default
Edit: wingo.log (pastebin) with default configs in $HOME/.config/wingo/ ("wingo --write-config")

I'm not quite sure what's going on, and it probably isn't an easy fix unfortunately. It's especially perplexing given that you have a default X configuration set up. (Using english, standard US keyboard, etc...)

I've filed an issue.


Education is favorable to liberty. Freedom can exist only in a society of knowledge. Without learning, men are incapable of knowing their rights, and where learning is confined to a few people, liberty can be neither equal nor universal.

Tu ne cede malis sed contra audentior ito

Offline

#15 2012-10-22 19:23:27

mah0
Member
Registered: 2011-04-21
Posts: 47

Re: Wingo: floating and tiling window manager with per-monitor workspaces

BurntSushi.
Issue solved!
I was using this to switch keyboard layouts:

Section "InputClass"
        Identifier "keyboard-layout"
        Driver "evdev"
        MatchIsKeyboard "yes"
        Option "XkbLayout" "us, ua"
	Option "XkbOptions" "grp:caps_toggle,grp_led:caps"
EndSection

Now, after I removed this, it works. Thank you for your help.

Offline

#16 2012-10-22 20:45:17

BurntSushi
Member
From: Massachusetts
Registered: 2009-06-28
Posts: 362
Website

Re: Wingo: floating and tiling window manager with per-monitor workspaces

I've removed the 2GB memory requirement for compiling. It shouldn't take more 200MB now.


Education is favorable to liberty. Freedom can exist only in a society of knowledge. Without learning, men are incapable of knowing their rights, and where learning is confined to a few people, liberty can be neither equal nor universal.

Tu ne cede malis sed contra audentior ito

Offline

#17 2012-10-23 10:35:34

murugan
Member
Registered: 2010-08-02
Posts: 26

Re: Wingo: floating and tiling window manager with per-monitor workspaces

Its great. I am currently using it on my work machine.
Can you please add /usr/share/xsessions/wingo.desktop in the package? so that login managers(like lxdm) picks it up and displays in available session list. I have created one in my machine and works fine.

Last edited by murugan (2012-10-23 10:37:19)

Offline

#18 2012-10-23 12:27:25

murugan
Member
Registered: 2010-08-02
Posts: 26

Re: Wingo: floating and tiling window manager with per-monitor workspaces

Problem while running java GUI application same as xmonad. I tried all the suggestions from Arch wiki. But didn't work. Otherthan this I have no problem with wingo.

Last edited by murugan (2012-10-23 12:28:17)

Offline

#19 2012-10-23 16:09:27

bam365
Member
Registered: 2010-06-05
Posts: 20

Re: Wingo: floating and tiling window manager with per-monitor workspaces

I tried go getting this again. Now I'm getting this:

# github.com/BurntSushi/wingo
/home/blake/go/pkg/linux_386/github.com/BurntSushi/wingo/bindata.a(DejaVuSans.ttf.s): elf object but not 386
/home/blake/go/pkg/linux_386/github.com/BurntSushi/wingo/bindata.a(close.png.syso): elf object but not 386
/home/blake/go/pkg/linux_386/github.com/BurntSushi/wingo/bindata.a(maximize.png.sys): elf object but not 386
/home/blake/go/pkg/linux_386/github.com/BurntSushi/wingo/bindata.a(minimize.png.sys): elf object but not 386
/home/blake/go/pkg/linux_386/github.com/BurntSushi/wingo/bindata.a(wingo.png.syso): elf object but not 386
/home/blake/go/pkg/linux_386/github.com/BurntSushi/wingo/bindata.a(wingo.wav.syso): elf object but not 386
github.com/BurntSushi/wingo/bindata.getDejavusansTtf: _DejavusansTtf: not defined
github.com/BurntSushi/wingo/bindata.getDejavusansTtf: _eDejavusansTtf: not defined
github.com/BurntSushi/wingo/bindata.getDejavusansTtf: _DejavusansTtf: not defined
github.com/BurntSushi/wingo/bindata.getClosePng: _ClosePng: not defined
github.com/BurntSushi/wingo/bindata.getClosePng: _eClosePng: not defined
github.com/BurntSushi/wingo/bindata.getClosePng: _ClosePng: not defined
github.com/BurntSushi/wingo/bindata.getMaximizePng: _MaximizePng: not defined
github.com/BurntSushi/wingo/bindata.getMaximizePng: _eMaximizePng: not defined
github.com/BurntSushi/wingo/bindata.getMaximizePng: _MaximizePng: not defined
github.com/BurntSushi/wingo/bindata.getMinimizePng: _MinimizePng: not defined
github.com/BurntSushi/wingo/bindata.getMinimizePng: _eMinimizePng: not defined
github.com/BurntSushi/wingo/bindata.getMinimizePng: _MinimizePng: not defined
github.com/BurntSushi/wingo/bindata.getWingoPng: _WingoPng: not defined
github.com/BurntSushi/wingo/bindata.getWingoPng: _eWingoPng: not defined
github.com/BurntSushi/wingo/bindata.getWingoPng: _WingoPng: not defined
too many errors

It looks like you made a commit yesterday that had to do with this bindata thing but it broke the build. Is that supposed to be fixed yet?

Offline

#20 2012-10-23 16:16:32

BurntSushi
Member
From: Massachusetts
Registered: 2009-06-28
Posts: 362
Website

Re: Wingo: floating and tiling window manager with per-monitor workspaces

murugan wrote:

Problem while running java GUI application same as xmonad. I tried all the suggestions from Arch wiki. But didn't work. Otherthan this I have no problem with wingo.

Hmm. Could you maybe provide more details? Which Java app were you running? What happened?

What's weird is that Wingo is a reparenting window manager, so it shouldn't have a problem.


Education is favorable to liberty. Freedom can exist only in a society of knowledge. Without learning, men are incapable of knowing their rights, and where learning is confined to a few people, liberty can be neither equal nor universal.

Tu ne cede malis sed contra audentior ito

Offline

#21 2012-10-26 01:34:00

BurntSushi
Member
From: Massachusetts
Registered: 2009-06-28
Posts: 362
Website

Re: Wingo: floating and tiling window manager with per-monitor workspaces

bam365 wrote:

I tried go getting this again. Now I'm getting this:

It looks like you made a commit yesterday that had to do with this bindata thing but it broke the build. Is that supposed to be fixed yet?

It should have been fixed, but apparently not. I've given up on what I was trying to do and did something less convenient (for me).

Anyway, it should be fixed. AUR has been updated.


Education is favorable to liberty. Freedom can exist only in a society of knowledge. Without learning, men are incapable of knowing their rights, and where learning is confined to a few people, liberty can be neither equal nor universal.

Tu ne cede malis sed contra audentior ito

Offline

#22 2012-10-26 14:14:25

Grinch
Member
Registered: 2010-11-07
Posts: 265

Re: Wingo: floating and tiling window manager with per-monitor workspaces

Very interesting BurntSushi, I've been playing around a bit with Go myself and I like the language in general (with some caveats). I wonder if you found anything in particular with Go in this project which made it easier to program as opposed to say C (which is what most WM's are programmed in) ?

Offline

#23 2012-10-26 20:22:55

BurntSushi
Member
From: Massachusetts
Registered: 2009-06-28
Posts: 362
Website

Re: Wingo: floating and tiling window manager with per-monitor workspaces

Grinch wrote:

I wonder if you found anything in particular with Go in this project which made it easier to program as opposed to say C (which is what most WM's are programmed in) ?

For the one exception of the libraries that are available, using Go to write a window manager is a huge win on all accounts. (I had to write the entire X stack before I could write a window manager.)

Window managers don't need to be performant and they certainly don't require manual memory management, so that alone makes using Go more than feasible.

Wingo's IPC mechanism was a piece of cake to setup with Go. It took me under an hour to go from no IPC to having a working server/client.

The commands in Wingo are defined by simple structs with Go's `reflect` package. Here's a simple example of a calculator, and here's where the Wingo commands are defined. Each struct defines the command name, the number of parameters and the types of each parameter. This makes error messages given to the user when they mess up really nice. Also, I can produce documentation for all of the Wingo commands automatically. Try `wingo-cmd --list-usage`.

I'd also say that interfaces in Go were very nice too. I used them everywhere, and they were most significant in allowing me to create a modular design. It's actually possible to lift sub-packages right out of Wingo and use them in your own window manager if you wanted. All you need is to provide an implementation of the "Client" interface expected by each package.

And in general, Go's expressiveness made programming a window manager very nice (comparatively). As an example, Wingo is close to the number of features that Openbox has, but is only ~16,000 lines whereas Openbox is ~50,000.


Education is favorable to liberty. Freedom can exist only in a society of knowledge. Without learning, men are incapable of knowing their rights, and where learning is confined to a few people, liberty can be neither equal nor universal.

Tu ne cede malis sed contra audentior ito

Offline

#24 2012-10-26 20:56:38

netfun81
Member
Registered: 2008-07-20
Posts: 32

Re: Wingo: floating and tiling window manager with per-monitor workspaces

wow, nice wm.  Install was a breeze, love having floating layout on one screen and tiling on another.   In the past, for certain apps that wouldn't play well with a tiling wm, I would have to kill X, change my .xinitrc to start openbox and startx again.   This seems like the perfect solution.   I do have one question since this is in active development.

Does "go get github.com/BurntSushi/wingo"  always pull the latest from git?   Can i just delete the wingo executable from go/bin and run command to upgrade to latest or do I need to delete config files each time to remain compatible?

Offline

#25 2012-10-26 21:05:50

BurntSushi
Member
From: Massachusetts
Registered: 2009-06-28
Posts: 362
Website

Re: Wingo: floating and tiling window manager with per-monitor workspaces

netfun81 wrote:

wow, nice wm.  Install was a breeze, love having floating layout on one screen and tiling on another.   In the past, for certain apps that wouldn't play well with a tiling wm, I would have to kill X, change my .xinitrc to start openbox and startx again.   This seems like the perfect solution.

Thanks :-)

netfun81 wrote:

Does "go get github.com/BurntSushi/wingo"  always pull the latest from git?   Can i just delete the wingo executable from go/bin and run command to upgrade to latest or do I need to delete config files each time to remain compatible?

Yes, `go get ...` always pulls from the latest git. I make sure that Wingo builds before pushing to `master`. I'll use a different branch for any longer term experiments.

You could use `wingo-git` in the AUR, but `go get` is just as good. (Indeed, the PKGBUILD uses `go get`!)

One note those, use this to update to instead:

go get -u github.com/BurntSushi/wingo
go get -u github.com/BurntSushi/wingo/wingo-cmd

You shouldn't have to delete any executables.

As far as configuration files go... I'm not sure. I haven't figured out how I'm going to handle them yet. I don't think any well-formed configuration file will break Wingo, but it's certainly possible that old configuration files will miss out on new features/options. (For example, I just added some new focus follows mouse options.) Wingo will always maintain an in-memory default configuration, so missing configuration options will also never break Wingo.

You can always check out the new configuration files by running `wingo --write-config`. You'll have to move `~/.config/wingo` to a temporary location first though.

If you're installing from the AUR, I'll try to add post installation messages for any big changes.

FYI, I should say that installation is so easy because of Go. :-) /plug

Last edited by BurntSushi (2012-10-26 21:07:44)


Education is favorable to liberty. Freedom can exist only in a society of knowledge. Without learning, men are incapable of knowing their rights, and where learning is confined to a few people, liberty can be neither equal nor universal.

Tu ne cede malis sed contra audentior ito

Offline

Board footer

Powered by FluxBB