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


11

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

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

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

我正在使用Ubuntu 14.04和Unity。


从观点来看,您是指工作区吗?
2014年

Answers:


7

受到Pineau答案的启发,我发现了一个肮脏的技巧来完成它:keep 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.2sleep 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:在所有视口的所有应用程序窗口之间切换


5

通用解决方案使用 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(有关更多信息,请参见评论部分)

亲爱的@Glutanimate,之后-l还要切换到其他工作区上的窗口。
卡迪尔

@Kadir真奇怪。它不在我的系统上。如果您有时间,您是否愿意将其输出发布wmctrl -xl到诸如pastebin.com之类的站点并在此处链接?
谷氨酰胺

亲爱的@Glutanimate,它是:pastebin.com/iJBAZ5a7
Kadir

@Kadir谢谢!看来Unity / Compiz没有正确地公开工作区信息,所以wmctrl很难拾取它(这就是为什么您仅在第二栏中看到零,这些零应该是工作区号)。不知道那是一个错误还是它是这样设计的。我没有注意到这一点,因为我正在使用LXDE。我将在答案中添加注释。
谷氨酰胺

4

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

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

或者,您可以安装Unity Tweak工具:

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

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

在此处输入图片说明


我想保留Alt-`的属性,该属性在当前视口中的应用程序窗口之间切换。我需要另一个快捷键,例如Ctrl-Alt-`,它将在所有视口中的应用程序窗口之间切换。
卡迪尔2014年

1
@Kadir不幸的是,dconf属性不允许两个配置共存。这是一种行为或另一种行为。
西尔文·皮诺
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.