Skip to content

About

My local fork of Metacity/Gnome window-manager to be able to group windows together (into one window as tabs)

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Metacity with tab groups

A fork of Metacity 3.58.1 (based on Debian's 1:3.58.1-2 package) for GNOME Flashback on X11, built for Ubuntu 24.04.

It adds:

  • Tab groups: put several windows, such as your chat apps, into one window with a tab strip on top. A tab is marked when its app wants attention, and it shows how many notifications you haven't read. A group has one entry of its own in the window list.
  • Notification archive: metacity-notification-archive records your desktop notifications in a list you can search. It can sit in a group as one more tab.
  • metacity-tab-groups: a window and a command line tool to rename, save and set up groups.
  • Tab Groups panel applet: a button for each group in the GNOME Flashback panel, with its unread count and a menu of its tabs.

Screenshot of action

Screenshot of action

How it works

  • A group behaves like one window: its tabs share size, position, maximize, minimize and workspace. Only the active tab is shown; the others are hidden the same way as windows on another workspace.
  • The tab strip is a small window that Metacity keeps glued to the top of the group.
  • The archive watches notifications on the session bus without changing them, and stores them in SQLite. It works out which window each one belongs to and sets the _METACITY_TAB_UNREAD X property on that window, and Metacity draws that number as the tab's badge. Focusing the window marks its notifications read.

Install

Ubuntu PPA

For Ubuntu 24.04 LTS from PPA:

sudo add-apt-repository ppa:kedazo/ubuntu-hacking
sudo apt update
sudo apt install metacity
sudo apt install metacity-tab-groups-applet   # the panel applet, if you want it

Build a .deb for yourself:

As Debian packages (from this directory):

sudo apt build-dep ./
dpkg-buildpackage -b -us -uc
sudo apt install ../metacity_*.deb ../metacity-common_*.deb ../libmetacity3_*.deb \
  ../metacity-tab-groups-applet_*.deb

Just from sources (LFS):

Or from source:

NOCONFIGURE=1 ./autogen.sh
./configure --prefix=/usr && make && sudo make install

Then log out and back in.

Usage

Key Action
Super+G Add the focused window to a group
Super+Shift+G Take it out of its group
Super+Page_Down / Super+Page_Up Next / previous tab
Super+1 … Super+9 Go to tab N
Super+A Go to the next tab that wants attention

These keys only act on tabs while a grouped window has the focus. Otherwise Super+Page_Up/Page_Down keep their usual meaning.

With the mouse, on the tab strip:

  • Click or scroll to switch tabs.
  • Middle-click a tab to close that window.
  • Drag a tab to change the order.
  • Drag the empty part of the strip to move the group.
  • Right-click a tab for that window's menu.

The window menu (Alt+Space) also has Move to Tab Group, New Tab Group, Always Open in This Tab Group, Rename Tab Group…, Save Tab Group…, Edit Tab Groups… and Detach from Tab Group.

A group made with Super+G is called "Group 1" and is forgotten when it closes. Save Tab Group… gives it a name and writes it to groups.ini: its windows open in it from then on, and its place, size and tab order are remembered.

To open the archive, run metacity-notification-archive or start Notification Archive from the app menu.

Managing groups

Tab Groups in the app menu (metacity-tab-groups) opens a window with all groups: rename them, save them, change their rules, tab order, tab labels and other settings, and move their tabs. The same from a terminal:

metacity-tab-groups list            # open and saved groups, --json for scripts
metacity-tab-groups rename "Group 1" Chats
metacity-tab-groups save Chats      # write an open group to groups.ini
metacity-tab-groups pick --add-to Chats   # click a window to add its class
metacity-tab-groups check           # find mistakes in groups.ini
metacity-tab-groups edit            # edit groups.ini, checked before it is used

man metacity-tab-groups has all commands.

Window list and panel

A group has one entry of its own in the window list, with its name; it stays in its place when you switch tabs. Alt+Tab still shows the group's tab.

The Tab Groups applet (package metacity-tab-groups-applet) shows a button for each group. A click brings the group to the front or minimizes it, the arrow lists its tabs, and right-clicking renames, saves or closes it. Saved groups that aren't open offer to start their apps.

After installing it, restart the panel (gnome-panel --replace &, or log out and in), then Alt+right-click the panel → Add to Panel… → Tab Groups. To move it, hold Alt and drag it with the middle mouse button.

Config

~/.config/metacity/groups.ini is read again as soon as you save it:

[group Chats]
match = class:Signal; class:Slack; title:*Telegram*   # which windows join
order = Signal; Slack                  # tab order
labels = Signal=Family; Slack=Work     # texts of the tabs
close-button = minimize                # or close-tab, close-all
extra-tabs = notification-archive      # put the archive in this group
show-name = true                       # the name before the tabs

[tabs]
show-name = false      # names on the strips of all groups
taskbar = group        # one window list entry per group, or: tab
taskbar-title = name   # or name-and-tab

[archive]
max-per-app = 512      # notifications kept per app, 0 = no limit
retention-days = 30    # 0 = keep forever

Renaming a section renames the open group. Double-click a group's name on its strip to rename it.

To find a window's class, run xprop WM_CLASS and click the window.

Groups' size, position, tab order and active tab are remembered in ~/.local/state/metacity/tab-groups.ini. The archive is stored in ~/.local/share/metacity/.

License

GPL-2.0-or-later, the same as Metacity (see COPYING).

The tab groups, the notification archive, metacity-tab-groups and the panel applet are Copyright © 2026 David Kedves. Metacity itself is copyright its original authors (see AUTHORS and debian/copyright).

About

My local fork of Metacity/Gnome window-manager to be able to group windows together (into one window as tabs)

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages