C言語でX11のウィンドウ名を設定する
dwmの右上のステータスバーはルートウィンドウのウィンドウ名がそのまま表示されているので、シェルスクリプトからxsetrootコマンドで設定したりして時計とか好きなものを表示できます。便利で良いよね。
でもシェルスクリプトだと何となくヘビーな感じがするし、もっといろいろ表示してみたいし・・・というわけでC言語からのウィンドウ名の設定に挑戦。
書いてみたコードがこんな感じ。
#include <stdio.h> #include <X11/Xlib.h> int main() { Display *dpy = XOpenDisplay(NULL); // その名の通りディスプレイを開く。NULLの代わりに文字列で":10"とかやってディスプレイ番号なんかも設定出来るっぽい。 if(dpy == NULL) { fprintf(stderr, "failed open display\n"); return -1; } //int screen = DefaultScreen(dpy); // デフォルトのスクリーンを開く。:10.0で言う0の部分の事・・・なのか? よく分からない。 //Window root = RootWindow(dpy, screen); // ルートウィンドウ(つまりウィンドウマネージャ)を取得。 Window root = DefaultRootWindow(dpy); // 上の二行は実はこれにまとめられる。 char *buf; XFetchName(dpy, root, &buf); // ウィンドウ名を取得する。0以外が返れば成功。 printf("old: %s\n", buf); XFree(buf); // ウィンドウ名用に確保されたメモリを解放してやる。 XStoreName(dpy, root, "hello, world"); // ウィンドウ名を設定。これも0以外が返れば成功。 XFetchName(dpy, root, &buf); printf("new: %s\n", buf); XFree(buf); XCloseDisplay(dpy); }
結構簡単で良いね。XFree
を忘れずに。
コンパイルする時は-lX11
みたいなオプションが必要になるので気をつけて。