2012-07-28 30 views
6

Tôi đã tìm kiếm internet và tìm thấy ví dụ với thiết chỉ có một lĩnh vực sở hữu xprop? tôi đã cố gắng:thiết lập nhiều lĩnh vực sở hữu nguyên tử

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 

và nhiều biến thể khác không có may mắn. Có thể không? :)


Ok ....

Tôi đã viết một bản vá cho xprop để sửa lỗi này, và Nó hoạt động, nhưng không biết là nó đúng.
Nhờ @ 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': 

Trả lời

10

Nhìn vào mã của xprop, nó là không thể.

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

Đây là mã phân tích cú pháp giá trị thành -set.

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

Vì vậy, nó phân tích chỉ một nguyên tử duy nhất.


Tôi cũng đã mở a bug cho nó; có thể họ sẽ thêm cái này.

+1

+1 để truy cập nguồn. –

Các vấn đề liên quan