2012-07-28 22 views
6

ho cercato internet e ho trovato esempi con l'impostazione un solo settore della proprietà xprop? ho provato:impostazione più campi di proprietà dell'atomo

xprop -id "$windowid" -f _NET_WM_STATE 32a -set _NET_WM_STATE '_NET_WM_STATE_ABOVE, _NET_WM_STATE_SKIP_TASKBAR' 

e

xprop -id "$windowid" -f _NET_WM_STATE 32aa -set _NET_WM_STATE _NET_WM_STATE_ABOVE,_NET_WM_STATE_SKIP_TASKBAR 

e molte altre varianti senza fortuna. È possibile? :)


Ok ....

Ho scritto una patch per xprop per risolvere questo problema, e funziona, ma non so è corretto.
Grazie a @ MichałGórny.
(xprop.c, v 1,6)

--- xprop.c 2012-07-31 11:24:01.178117974 +0400 
+++ xprop.mod 2012-07-31 11:23:19.434784430 +0400 
@@ -1487,11 +1487,20 @@ 
    break; 
     } 
     case 'a': { 
- static Atom avalue; 
- avalue = Parse_Atom(value, False); 
- type = XA_ATOM; 
- data = (unsigned char *) &avalue; 
- nelements = 1; 
+ static unsigned long data32[MAXELEMENTS]; 
+ char * value2 = strdup(value); 
+ char * tmp = strtok(value2,","); 
+ nelements = 0; 
+ while(NULL != tmp){ 
+  data32[nelements] = Parse_Atom(tmp, False); 
+  nelements +=1; 
+  if(nelements >= MAXELEMENTS) 
+  break; 
+  tmp = strtok(NULL,","); 
+ } 
+ type = XA_ATOM; 
+ data = (unsigned char *) data32; 
+ free(value2); 
    break; 
     } 
     case 'm': 

risposta

10

Guardando il codice del xprop, non è possibile.

case 'a': { 
    static Atom avalue; 
    avalue = Parse_Atom(value, False); 
    type = XA_ATOM; 
    data = (unsigned char *) &avalue; 
    nelements = 1; 
    break; 
} 

Questo è il codice che analizza il valore a -set.

static Atom 
Parse_Atom (const char *name, int only_if_exists) 
{ 
    /* may return None = 0 */ 
    return XInternAtom(dpy, name, only_if_exists); 
} 

Quindi analizza solo un singolo atomo.


Ho anche aperto a bug per esso; forse aggiungeranno questo.

+1

+1 per andare alla fonte. –