2012-07-28 14 views
6

我搜索互聯網,發現例子與僅設置一個的屬性字段原子屬性的多個領域:xprop設置

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

,但我怎麼可以設置多個字段? 我想:

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

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

,並沒有運氣許多其它變體。 這可能嗎? :)


好吧....

我寫了xprop來解決這個補丁,和它的工作原理,但不知道是不是正確的。
感謝@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': 

回答

10

在xprop的代碼來看,這是不可能的。

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

這是將值解析爲-set的代碼。

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

因此它只解析單個原子。


我也爲它開了a bug;也許他們會添加這個。

+1

+1來源。 – 2012-07-29 03:52:19