使用捷徑從視窗列開啟視窗的任何方法

使用捷徑從視窗列開啟視窗的任何方法

有什麼方法可以使用快捷方式從視窗列開啟視窗嗎?例如開啟左側第一個視窗Ctrl+1,開啟左側第二個視窗Ctrl+2。

我現在使用xfce4,但是如果在xfce4下不可能,是否有其他桌面環境允許這樣做?

由於我為同一個應用程式開啟了多個窗口,因此我沒有搜尋與該應用程式相關的排序,而是搜尋與該視窗相關的排序。

答案1

只需一個小腳本並在您的系統上進行一個小手術,就可以完全按照您的描述進行安排。

原料

  1. wmctrl;它可能需要安裝。
  2. 下面的腳本
  3. xprop,取得視窗屬性。它已安裝在您的系統上。
  4. xfce 面板設定中的設定更改
  5. 附加鍵盤快速鍵

如何設定

  • 安裝wmctrl

    sudo apt-get install wmctrl
    
  • 建立目錄~/bin/home/<yourname>/bin)。將下面的腳本複製到一個空文件中,將其另存為panel_navigate(無擴展名)~/bin使其可執行

  • 變更面板設定:
    前往設定管理員 >“面板”>“專案”(選項卡)>“視窗按鈕”>

    • “排序順序”> 選擇:時間戳
    • “視窗分組”> 選擇:“從不”
    • 確保“顯示所有工作區或視窗中的視窗”聯合國打勾

    在此輸入影像描述

  • 新增鍵盤快速鍵:
    前往“設定管理員”>“鍵盤”>“應用程式快速鍵”,選擇“新增”。新增指令:

    panel_navigate 1
    

    將其設定為組合鍵Ctrl+1

    在此輸入影像描述

  • 現在您可以選擇:

    • 重複此過程以panel_navigate 2Ctrl+下添加2,依此類推(直到 9)

    (儲存選項)或者(如果您不怕手動編輯設定檔):

    • 您可以編輯該文件:

      ~/.config/xfce4/xfconf/xfce-perchanel-xml/xfce4-keyboard-shortcuts.xml
      

      其中xfce儲存了鍵盤快捷鍵(在 中)。使用以下命令開啟檔案mousepad並尋找類似以下內容的行:

      <property name="&lt;Primary&gt;1" type="string" value="panel_navigate 1"/>
      

      複製該行,將其貼上到下一行(插入)並將兩次出現的 1 更改為 2,這樣您將得到:

      <property name="&lt;Primary&gt;1" type="string" value="panel_navigate 1"/>
      <property name="&lt;Primary&gt;2" type="string" value="panel_navigate 2"/>
      

    等等..

    確保縮排完全相同。重複此過程直至 9。

登出並重新登錄,它應該可以工作:

Ctrl+1

在此輸入影像描述

Ctrl+3

在此輸入影像描述

等等...

劇本

#!/usr/bin/env python3

import subprocess
import sys

def get_value(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").strip()

def run_command(command):
    subprocess.Popen(["/bin/bash", "-c", command])

current_workspace = [l for l in get_value("wmctrl -d").splitlines() if l.split(" ")[2] == "*"][0][0]
wlist_ids = [item.split()[0:4] for item in get_value("wmctrl -l").splitlines()]
relevant = [item for item in wlist_ids if item[1] == current_workspace]
panel = []
for item in relevant:
    data = get_value("xprop -id "+item[0])
    if ("_TYPE_NORMAL" in data, "TYPE_DIALOG" in data).count(True) == 1:
        panel.append(item)
try:
    window = panel[int(sys.argv[1])-1][0]
    run_command("wmctrl -ia "+window)
except IndexError:
    pass

解釋

解決方案是一種機會主義的解決方案。我想到由命令調用的視窗列表wmcrl -l是按視窗的年齡排序的。透過使 xfce 面板執行相同的操作(設定),兩個命令完美對應。該腳本的作用是建立一個視窗列表,過濾掉「真實」的可見視窗(使用xprop)並透過命令切換到選定的窗口panel_navigate,並以視窗編號(從左到右)作為參數。

問題

我注意到一個例外:IDLE(python 解釋器)視窗的 pid 0 且它們的屬性不能被xprop.這些視窗不會出現在視窗清單中,並且會被腳本跳過。

筆記

雖然組合鍵Ctrl+<number>在測試時沒有引發任何錯誤,但它可能與某些應用程式發生衝突。選擇 (eg) Ctrl+ Alt+可能會更安全1

答案2

不確定是否相同的應用程式,但Unity您可以使用 切換應用程序super+number,例如super + 1= 啟動​​器上的第一項,super + 2= 啟動器的第二項,super + n= 啟動器的第 n 項。這也有助於打開放置在啟動器上的任何項目,例如如果 nautilus 是啟動器的第一個項目,super + 1將開啟 nautilus 檔案管理器。

相關內容