== My mouse button bindings in fvwm, my window manager I've [[previously described TwoEnvironmentsApproach]] my X Windows window manager as highly customized. If you've looked at [[the picture of my desktop MyDesktopTour]], this may sound a little bit overdone; sure, it looks different, but a lot of that is just running custom programs and a fair amount of the rest of it is ultimately chrome and not crucially important. As it happens, the visual appearance of my desktop is just the tip of the iceberg; most of my really hard to part with customizations are in mouse and keyboard bindings. Today I'm going to run down my commonly used unusual mouse bindings, as an example both of what I do and of what you can do in fvwm. (I'm going to skip conventional mouse button bindings, the sort of thing that people find perfectly normal and predictable.) To start with, I should note that mouse button bindings in fvwm can be different in different contexts, and also be made conditional on various modifier keys. This can lead to a huge and bewildering number of different mouse bindings, as you are about to see. The left mouse button: * with plain Alt, it raises the the window I'm over. * with Shift+Alt, it iconifies the window I'm over. The middle mouse button: * with plain Alt, it moves the window I'm over. * with Shift+Alt on the root window, it switches me back to the previous virtual screen I was on. Repeatedly clicking it will flip back and forth between two virtual screens. * by itself on the root window, it brings up my main application menu. * with Control on the root window, it brings up a menu of things I can do with the current X selection (such as [[use it as an URL or Google it ../unix/MyFirefoxRemoteControl]]). * when I am placing a new window, it lets me resize the window as it's being placed. The right mouse button: * by itself on the root window or anywhere with Alt, it brings up my main menu (which has various window management operations, lets me start _xterm_, and cascades to all of my other menus). One of the things I use this for is conveniently resizing windows. * with Control on the root window, it brings up a menu of 'root on host ' for commonly used hosts. * when I'm placing a window, it immediately locates the window where the mouse is *and* extends it down to the bottom of the screen. This is a very convenient way to get tall terminal windows. (In window titlebars (for windows that have them), the left mouse button raises and possibly moves the window, the middle mouse button moves the window, and the right button lowers it.) Pretty much all of these bindings are completely ingrained and unconscious by now; generally I couldn't possibly tell you what the bindings actually are, even as I'm using them. I can write them down now only because I carefully read through my fvwm configuration file. The functionality in these bindings may strike you as incomplete; for example, I can use a mouse button to raise a window but not to lower it. Part of this is because I also have keyboard bindings in addition to mouse bindings and for some things I generally work through the keyboard bindings instead. Part of this is just because I don't want to steal too many mouse bindings from programs.