2012-07-28 18 views
6

Busqué Internet y encontré ejemplos con el establecimiento de un único ámbito de la propiedad xprop? Traté:establecer múltiples ámbitos de la propiedad átomo de

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

y

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

y muchas otras variantes sin suerte. ¿Es posible? :)


Ok ....

me escribió un parche para xprop de solucionar este problema, y ​​funciona, pero no saben que es correcto.
Gracias 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': 

Respuesta

10

Mirando el código del xprop, no es posible.

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

Este es el código que analiza el valor a -set.

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

Por lo tanto, analiza solo un átomo.


También hemos abierto a bug para ello; tal vez ellos agregarán esto.

+1

+1 para ir a la fuente. –

Cuestiones relacionadas