如何获取当前使用的虚拟桌面的编号和/或名称(或标签/id...等)?
允许命令行、脚本、C/C++ 解决方案(但首选可移植到 C/C++)。 ;)
我最感兴趣的是KDE
和GNOME
以及dwm
,xmonad
,awesome
- 欢迎其他桌面环境的解决方案(我愿意尽我所能提供支持,以便提供尽可能通用的解决方案)。
顺便提一句。对于那些感兴趣的人,要更具体地了解用例:我对围绕桌面+窗口焦点+xevents+多屏幕的时间跟踪感兴趣。目前对此存在单独的解决方案(ktimetracker
根据桌面跟踪任务,而它的应用程序跟踪非常差 - 没有正则表达式支持,只有精确的窗口标题 -> 不是很有用。另一方面,workrave
跟踪键盘和鼠标活动,但不知道我正在处理的桌面->任务。),我想做一些事情,合并这些信息以获得更精确的图片(也许合并关联规则学习或其他数据挖掘我所进行的活动的技术)(为了获得与我的习惯相关的更精确的信息,为了与“蚂蚁-相对强弱指数斗争” ;) )。
因此,如果您的桌面遵循与“虚拟桌面 + Windows(带有名称和标题)”不同的范例,请显示代码/cli 片段,其中显示有关当前使用的窗口/框架/应用程序 + 当前选定的桌面/任务/标签的信息(最终屏幕)。
答案1
遵守以下规定的窗口管理器免费桌面标准将有关桌面的信息存储在根窗口的属性, 尤其:
_NET_NUMBER_OF_DESKTOPS
:虚拟桌面数量_NET_CURRENT_DESKTOP
:活动桌面的索引_NET_DESKTOP_NAMES
:虚拟桌面名称列表
您可以通过任何界面访问这些XGetWindowProperty
例如xprop
。从外壳上看,wmctrl -d
提供了一种列出虚拟桌面的便捷方法。
据我所知,当根窗口的属性发生更改时,只有窗口管理器会收到通知。因此,如果您想对虚拟桌面切换做出反应,则必须使用窗口管理器。例如,对于您的用例,我将使用窗口管理器提供的 Lisp 挂钩(锯鳐)当任何有趣的事情发生时。
答案2
还可以看看arbtt
, 这自动基于规则的时间跟踪器主要由约阿希姆·布莱特纳在哈斯克尔。 请参阅配置示例以了解其功能的峰值,即,通过重点窗口标题和时间规则跟踪您的工作时间。 (也许更多,我从未尝试过;这里没有用例,但听起来与您尝试做的类似。)