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

Ras*_*mus 5 windows window-manager shortcut-keys

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

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

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

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

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

use*_*.dz 1

正如spacefm所使用的单一进程。新命令只是将信号传递给正在运行的进程,这会在其上次创建的窗口的上方创建新窗口。

sudo apt-get install wmctrl
Run Code Online (Sandbox Code Playgroud)
  • 具有功能:具有1秒延时。

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

    alias sfm="wmctrl -i -R \`wmctrl -lp | grep ' $(pgrep spacefm)' | tail -1 | awk '{ print $1 }'\`; spacefm"
    
    Run Code Online (Sandbox Code Playgroud)
    1. wmctrl -lp获取窗口列表| grep " $pid"过滤相关的内容spacefm| tail -1过滤最后一行/窗口,然后| awk '{ print $1 }'过滤掉第一列中的窗口ID(WID)$1
    2. wmctrl -i -R WID 将窗口 WID 移动到当前桌面,升起窗口并为其提供焦点。
    3. spacefm运行后带有参数。新窗口将创建在顶部。

- 使用方法:与原始命令类似。

    sfm -w /home/rasmus/Work/
Run Code Online (Sandbox Code Playgroud)

参考文献:请查找man页面。


Ced*_*ach 0

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

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

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

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

sudo apt-get install compizconfig-settings-manager
Run Code Online (Sandbox Code Playgroud)

然后,使用 运行它ccsm,导航到General Options,切换到选项卡Focus & Raise Behaviour并更改字段Focus Prevention Level(在您的情况下,您可能需要Off)。