在所有视口中切换应用程序窗口的组合键

在所有视口中切换应用程序窗口的组合键

Alt-`用于在 Unity 中当前视口中的应用程序窗口之间切换。

是否有其他组合键可以在所有视口中的应用程序窗口之间切换?

我不想改变Alt-的默认行为`,即在当前视口中的应用程序窗口之间切换。

我正在使用 Ubuntu 14.04 和 Unity。

答案1

受到 Pineau 的回答的启发,我找到了一个完成此任务的肮脏技巧:保留Alt+`在一个视口中的应用程序窗口之间切换,以及(例如)Alt+1在所有视口中的应用程序窗口之间切换。

外观上的小缺点是响应性不太准确,因为设置需要几分之一秒才能更改。但在实践中,你几乎不会注意到。

  1. 安装xdotool

    sudo apt-get install xdotool
    
  2. 将以下脚本复制到一个空文件中并将其保存为switch.sh

    #!/bin/bash
    
    dconf write /org/compiz/profiles/unity/plugins/unityshell/alt-tab-bias-viewport false
    sleep 0.2
    xdotool keydown alt key 0x60
    dconf write /org/compiz/profiles/unity/plugins/unityshell/alt-tab-bias-viewport true
    sleep 1
    
  3. 设置一个组合键来运行脚本:System Preferences > Keyboard > Shortcuts > Custom Shortcuts。我选择Alt+ 1,因为它离另一个很近。

    现在您可以使用Alt+1在(例如)gedit 的所有窗口之间切换:

    在此处输入图片描述

    Alt+`仅在当前工作区的 gedit 窗口之间切换:

    在此处输入图片描述

笔记:

  1. 在脚本中,上方的键Tab设置为key 0x60。在其他布局中可能有所不同。如果它不起作用,请在终端中运行xev,然后按Return,然后按上方的键 tab。在输出中,查找类似 的字符串(keysym 0x60, grave)。keysym 值是您在 (script-) 行中需要的值:

    xdotool keydown alt key 0x60
    
  2. sleep 0.2和的值sleep 1使得脚本在我的系统上运行良好,但它们可能会针对更快的系统进行优化(减少)。

更多的选择

类似地,您可以设置组合键来在所有应用程序窗口所有视口脚本将会是:

#!/bin/bash

dconf write /org/compiz/profiles/unity/plugins/unityshell/alt-tab-bias-viewport false
sleep 0.2
xdotool keydown alt key 0xff09
dconf write /org/compiz/profiles/unity/plugins/unityshell/alt-tab-bias-viewport true
sleep 1

如果您为此设置例如Alt+ Q,那么您将拥有所有选项的良好集合:

Alt+` 切换当前应用程序的窗户当前视口

Alt+1 切换当前应用程序的窗户所有视口

Alt+Tab 切换所有应用程序窗户当前视口

Alt+Q 切换所有应用程序窗户所有视口

在此处输入图片描述

Alt+ Tab:在所有应用程序窗口之间切换当前视口

在此处输入图片描述

Alt+ Q:在所有视口上的所有应用程序窗口之间切换

答案2

通用解决方案使用wmctrl


概述

以下脚本应与所有兼容符合 EWMH 标准窗口管理器(例如 xfwm4、openbox、kwin、compiz……)。它使用wmctrlxprop,可以使用以下命令安装:

sudo apt-get install x11-utils wmctrl

安装

复制并保存以下段落为simple-window-switcher

#!/bin/bash

# based on a script by Robert Steiniger
# (http://lars.st0ne.at/blog/switch%20between%20windows%20within%20the%20same%20application)

Usage="
  Title:        simple-window-switcher 0.1
  Description:  switch between all windows of active application
  Author:       Copyright Glutanimate 2014 (https://github.com/Glutanimate)
  License:      GNU GPLv3
  Usage:        $(basename "$0") [-g|-l|-h]
                -g: global window switching (across all workspaces)
                -l: local window switching (current workspace)
                -h: display this help message

                If no argument is provided window switching will be set to global.
"

while getopts "lgh" OPTIONS; do
  case $OPTIONS in
    l ) Fields="3-4"
        ;;
    g ) Fields="4"
        ;;
    h ) echo "$Usage"
        exit 0
        ;;
   \? ) echo "$Usage"
        exit 1
        ;;
  esac
done

ActiveWinID="$(xprop -root | sed -n 's/_NET_ACTIVE_WINDOW(WINDOW): window id # 0x//p')"
# fields 3-4: <desktop number> <window class>
ActiveWinClass="$(wmctrl -xl | grep "$ActiveWinID" | cut -d" " -f${Fields})"
WindowList="$(wmctrl -xl | grep "$ActiveWinClass" | cut -d" " -f1)"
NextWindow="$(echo "$WindowList" | grep -A1 "$ActiveWinID" | sed -n 2p)"

if [[ -z "$NextWindow" ]]; then
  NextWindow="$(echo $WindowList | head -n 1)"
fi

wmctrl -i -a "$NextWindow"

将脚本标记为可执行文件并将其保存在您所需的任何位置(最好在您的 PATH 中,例如/usr/local/bin~/bin)。

用法

使用窗口管理器的键盘快捷键菜单来指定simple-window-switcher您选择的热键。您可以使用以下参数来控制脚本的行为:

  • -g:全局窗口切换(跨所有工作区)
  • -l:本地窗口切换(当前工作区);可能不适用于 Unity/Compiz(有关更多信息,请参阅评论部分)

答案3

打开终端并输入以下命令:

dconf write /org/compiz/profiles/unity/plugins/unityshell/alt-tab-bias-viewport false

或者,你可以安装 Unity Tweak Tool:

sudo apt-get install unity-tweak-tool
unity-tweak-tool

然后启用在所有工作区上的窗口之间切换切换器选项卡中的选项:

在此处输入图片描述

相关内容