2009-06-22 2 views
14

एक एक्स क्लाइंट विंडो आईडी को देखते हुए, क्या उस विंडो को कमांड लाइन से बढ़ाने का कोई तरीका है?एक्स 11: कमांड लाइन के माध्यम से एक मौजूदा विंडो उठाओ?

$ 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 

उत्तर

10

तुम भी wmctrl है, जो इसी तरह की बातों

+0

wmctrl ने मेरी मशीन पर कुछ भी नहीं किया। XSetInputFocus(), नीचे दिखाया गया है, यह करने में सक्षम था। – macetw

7

पसंद ... 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); 
} 
+0

बिल्कुल वही करती उपयोग कर सकते हैं, धन्यवाद! मैंने XSetInputFocus() कॉल पर टिप्पणी की, इसलिए अब यह मेरी ज़रूरत के लिए पूरी तरह से काम करता है। –

संबंधित मुद्दे