DragonFly On-Line Manual Pages

Search: Section:  


musca(1)                         Users Manual                         musca(1)

NAME

musca - A simple dynamic window manager

SYNOPSIS

musca [OPTIONS]

DESCRIPTION

Musca is a simple dynamic window manager for X, with features nicked from ratpoison and dwm. Musca operates as a tiling window manager by default. It uses "manual tiling", which means the user determines how the screen is divided into non-overlapping frames, with no restrictions on layout. Application windows always fill their assigned frame, with the exception of transient windows and popup dialog boxes which float above their parent application at the appropriate size. Once visible, applications do not change frames unless so instructed. Since not all applications suit tiling, a more traditional stacking window manager mode is also available, allowing windows to float at any screen location and overlap. There are no built in status bars, panels, tabs or window decorations to take up screen real estate. If the user wants any of these things, there are plenty of external applications available to do the job. Window decoration is limited to a slender border, which is coloured to indicate keyboard focus. Windows are placed in named "groups" which can be used in a similar fashion to virtual desktops. Groups can be added and removed on the fly, and each group has its own frame layout. The excellent "dmenu" utility is being used to execute commands and launch applications, and it can also act as a window and group switcher. Basic EWMH support allows use of common panels, pagers and the wmctrl utility. Windows and frames are navigated and focused on any mouse button click, including rolling the wheel, or alternatively driven entirely by the keyboard. Simple key combinations exist for window switching, group switching, frame control and screen switching. For more information about Musca visit http://aerosuidae.net/musca.html

OPTIONS

These command line options are recognized by Musca: -c [command] Connect to a running instance of Musca and execute a single Musca command supplied on the command line. -i Connect to a running instance of Musca and execute one or more EOL delimited Musca commands supplied on stdin. -s [path] Override the "startup" setting by specifying a custom path to a configuration file holding Musca commands to execute at startup. -v Report version number.

INITIALIZATION

