6

I know how to minimize/hide all windows in Cosmic Cuttlefish/GNOME Shell using SUPER+D, but I would like to be able to quickly minimize only all windows for a single application (say the one that currently has cursor focus). For example, I would like to minimize all LibreOffice documents, or all Terminal windows.

I am not quite seeing or recognizing a way to do this in Settings > Devices > Keyboard. Is this possible?

7

This is not a keyboard shortcut, but another way to minimise all windows of an application. You can enable 'minimise on click' in Ubuntu dock. Then once you click an application icon in the dock, it would minimise all windows (or raise, if they're already minimised) of that application.

To enable this option, run the following command in Terminal:

gsettings set org.gnome.shell.extensions.dash-to-dock click-action 'minimize'

(Reference: How do I enable 'minimize on click' on Ubuntu dock in Ubuntu 17.10 and later?)

2
  • That is really useful to know, thank you! +1 I am gonna decline to accept this answer for the time being, both because "too soon" and because others may have a keyboard shortcut solution. This answer is definitely in the running though. :)
    – Lexible
    Jan 6 '19 at 19:17
  • 1
    @Lexible Sure, I would recommend not accepting too :) For the same reason I didn't vote to close as a duplicate of the other question.
    – pomsky
    Jan 6 '19 at 19:19
6

OK, just a quick one for fun :)

###Minimize windows of currently active application You could use a stripped-down/edited version of this script, which comes with a default Ubuntu Budgie install. While the original script toggles the desktop, the edited one below minimizes all windows, on current workspace, of the currently active WM_CLASS.

###The script, how to use

  • Make sure you have both xdotool and wmctrl installed:

      sudo apt install wmctrl xdotool
    
  • Copy the script below into an empty file, save it as minimize_current.py

  • Create a keyboard shortcut to run the script and you're done :). Use the command:

      python3 /path/to/minimize_current.py
    

###The script

#!/usr/bin/env python3
import subprocess

ignore = [
    "= _NET_WM_WINDOW_TYPE_DOCK",
    "= _NET_WM_WINDOW_TYPE_DESKTOP",
]


def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8").strip()


def get_currws():
    return [l.split()[0] for l in get(
        ["wmctrl", "-d"]).splitlines() if "*" in l][0]


def get_valid(w_id):
    # see if the window is a valid one (type)
    w_data = get(["xprop", "-id", w_id])
    if w_data:
        return True if not any([t in w_data for t in ignore]) else False
    else:
        return False

def get_wmclass(w_id):
    return get(["xprop", "-id", w_id, "WM_CLASS"])


def get_state(w_id):
    return "window state: Iconic" in get(["xprop", "-id", w_id, "WM_STATE"])


currws = get_currws()
allwinsdata = [w.split() for w in get(["wmctrl", "-l"]).splitlines()]
winsoncurr = [w[0] for w in allwinsdata if w[1] == currws]

active_w = get(["xdotool", "getactivewindow"])
activeclass = get_wmclass(active_w)   
relevant = [w for w in winsoncurr if get_valid(w)]


# windows on current workspace, normal state
tominimize = [
    w for w in relevant if all(
        [not get_state(w), get_wmclass(w) == activeclass]
    )
]
  
for w in tominimize:
    subprocess.Popen(["xdotool", "windowminimize", w])

###Note Note that neither xdotool nor wmctrl, as used in this script, will work on Wayland.

2
  • 2
    Since this uses xdotool this only works when using X-server and not with Wayland, right?
    – Graipher
    Jan 7 '19 at 9:25
  • 2
    @Graipher That is correct. Xdotool nor wmctrl will work on Wayland. Jan 7 '19 at 9:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.