我在 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 }'` }
- 在后台运行,
spacefm
将相同的参数$*
传递给函数&
pgrep spacefm | head -1
获取位于头部的主进程的 PID,然后将其存储在pid
变量中sleep 1
等待新进程进入终端,以避免出现两个窗口(我不知道为什么,请尝试将其删除)wmctrl -lp
获取窗口列表| grep " $pid"
过滤相关的$pid
,| tail -1
过滤最后一行/窗口然后| awk '{ print $1 }'
过滤出第一列的窗口id(WID)$1
wmctrl -i -R WID
将窗口 WID 移动到当前桌面,提升该窗口并赋予其焦点。
- 在后台运行,
使用别名:这将会升起 2 个窗口,新的窗口在顶部,但更简单。
alias sfm="wmctrl -i -R \`wmctrl -lp | grep ' $(pgrep spacefm)' | tail -1 | awk '{ print $1 }'\`; spacefm"
wmctrl -lp
获取窗口列表| grep " $pid"
过滤相关的spacefm
,| tail -1
过滤最后一行/窗口然后| awk '{ print $1 }'
过滤出第一列的窗口id(WID)$1
wmctrl -i -R WID
将窗口 WID 移动到当前桌面,提升该窗口并赋予其焦点。- 运行
spacefm
并附加参数。新窗口将在顶部创建。
- 如何使用:与原始命令类似。
sfm -w /home/rasmus/Work/
参考:请查找man
页面。
答案2
这是一个老问题,但仍然有意义,所以我将添加一个替代解决方案。
这听起来像是 Compiz 焦点预防的结果,试图防止窗口在您在其他地方工作时“窃取”焦点。
可以通过 CompizConfig 设置管理器将焦点预防设置为不同的级别(默认值:低)或完全禁用。
如果尚未安装,请运行以下命令:
sudo apt-get install compizconfig-settings-manager
然后,使用以下命令运行它ccsm
,导航到常规选项,切换到标签专注并提高行为并改变字段重点预防级别(对于你的情况,你可能需要离开)。