During initialization, Musca will read the ~/.musca_start configuration file or any other text file which was specified by the 'startup' setting in config.h during compilation. The startup file should contain Musca commands one per line. Any comments must be on separate lines starting with hash (#). Blank lines are acceptable. For example: manage off trayer manage off Conky screen 1 name bling pad 0 0 0 32 exec trayer exec conky screen 0 add mail add net add work use mail exec firefox gmail.com exec evolution hsplit 1/2 set notify notify-send -t 3000 Musca "$(cat)" Note that launching applications from the startup file is acceptable, but can be of limited use if they have to start in more than one group. The 'exec' command runs asynchronously, and if applications are slow to create their windows, they may not necessarily appear in the expected group. In this case, a better option is launching applications from ~/.xinitrc.

MUSCA COMMANDS

add <name> create a new group called `name`, and switch to it. alias <name> <command> create a new Musca command. bind <on|off> <Modifier>+<Key> <command> bind a Musca command to a key combination with `on`, and remove it again with `off`. If the argument to `off` is `all`, it clears the bound key list. The `command` argument is only need for `on`. border <on|off|flip> (toggle) turn the current frame border on and off. catchall <on|off|flip> (toggle) set the current frame as a `catch-all`, where all new windows will open. client hints <on|off> (toggle) whether to respect X size hints for the current application window, such as PMinSize, PMaxSize, PResizeInc, PBaseSize, PAspect. command launch the dmenu Musca command input. cycle <local> <next|prev> cycle a hidden window into the current frame. `local` means cycle over windows previously displayed in the current frame. `next` or `prev` specify the direction, defaulting to next. Both arguments are optional. dedicate <on|off|flip> (toggle) dedicate the current frame to the current application. drop <name|nr> delete a group by `name` or by `nr`. dump <file> export a description (group name and frame layout) of the current group to `file`. exec <command> execute as shell command. focus <left|right|up|down> or <lfocus|rfocus|ufocus|dfocus> change focus to a frame in the specified direction. height <relative|pixel> resize frame vertically. hook <on|off> <name> <command> bind a Musca command to a named hook. hsplit <relative|pixel> split frame horizontally. kill <number|name> politely close the client window via a close event. When the optional argument `number` or `name` is given, kill the associated window, otherwise kill the current frame. Press again to forcibly kill it. load <file> import a description from `file` into the current group. manage <on|off> <name> (toggle) set whether the window class called `name` is managed or ignored. move <name|nr> move the current window to the group called `name` or to the group `nr`. If it's an unknown group, automatically creates the group `name` and then moves the current window to that group. name <name> rename the current group. only remove all other frames except the current one, resizing it to full screen. pad <left> <right> <top> <bottom> set the current group screen padding in pixels. quit exit Musca. raise <number|title> raise and focus a window in the current group by number (order opened) or title. remove remove the current frame and resize others to fill the gap. resize <left|right|up|down> resize the current frame in the specified direction. run <file> execute a file consisting of Musca commands. The file must contain one command per line. Lines starting with hash *#* are comments and blank lines are acceptable. say <text> display text via the method in the 'notify' setting. screen <number> switch to screen `number`. This is zero based, and should match the order in which screens are defined in "xorg.conf". set <setting> <value> set a Musca variable. See SETTINGS for a list of variable names. shell launch the dmenu shell command input. show <settings|bindings|unmanaged|hooks|groups|frames|windows|aliases> output a system table for diagnostic purposes. shrink <number|title> Minimize/Iconify (same thing in Musca) a window. slide <left|right|up|down> or <lslide|rslide|uslide|dslide> move current window into the frame to the left, right, up and down respectively. stack <on|off|flip> (toggle) switch the current group between `tiling` and `stacking` window modes. swap <left|right|up|down> or <lswap|rswap|uswap|dswap> swap current window with the contents of the frame to the left, right, up and down respectively. switch <window|group> launch the dmenu window or group switcher. undo revert the last frame layout change. use <name|number|(other)|(prev)|(next)> switch to a group called by its `name` or to a group by its `number`. `name` has precedence over `number`. If it's an unknown group, automatically creates the group `name` and then switch to that group. When `(other)`, `(prev)` or `(next)`, switch to the previously focused, previous or next group respectively. vsplit <relative|pixel> split frame vertically. width <relative|pixel> resize frame horizontally. Notes: Any Musca command may be prefixed with "silent" to prevent any messages being sent to the notify setting. This is useful for scripting, to prevent popup window noise. Example: musca -c "silent show groups" Relative values can be specified as a percentage or a fraction: Examples: hsplit 2/3 hsplit 33%

SETTINGS

border_catchall_focus Type: string Default: Green Border colour for focused `catchall` frames in tiling mode. border_catchall_unfocus Type: string Default: Dark Green Border colour for unfocused `catchall` frames in tiling mode. border_dedicate_focus Type: string Default: Red Border colour for focused `dedicated` frames in tiling mode. border_dedicate_unfocus Type: string Default: Dark Red Border colour for unfocused `dedicated` frames in tiling mode. border_focus Type: string Default: Blue Border colour for focused frames in tiling mode, and focused windows in stacking mode. border_unfocus Type: string Default: Dim Gray Border colour for unfocused frames in tiling mode, and unfocused windows in stacking mode. border_width Type: integer Default: 1 Width in pixels of frame borders in tiling mode, and window borders in stacking mode. The minimum value is 0, which makes frame borders invisible. command_buffer_size Type: integer Default: 4096 Size in bytes of the allocated buffer for passing commands and results to and from "musca -c" and "musca -i". dmenu Type: string Default: "dmenu -i -b" Command to run to launch 'dmenu' along with any customize appearance arguments. This can be replaced by another launcher so long as it accepts a list of \n terminated items on stdin and returns a single line on stdout. focus_follow_mouse Type: boolean Default: 0 (toggle) Set to 1 to enable. frame_display_hidden Type: integer Default: 1 When set to "0", empty frames will stay empty until a window is manually selected. When set to "1", empty frames will automatically display the first available hidden window. When set to "2", empty frames will automatically display only windows previously displayed in this frame. frame_min_wh Type: integer Default: 100 Minimum width and height in pixels of frames and managed windows. frame_resize Type: integer Default: 20 Size in pixels of a frame resize step. Setting this smaller will make resizing operations smoother, but also slower and increase load. frame_split_focus Type: string Default: current Where focus should go when splitting a frame. When set to "current", focus remains to the current frame. When set to "new", the new frame receives the focus. group_close_empty Type: boolean Default: 0 When set to "1" and navigating away from an empty group, automatically drop this group. notify Type: string Default: "echo `cat`" The command to run to send the user a message. By default Musca just writes to stdout. notify_buffer_size Type: integer Default: 4096 Size in bytes of the allocated buffer for passing messages to the command defined in the 'notify' setting. run_musca_command Type: string Default: "$MUSCA -i" The command to run when the user has entered a Musca command via 'dmenu'. run_shell_command Type: string Default: "sed 's/^/exec /' | $MUSCA -i" The command to run when the user has entered a shell command via 'dmenu'. stack_mouse_modifier Type: string Default: Mod4 The modifier key to use in `stacking` mode, along with mouse buttons 1 and 3, to move and resize windows respectively. startup Type: string Default: ~/.musca_start (optional) Path to a file containing Musca commands to run at start up. The default setting is relative to the working directory, i.e., Musca will use "$HOME/.musca_start" only if Musca is started from $HOME, which is the usual method for login managers. The file must contain one command per line. Lines starting with hash *#* are comments and blank lines are acceptable. switch_group Type: string Default: "sed 's/^/use /' | $MUSCA -i" The command to run once the user has selected a group name from 'dmenu'. switch_window Type: string Default: "sed 's/^/raise /' | $MUSCA -i" The command to run once the user has selected a window number and name from 'dmenu'. window_open_focus Type: boolean Default: 1 (toggle) Set to 0 to prevent new windows from taking the input focus. window_open_frame Type: string Default: current When set to "current", new windows always open in the currently focused frame. When set to "empty", new windows will try to find an empty frame to use. window_size_hints Type: boolean Default: 1 (toggle) Set to 0 to disable size hints checks for new windows. This can still be overridden on a per client basis using the client command.

USAGE

Default Keyboard commands Mod4+h hsplit 1/2 Mod4+v vsplit 1/2 Mod4+r remove Mod4+o only Mod4+k kill Mod4+c cycle Mod4+w switch window Mod4+g switch group Mod4+x shell Mod4+m command Mod4+d dedicate flip Mod4+a catchall flip Mod4+u undo Mod4+s stack flip Mod4+Left focus left Mod4+Right focus right Mod4+Up focus up Mod4+Down focus down Mod4+Next use (next) Mod4+Prior use (prev) Mod4+Tab screen (next) Mod4+Control+Left resize left Mod4+Control+Right resize right Mod4+Control+Up resize up Mod4+Control+Down resize down Mod4+Shift+Left swap left Mod4+Shift+Right swap right Mod4+Shift+Up swap up Mod4+Shift+Down swap down Mouse commands Mod4+Button1 Moves a window in stacking mode. Mod4+Button3 Resizes a window in stacking mode.

HOOKS

Executing Musca commands can optionally trigger a hook command. This can be useful for chaining Musca commands together or firing off scripts on certain events. For example, set default new group padding by hooking into the add command: hook on ^add pad 0 0 0 26 Or, attach to multiple commands: hook on ^(add|use) pad 0 0 0 26 For now, only Musca commands trigger hooks. In the future this may be extended to add hooks to X events.

STACKING MODE

Stacking window management mode is available at the window group level, on a group by group basis. Select the group you wish to make stacking, and press 'Modifier+s' or run the command 'stack on'. Any frames in the group will disappear. Other groups will not be affected. Floating windows can be moved using 'Modifier+Mouse1', i.e., hold down the modifier key and click the left mouse button on the window and dragging the mouse. Floating windows can be resized using 'Modifier+Mouse3' in the same fashion. Click-to-focus still works. Most of the frame manipulation related key combinations and commands are disabled in stacking mode. Note: there is no way to float specific windows while in tiling mode. To switch the group back to tiling mode, press 'Modifier+s' again or run the command 'stack off'. The group frames will be recreated as they were before the mode change. Make Musca ignore windows In config.h there is an unmanaged_windows[] list of WM_CLASS names: char *unmanaged_windows[] = { "trayer", "Xmessage", "Conky" }; Check out the xprop utility to find class names. Either change unmanaged_windows[] and recompile, or do on the fly in .musca_start with the 'manage' command. Note that any manage setting only takes effect for subsequently opened windows.

SEE ALSO

dmenu(1), wmctrl(1)

AUTHORS

Sean Pringle Musca April 10, 2009 musca(1)

Search: Section: