Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
int main(int argc, char *argv[])
unsigned long value;
char *terminatedAt;
XClassHint class;
Status status;
Display *display;
Window window;
if ( argc != 3 ) {
printf( "Usage: %s <window id> <window class>\n", argv[0] );
return 1;
window = strtoul( argv[1], &terminatedAt, 0 );
if ( *terminatedAt != '\0' ) {
printf( "Could not parse window id: %s\n", argv[1] );
return 2;
display = XOpenDisplay( NULL );
status = XGetClassHint( display, window, &class );
if ( !status ) return 4;
XFree( class.res_class );
class.res_class = strdup( argv[2] );
printf("Setting WM_CLASS of window %lu to \"%s\", \"%s\"\n", window, class.res_name, class.res_class );
XSetClassHint( display, window, &class );
XCloseDisplay( display );
XFree( class.res_name );
XFree( class.res_class );
return 0;

This comment has been minimized.

Copy link
Owner Author

tgr commented Sep 8, 2016

Set the class part of WM_CLASS for a given window id in X. Apparently there is no command-line tool to do this: xprop can set the first half (the name) but not the second part (the class).


This comment has been minimized.

Copy link

piegamesde commented Oct 31, 2018

Hi, thanks for this neat little script. To really separate the windows, you need to set class.res_name too so I added this in a fork.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.