mupanel

This is a desktop panel for X11. Its main strength is the editable start menu. Here are a few other features: It has been tested in XFCE and FluxBox environments. Here is a screenshot:

Download

Latest 1.5:
1.3:
1.2:
1.1:
1.0:

Installation

After you've gotten the "mupanel" binary either by downloading or by compiling, you can simply move it to somewhere permanent. No other files need to be installed and the binary can live anywhere on the file system.

Installing The Static Binary

Just do:
 $ bunzip2 mupanel.bz2
 $ chmod +x mupanel
 $ mv mupanel /usr/bin
The static binary is compiled and linked with the musl libc. This library requires an environment variable called "TZ" to work properly. Set this variable to your time zone in ~/.profile or /etc/profile. I have this:
  TZ= GMT-2
  export TZ
which corresponds to the winter timezone in Turkey.

Installing from Source

Just untar the package and run build.sh. This may fail if your system doesn't have the necessary static libraries. If that is the case, remove the "-static" flag at the end of build.sh and try again.

Usage

Using mupanel with XFCE

In order to use it with XFCE, I did this:
  $ mv mupanel /usr/bin
  $ cd /usr/bin
  $ mv xfce4-panel xfce4-panel.old
  $ ln -s mupanel xfce4-panel
Of course, you need to be root to fiddle with things in /usr/bin.

Using mupanel with other window managers

Some window managers may need special settings to properly position the panel. If your WM doesn't work with mupanel out of the box, you can set the override_redirect option to 1. This will let the panel work properly, but windows may occupy the panel's space when maximized.

mupanel settings are stored in file $XDG_CONFIG_HOME/mupanel/config. XDG_CONFIG_HOME is usually $HOME/.config. In this file, you need to have the following:

  override_redirect 1
There are other settings as well, but I will document them later.

Configuring mupanel

When you start mupanel for the first time, the menu will contain only one entry which runs the menu editor. The editor works like a dual pane file manager in which sub-menus behave like folders and menu items behave like files. You navigate on the top and manipulate on the bottom.

At first use, you should scan your system for .desktop files. When you have the scan screen, you can set the search paths for .desktop files and associated icons.

When you're done, you should close the dialog using the "Done" button. Closing it from the window decoration causes it to forget about any changes you've made.

Other configuration lives in a text file mentioned before: $XDG_CONFIG_HOME/mupanel/config. Most settings stored here affect the looks of the panel, but there is one behavioral setting: you can turn the clock off by writing:

  clock_on 0
Here is a list of all settings:
define page_prop { int root; int window; int window_border; }
define pager_style { page_prop active; page_prop inactive; int border; }
define clock {
  int fg; int bg; int pad; string font_name; int font_size;
}

define taskbar
{
  int fg; int bg; string font_name; int font_size; int icon_size;
  int border;
  int max_size;
  int active;

  int left; int right; int mid;
}

define menu_style
{
  int left; int right; int mid; int mid2; int vspc;
  int icon_w; int icon_h;

  int font_size; string font_name;
  int bg; int fg;
  int seph; int sepv; int sepcolor; int hilight;
}

define switcher
{
  int fg; int bg; int hilight;
  int pad_top; int pad_mid; int pad_bot; int pad_horz; int pad_icon;
  int width;
  int font_size; string font_name;
  int enabled;
}

top_level top
{
  pager_style pager_style;
  taskbar taskbar;
  clock clock;
  int clock_on;
  menu_style menu_style;
  switcher switcher;

  array string menu_icon_path;
  array string menu_shortcut_path;

  int height;
  int bg; int fg;
  int right; int left; int spacing; int button_size;

  string left_box_file;
  string right_box_file;

  int override_redirect;
  int retain_desktop_number;
  int window_close_shortcut;
}

Let's say that you want to change the font of the menu. You'd write:
  menu_style { font_name "/usr/share/fonts/dejavu/DejaVuSans.ttf" }
Some options are nested deeper:
  pager_style { active { root 0x0000ff } }
which sets the root window color of the active desktop to blue in the pager.

Change Log

1.5: 09.02.2016
retain_desktop_number setting introduced a bug, all clients were being lumped up in the first desktop. Now it's fixed.
1.4: 04.02.2016
Alt+F4 and Alt+Tab shortcuts were added. These have to be enabled using the switcher.enabled and window_close_shortcut settings.
1.4: 04.02.2016
blackbox doesn't properly minimize windows. When you minimize a window, blackbox removes it from the virtual desktop and puts it into a 'sentinel' desktop. To counter that, I now ignore nonsensical desktop numbers if the window had a sensible one before. Some windows don't have sensical desktop numbers because they are 'sticky'. The new setting retain_desktop_number controls this behaviour. If it's set to 1, then this behaviour is activated.
1.3: 26.12.2015
Double fork to avoid zombie processes.
1.3: 26.12.2015
blackbox forks such as fluxbox, openbox etc. didn't position the panel correctly. Now I set usposition flag in WM_SIZE_HINTS. This way, I don't need to use override_redirect and the struts work correctly.
1.3: 26.12.2015
When looking for client windows, we skip those which have _DOCK type. Currently, when we find _NORMAL in the window type list, we assume it's a normal window. However, some windows such as stalonetray set both.

Now, this is done correctly. If a window has the _DOCK type, it gets ignored by the taskbar and the pager even if it also has the _NORMAL type.

1.3: 26.12.2015
If you can't get the name of a window, just print 'window' for its title. Currently, it's left blank, which looks really funny.

I had observed this with XFig only, which sets WM_ICON_NAME to an empty string but has a proper WM_NAME property. I used to read these in the incorrect order, now it's done correctly.

1.2: 14.01.2015
Modified p-start.c to use the menu button as a graymap. Now the start menu button is drawn with the foreground of the taskbar.

Modified the pager, start menu button and the button boxes to accept only button-1 clicks.

Things to Do