按 LIFO 顺序显示 sway 暂存器窗口

按 LIFO 顺序显示 sway 暂存器窗口

我主要使用 sway 暂存器来隐藏我不想出现在工作区中的窗口:终端窗口,如 jupyter 或 rygel 服务器、Transmission 等。

但是,暂存器的显示顺序是 FIFO,我想将其转换为 LIFO 顺序。

我认为这会更有用:最后一个隐藏的窗口很可能是您需要的窗口,而不是您很久以前因任何原因隐藏的终端。

有什么办法可以改变显示顺序吗?

谢谢

答案1

正如您所注意到的,在 Sway 中,暂存器作为具有先进先出 (FIFO) 顺序的堆栈运行。没有内置功能可以将此顺序反转为后进先出 (LIFO),但您可以通过自定义脚本或使用特定命令来解决此限制。

您可以考虑以下几种方法:

  • 自定义脚本:

    您可以编写一个脚本,利用 swaymsg 查询暂存器窗口列表,然后关注最近发送的窗口。该脚本需要解析 的输出swaymsg -t get_tree,在暂存器中找到窗口,然后用于swaymsg [criteria] focus聚焦最近添加的窗口。

  • 手动选择:

    您可以使用键绑定来选择要显示的便签本窗口,而不是依赖自动顺序。例如,您可以在 Sway 配置中定义一种模式,列出所有暂存器窗口并允许您选择一个。

    以下是如何实现手动选择的示例:

    # Enter the scratchpad selection mode
    bindsym $mod+minus mode "scratchpad_selection"
    
    # Define the scratchpad selection mode
    mode "scratchpad_selection" {
        bindsym $key1 [criteria for window 1] scratchpad show, mode "default"
        bindsym $key2 [criteria for window 2] scratchpad show, mode "default"
        # ... More keybindings for each window
        bindsym Escape mode "default"
    }
    

    这只是一个模板,每次添加新的常用暂存器窗口时,都需要您手动更新 Sway 配置。但是,它使您可以直接控制要显示的窗口。

聚焦最近使用的 (MRU) 窗口:您可以通过迭代暂存器中的窗口并选择最近活动的窗口来聚焦最近使用的窗口。这可能需要更复杂的脚本来确定最后使用的是哪个窗口。

由于 Sway 和 i3 是通过其 IPC(进程间通信)接口进行控制的,因此这些自定义通常涉及外部脚本。如果您还不熟悉 bash 或 Python 等语言的脚本编写,您可能需要花一些时间学习如何有效地实现这些解决方法。

相关内容