当我使用键盘快捷键打开窗口时,我可以强制窗口在其他窗口之上打开吗?

当我使用键盘快捷键打开窗口时,我可以强制窗口在其他窗口之上打开吗?

我在 Ubuntu 上使用 SpaceFM 作为主要文件管理器。我通常通过键盘快捷键直接打开文件夹,例如Ctrl++打开我的工作文件夹。SuperW

spacefm -w /home/rasmus/Work/具体来说,我使用上面的快捷方式执行命令,并-w确保 SpaceFM 打开一个新窗口。

但是,这个新窗口并不总是打开在工作区中最后一个活动窗口的顶部。这相当烦人,因为这意味着我有时必须“挖掘”新打开的窗口。

所以,我的问题是:我是否可以在执行的命令中添加一些额外内容,以确保新窗口在顶部打开?

欢迎提出具有相同效果的替代解决方案。

答案1

就像spacefm使用单个进程一样。新命令只是将信号传递给正在运行的进程,这将在上一个创建的窗口的上一级创建新窗口。

sudo apt-get install wmctrl
  • 具有功能:它有 1 秒的延迟。

    sfm() { spacefm $* & pid=`pgrep spacefm | head -1`; sleep 1;  wmctrl -i -R `wmctrl -lp | grep " $pid" | tail -1 | awk '{ print $1 }'` }
    
    1. 在后台运行,spacefm将相同的参数$*传递给函数&
    2. pgrep spacefm | head -1获取位于头部的主进程的 PID,然后将其存储在pid变量中
    3. sleep 1等待新进程进入终端,以避免出现两个窗口(我不知道为什么,请尝试将其删除)
    4. wmctrl -lp获取窗口列表| grep " $pid"过滤相关的$pid| tail -1过滤最后一行/窗口然后| awk '{ print $1 }'过滤出第一列的窗口id(WI​​D)$1
    5. wmctrl -i -R WID 将窗口 WID 移动到当前桌面,提升该窗口并赋予其焦点。
  • 使用别名:这将会升起 2 个窗口,新的窗口在顶部,但更简单。

    alias sfm="wmctrl -i -R \`wmctrl -lp | grep ' $(pgrep spacefm)' | tail -1 | awk '{ print $1 }'\`; spacefm"
    
    1. wmctrl -lp获取窗口列表| grep " $pid"过滤相关的spacefm| tail -1过滤最后一行/窗口然后| awk '{ print $1 }'过滤出第一列的窗口id(WI​​D)$1
    2. wmctrl -i -R WID 将窗口 WID 移动到当前桌面,提升该窗口并赋予其焦点。
    3. 运行spacefm并附加参数。新窗口将在顶部创建。

- 如何使用:与原始命令类似。

    sfm -w /home/rasmus/Work/

参考:请查找man页面。

答案2

这是一个老问题,但仍然有意义,所以我将添加一个替代解决方案。

这听起来像是 Compiz 焦点预防的结果,试图防止窗口在您在其他地方工作时“窃取”焦点。

可以通过 CompizConfig 设置管理器将焦点预防设置为不同的级别(默认值:低)或完全禁用。

如果尚未安装,请运行以下命令:

sudo apt-get install compizconfig-settings-manager

然后,使用以下命令运行它ccsm,导航到常规选项,切换到标签专注并提高行为并改变字段重点预防级别(对于你的情况,你可能需要离开)。

相关内容