Cinnamon:使用 Super+数字 / Win+1、2、3 等在窗口之间切换

Cinnamon:使用 Super+数字 / Win+1、2、3 等在窗口之间切换

在论坛上问过,但没有运气。如何使用 Win 键加上数字 1 到 9 在窗口之间切换,就像在 Windows 或 Ubuntu 的 Unity 中一样?

多年来,这些键盘快捷键为我节省了大量时间,令我惊讶的是,像 Cinnamon 这样流行的桌面环境默认情况下并没有实现它们。我的文件管理器始终作为第一个窗口打开,终端窗口作为#2,IDE 作为#3,浏览器作为#4。

手动分配 Win+1/2/3/等。是不可能的,因为它总是会启动应用程序的新实例。某些应用程序可能有“仅一个实例”选项,但这是例外,即使如此,您也会看到新实例启动然后被终止的闪烁。

答案1

您所要求的实际上可以通过简单的 hack 实现。就我而言,我想绑定Super+2到“如果可能的话切换到 emacs,否则打开它”。要在 Cinnamon 中实现此功能,首先sudo apt install wmctrl(或在 Linux 发行版上安装软件包的任何其他方法),然后打开 emacs(或您想要绑定的任何应用程序),获取wmctrl -x -l当前打开的窗口的列表:我得到

0x0440013f  0 emacs.Emacs           username-debian-x1 emacs@username-debian-x1

现在,emacs.Emacs编写以下 bash 脚本:

#!/usr/bin/env bash
wmctrl -x -a emacs.Emacs || emacs

并将其放在类似的地方~/Documents/switch-emacs.sh,然后chmod +x对该文件执行 a 以启用执行,然后在 Cinnamon 键盘设置中,您可以创建自定义命令并选择该 shell 脚本,然后绑定Super+2(或任何您想要的)到它。这应该立即起作用(在 Debian 10 buster stable 上的 Cinnamon 上测试)。

来源:Github 上的评论

请注意,我们需要将其放入 shell 脚本中而不是wmctrl直接在自定义命令中键入命令的原因是,||当直接传递到键盘快捷键时,该运算符似乎无法正常工作。

更新:似乎从 cinnamon 版本 4.2.4-1(可能更早)开始,这个 Super+number“打开或切换到”功能内置于 Cinnamon 中,并且开箱即用,不需要上面的 hack。然而,截至 2019 年 9 月,只有像 Arch 这样的滚动发行版才有如此新的 cinnamon 版本;对于 Mint、Ubuntu 和 Debian,您仍然需要使用上面的 hack(截至 2019 年 9 月),直到这些版本的 cinnamon 版本号足够前滚。

答案2

在较新的版本中(据推测至少从 Linux Mint 20 [1] 开始),它作为其“分组窗口列表”面板小程序的一部分直接内置到 Cinnamon 中,并默认启用。

由于它默认启用,因此可以从系统设置 > 小程序 > 分组窗口列表 [配置,即小齿轮图标] > 常规 > 启用 Super+<number> 快捷方式来切换/打开应用程序来禁用(并再次启用)它。

[1] 看起来当分组窗口列表出现时该功能已经存在添加到肉桂 (82d8170) 中,然后短暂删除(94719c2), 然后重新添加(48ac13f)投诉之后,最后可配置(linuxmint/cinnamon#9175)

答案3

我使用 antiX-linux 并制作了这个activate_windows.sh脚本:

#!/bin/bash

# Script to activate windows with a specific classname
# Usage: ./activate_windows.sh classname

# to identify the classname and class of a window, run `xprop | fgrep CLASS`, and click on the desired window

windows=$(xdotool search --classname "$1") # Get the IDs of all windows with the specified classname
current=$(xdotool getactivewindow) # Get ID of current active window

# if current window is from classname, minimize
if [[ "$windows" =~ "$current" ]]; then
    xdotool windowminimize "$current"
    windows="${windows//$current/}" # removes the window from the list, so as not to open it again
    found=true # at least one window found
fi

for id in $windows; do # while there is a window to open
    # activates the window, dumps stderr to stdout (2>&1), and saves the output (stderr and stdout) to the variable $error
    error="$(xdotool windowactivate $id 2>&1)"
    if [ -z "$error" ]; then # when it issues an error message, it fails to open
        exit 0 # if opened, stop trying
    fi
done

if ! [ "$found" = true ]; then
    $1 & # if there is no window, start a new
fi

我将这个脚本放入~/.local/bin/并授予其运行权限 ( chmod +x ~/.local/bin/activate_windows.sh)。

如果您没有 xdotool,则需要安装它 ( sudo apt install xdotool)。

因此,我为我最常使用的每个应用程序创建了一个快捷方式:

  • 超级+1 → ~/.local/bin/activate_windows.sh pcmanfm
  • super+2 → ~/.local/bin/activate_windows.sh 火狐
  • 超级+3 → ~/.local/bin/activate_windows.sh lxterminal

您可以创建自己的。要识别窗口的类名和类,请运行xprop | fgrep CLASS,然后单击所需的窗口。

例如,每当我想打开 Firefox 时,我都会键入 super+2,无论 Firefox 在任务栏中的位置如何。

相关内容