給定一個X客戶端窗口ID,有沒有辦法從命令行提升該窗口?X11:通過命令行提高現有窗口?
$ xlsclients -a
Window 0x3000001:
Machine: ohm
Name: Terminal
Icon Name: foo
Command: foo
Instance/Class: foo/bar
$ xraise -id 0x3000001 <-- this is what I would like to do
給定一個X客戶端窗口ID,有沒有辦法從命令行提升該窗口?X11:通過命令行提高現有窗口?
$ xlsclients -a
Window 0x3000001:
Machine: ohm
Name: Terminal
Icon Name: foo
Command: foo
Instance/Class: foo/bar
$ xraise -id 0x3000001 <-- this is what I would like to do
您還可以使用wmctrl,這確實類似的事情
贊... http://zaurus.daemons.gr/menaie/build/hacks/xraise/xraise.c?
編輯:插入代碼的答案:
#include <X11/Xos.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
/* "borrowed" from xwininfo/dsimple.c */
Window Window_With_Name(dpy, top, name)
Display *dpy;
Window top;
char *name;
{
Window *children, dummy;
unsigned int nchildren;
int i;
Window w=0;
char *window_name;
if (XFetchName(dpy, top, &window_name) && (strstr(window_name, name) == window_name))
return(top);
if (!XQueryTree(dpy, top, &dummy, &dummy, &children, &nchildren))
return(0);
for (i=0; i<nchildren; i++)
{
w = Window_With_Name(dpy, children[i], name);
if (w)
break;
}
if (children) XFree ((char *)children);
return(w);
}
int main(int argc, char **argv)
{
Window window;
Display *dpy;
if (argc < 2)
{
fprintf(stderr, "Usage: %s window-name\n", argv[0]);
exit(1);
}
dpy = XOpenDisplay(":0");
if (!dpy)
{
fprintf(stderr, "Cannot open display.\n");
exit(1);
}
window = Window_With_Name(dpy, DefaultRootWindow(dpy), argv[1]);
if (!window)
{
fprintf(stderr, "Cannot find a window by that name.\n");
exit(1);
}
XSetInputFocus(dpy, window, RevertToPointerRoot, CurrentTime);
if(!XRaiseWindow(dpy, window))
{
fprintf(stderr, "XRaiseWindow error?\n");
exit(1);
}
XCloseDisplay(dpy);
}
準確,謝謝!我註釋掉了XSetInputFocus()調用,所以現在它可以完美地滿足我需要的功能。 – 2009-06-22 20:16:06
wmctrl在我的機器上沒有做任何事情。如下所示,XSetInputFocus()能夠做到這一點。 – macetw 2017-01-25 23:09:58