使用以下方式进行高级“关闭”操作wmctrl

使用以下方式进行高级“关闭”操作wmctrl

你知道怎么做吗?我知道如何用键盘(Alt+F4)来做,我知道如何用鼠标(单击那个X)来做,我也知道应该kill X杀死ID为X的进程(也killall Y应该杀死名为Y的进程)。但我想知道如何杀死活动窗口从终端。

因此,根据我上面所述,一个有效的答案也是获取活动窗口的 id。

现在我正在实现这个功能(模拟 Alt+F4),但我想知道是否有一种方法不需要安装另一个应用程序。谢谢大家。

编辑。这是完整的脚本。首先启用“按下 Ctrl 时显示鼠标”,然后将此脚本添加到 CompizConfig 中的命令并绑定到右上角。当您触摸右上角时,会显示鼠标周围的小通知。如果您不执行任何操作,活动窗口将在 1 秒后关闭。但是,如果您在 1 秒内再次触摸角落,则活动窗口将不会关闭。

xte 'key Control_R'; if [ -f ~/.fcont ]; then rm -f -r ~/.fcont; else touch ~/.fcont; sleep 1;  if [ -f ~/.fcont ]; then xkill -id `xprop -root _NET_ACTIVE_WINDOW | cut -d\# -f2`; rm -f -r ~/.fcont; fi fi

请注意,我仍然使用之前命名的 xte 应用程序我之前提出的问题从未得到解答。

答案1

如果你想真正地避免使用默认未安装的应用程序:

xkill -id `xprop -root _NET_ACTIVE_WINDOW | cut -d\# -f2`

再次,这似乎效果相当好。

笔记:如果是一些应用程序(见注释)这可能意味着应用程序的所有窗口都已关闭。gnome-terminal就是这样一个应用程序,但terminator不受影响xterm。我认为这更多的是这些应用程序的一个错误(可能是设计使然),而不是我的命令的一个错误。

答案2

使用以下方式进行高级“关闭”操作wmctrl

下面的命令也使用 EWMH 规范关闭当前活动窗口,尽管它需要安装另一个程序,但您似乎更愿意避免这一点。

具体内容

  • 这是一个高级“关闭”操作。换句话说,它向应用程序发送与通过鼠标单击“关闭”小工具或快捷键发送的完全相同的消息,要求其关闭窗口。
  • 它不模拟快捷键,因此无论您的快捷键是什么,即使您没有配置快捷键(或者甚至可能没有配置键盘),它也可以工作。

因此,它具有预期的行为:

  • 它只会关闭目标窗口而不是整个应用程序(使用 xfce4-terminal、Chromium、Thunderbird 测试)。
  • 此外,它还为应用程序提供了对关闭事件做出反应的机会,比如询问确认(使用 Thunderbird 在正在写邮件的窗口中进行确认,使用 Firefox 在关闭打开多个选项卡的窗口之前询问确认)甚至可能忽略该事件。

命令

wmctrl-c:活动:

参考

从项目主页wmctrl——与 EWMH/NetWM 兼容的 X 窗口管理器交互的命令行工具。

-c 正常关闭窗口。

特殊字符串“:ACTIVE:”(不带引号)可用于指示 wmctrl 使用当前活动窗口执行操作。

答案3

我会用xdotool

xdotool windowkill `xdotool getactivewindow`

似乎能快速、安静地完成工作。

相关内容