Skip to main content

A handy, pretty-printing X window metadata CLI

Project description

This is a simple CLI tool to dump X window info in a tree format.

Current version is a proof-of-concept. The API will potentially change drastically.

Features

System Dependencies

The core features depend on libxcb. The xcffib docs also mention libxcb-render. I suspect the full list of xcb components is actually necessary, but I haven’t checked from a fresh install yet.

Here’s a good way to discover dependencies in the RPM world. You should be able to replace dnf with yum on older systems.

$ sudo dnf install -y dnf-utils --allowerasing

# For a full XCB install, use this as the first line instead
# UNLISTED_DEPS=($(eval "echo 'xcb-'{'proto','util-*'}{'','-devel'}"));
$ UNLISTED_DEPS=($(eval "echo xcb-util-renderutil{,-devel}")); \
    DEPS=($(\
        repoquery --requires --resolve python2-xcffib \
            | awk -F':' '\
                /^[^:]*:[^:]*$/{ \
                    gsub("-[0-9]+$", "", $1); \
                    print $1; \
                }' \
            | sort -u \
    )); \
    FULL_DEPS=( "${UNLISTED_DEPS[@]}" "${DEPS[@]}" "${DEPS[@]/%/-devel}" )
    eval sudo dnf install \
        --skip-broken \
        $(printf "'%s' " "${FULL_DEPS[@]}")

Package xcb-util-renderutil-0.3.9-10.fc28.x86_64 is already installed, skipping.
Package xcb-util-renderutil-devel-0.3.9-10.fc28.x86_64 is already installed, skipping.
Package libxcb-1.13-1.fc28.x86_64 is already installed, skipping.
Package libxcb-1.13-1.fc28.i686 is already installed, skipping.
Package python2-2.7.15-1.fc28.x86_64 is already installed, skipping.
Package python2-cffi-1.11.2-1.fc28.x86_64 is already installed, skipping.
Package python2-six-1.11.0-3.fc28.noarch is already installed, skipping.
Package libxcb-devel-1.13-1.fc28.x86_64 is already installed, skipping.
Package python2-devel-2.7.15-1.fc28.x86_64 is already installed, skipping.
No match for argument: python2-cffi-devel
No match for argument: python2-six-devel
Dependencies resolved.
Nothing to do.
Complete!

# Or, for an even simpler full install,
$ sudo dnf install 'libxcb*' 'xcb*'

I have no idea how to do this in other ecosystems. It should be possible in the Debian world or the Arch world with some tweaking.

Installation

$ pip install --user xpynfo

Usage

$ export PATH=~/.local/bin:$PATH
$ which xpynfo
~/.local/bin/xpynfo
$ xpynfo --version
xpynfo <version>
$ xpynfo --help
< dumps all the help >
$ xpynfo \
    --recurse \
    --use-names \
    --style AsciiStyle \
    --max-depth 1 \
    --properties \
    $(xprop | awk '/WM_CLIENT_LEADER/{ print strtonum($NF); }')
# Note: you have to click a window to populate xprop
106954753: Sublime Text
|   Properties:
|       WM_CLASS: ['sublime_text', 'Sublime_text']
|       WM_CLIENT_LEADER: 106954753
|       WM_CLIENT_MACHINE: gxc-fedora-28.wotw
|       WM_COMMAND: sublime_text
|       WM_ICON_NAME: sublime_text
|       WM_LOCALE_NAME: en_US.UTF-8
|       WM_NAME: Sublime Text
|       WM_NORMAL_HINTS: <WM_SIZE_HINTS>
|       WM_PROTOCOLS: ['WM_DELETE_WINDOW', 'WM_TAKE_FOCUS', '_NET_WM_PING']
|       _NET_WM_ICON_NAME: sublime_text
|       _NET_WM_NAME: Sublime Text
|       _NET_WM_PID: 637
|       _NET_WM_USER_TIME_WINDOW: 106954754
+-- 106954754

(Very Basic) Documentation

usage: xpynfo [-h] [-V] [-r] [-d MAX_DEPTH] [-a] [-g] [-p] [-n]
              [-s {AsciiStyle,ContRoundStyle,ContStyle,DoubleStyle}]
              [window_id]

A tool to examine various pieces of X info. Without options the command simply
prints the window id.

positional arguments:
  window_id             Specify the window ID; default is the screen's root
                        window

optional arguments:
  -h, --help            show this help message and exit
  -V, --version         Displays the package version and exits

Scope Control:
  Options to control the scope of the calls xpynfo makes

  -r, --recurse         Also query children of the given ID recursively
  -d MAX_DEPTH, --max-depth MAX_DEPTH
                        Limit the depth of recursion

X Calls:
  Options to add X information

  -a, --attributes      Add XWindowAttributes info to output
  -g, --geometry        Add XGetGeometry info to output
  -p, --properties      Add XListProperties combined with parsed XGetProperty
                        info to output

Style:
  Options to tweak output look

  -n, --use-names       Add _NET_WM_NAME or WM_NAME (when available) to output
  -s {AsciiStyle,ContRoundStyle,ContStyle,DoubleStyle}, --style {AsciiStyle,ContRoundStyle,ContStyle,DoubleStyle}
                        Set the anytree rendering style

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xpynfo-0.0.0-py2.py3-none-any.whl (16.9 kB view details)

Uploaded Python 2Python 3

File details

Details for the file xpynfo-0.0.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for xpynfo-0.0.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 c0b46033bd624bf59b61d3bad3ad222580446af4a06e4d138d39b2dec0055d6b
MD5 ee6335ff7060b09697f43cb5fcd99c46
BLAKE2b-256 dc3345ce7b7e8efacbcd79b3290b87839f62271b1e03247f402f3f8b64a2b53e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page