linux - xprop 设置原子属性的多个字段

标签 linux x11 xorg

我在网上搜索了一下,找到了只设置一个属性字段的例子:

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':

最佳答案

看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为了它;也许他们会添加这个。

关于linux - xprop 设置原子属性的多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11700728/

相关文章:

python - 通过API调用xbacklight

linux - 打印有关文本文件的统​​计信息的 Bash 脚本

linux - 使用 Python 从 Linux 执行窗口应用程序

windows - 如何通过 apt-cyg 安装 cygwin/X

linux - 如何从剪贴板读取文本?

python - 你如何在 Linux 中抓取选定的屏幕区域?

c - 将 xlib XImage 保存为 PNG

linux - 如何在不显示 "Avail"描述的情况下获取 linux 目录中的可用空间

linux - 访问控制台内容

x11 - 从 X11 错误处理程序调用 XGetErrorText()