BlankTar

about | blog | works | photo

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みたいなオプションが必要になるので気をつけて。
< linuxのdwmをマルチモニタで使おう gentooでハイバネートとかサスペンドとか >