%20%E5%B7%A5%E4%BD%9C%E7%A9%BA%E9%96%93%20-%20%E5%A6%82%E4%BD%95%E6%93%8D%E4%BD%9C%EF%BC%88%E4%BE%8B%E5%A6%82%E4%BB%BB%E6%84%8F%E9%87%8D%E6%96%B0%E6%8E%92%E5%BA%8F%EF%BC%89%E5%B7%A5%E4%BD%9C%E7%A9%BA%E9%96%93%EF%BC%9F.png)
Gnome 工作區使用起來非常方便,但我發現它們很難管理。例如:
- 關閉工作區中的最後一個視窗會導致該工作區關閉(如果不是立即關閉,那麼很快就會關閉)
- 新視窗只能插入到底部始終存在的空白工作區。
- 移動工作區需要單獨移動每個窗口,如果工作區在預期過程中變空,則工作區將關閉。
我雖然存在但找不到的功能是:
- 能夠抑制工作空間的自動關閉,也許可以用關閉(空)工作空間指令來替換。
- 能夠旋轉工作區(因此空工作區可以放置在任何地方)
- 能夠將任何工作區與其較低的鄰居交換
也許我只是對眾所周知的事實一無所知。或者,也許 Gnome 提供了一個用於這種行為程式設計的 API。或者也許這是不可能的。
請告知。
附錄:在選擇這個問題的答案幾天后,我發現了一個相對簡單的 API 來實現既定目標。提供該資訊以下作為一個新的答案。
答案1
註:回答我自己的問題-同時保留已接受的答案,因為它準確地反映了 Gnome 狀態。
有一個項目xdo工具它以 Ubuntu 18.04 託管包的形式方便地提供。它提供對桌面、視窗及其關係的讀寫存取。 (還有許多我沒有使用的其他功能。)
使用這個套件可以很簡單地編寫所需的功能。直接 CLI 沒什麼用,但是將它們連結到 Ubuntu 自訂快捷方式意味著我能夠使用按鍵移動選擇並上下移動單個桌面,同時使用 Gnomes 標準鳥瞰圖觀看所有桌面。
Gnome 標準鳥瞰可以通過“Super+a,Super+a”,然後將滑鼠移到螢幕右側,此時所有桌面將出現在垂直陣列中。
為了避免干擾Gnome,需要關閉Gnome的動態桌面並使用靜態桌面設定代替。使用靜態桌面在所選答案中建議。
我的完整的程式碼作為要點提供。
作為範例,此程式碼摘錄用於交換桌面:
swaprelative(){
nbr=$1
ndt=$(xdotool get_num_desktops)
if [[ $ndt -lt 2 ]] ; then return 0 ; fi
adt=$(xdotool get_desktop)
bdt=$((( adt + ndt + nbr) % ndt ))
if [[ $bdt == $adt ]] ; then return 0; fi
if [[ $bdt -lt 0 ]] ; then
echo "relative neighbor value $nbr is out of bounds"
return 1;
fi
xdotool search '.*' | while read w ; do
if ! window_has_desktop $w ; then continue; fi
wdt=$(xdotool get_desktop_for_window $w)
if [[ $wdt -eq $adt ]] ; then
xdotool set_desktop_for_window $w $bdt
elif [[ $wdt -eq $bdt ]] ; then
xdotool set_desktop_for_window $w $adt
fi
done
xdotool set_desktop $bdt
}
必須強調的是,編碼如此簡單是由於該xdotool
項目的強大功能。該項目不依賴侏儒,而是與並行操作侏儒訪問相同的X基元。它可能可以在許多不同的視窗管理器中使用,只要注意避免 WM 和 xdotool 之間的相互幹擾(例如,關閉 Gnome 中的動態桌面)。
答案2
在 GNOME Shell 中,預設情況下,人們無法在整個工作區及其包含的應用程式中移動。雖然這將是一個強大的功能,但我不知道具有此功能的 Linux 桌面環境。
對於API,GNOME Shell 具有擴充機制。這其實根本不是一個 API。它本質上是系統中的一個“(潛在的安全)漏洞”,開發人員可以在其中註入自己的 javascript 程式碼來更改 Shell 的行為。現有的許多 GNOME Shell 擴充說明了可以做什麼,在許多情況下都取得了巨大的成功。
就您期望的功能而言,情況如下:
能夠抑制工作空間的自動關閉,也許可以用關閉(空)工作空間指令來替換。
預設情況下,GNOME Shell 附帶動態工作空間。但是,可以關閉此功能,並且您可以設定多個固定工作區。為此,請安裝 (GNOME) Tweaks,然後在“工作空間”標籤上選擇“靜態工作空間”如圖所示。
能夠旋轉工作區(因此空工作區可以放置在任何地方)
不幸的是,無法更改工作區(及其內容)的順序。您只能移動應用程式。當然,對於靜態工作區,空工作區仍然是空的。
能夠將任何工作區與其較低的鄰居交換
這取決於你的意思。如果您的意思是再次更改工作區的順序,請參閱上面的觀點。如果您的意思是快速切換工作區,那麼可以使用快速鍵Ctrl+ Alt+ Up/Down或Super+ PgDn/輕鬆實現PgUp。
切換到靜態工作區可以讓您更好地控制工作區的位置,但限制是您無法移動整個工作區。
使用靜態工作區增強工作流程的一些技巧
您可以安裝工作區指示器GNOME Shell 擴充功能提供您目前所在工作空間的指示器。如果您願意,該擴充功能可讓您重新命名工作區(例如“1 - 瀏覽”而不是“1”)。
您可以配置熱鍵以快速切換到特定工作區或行動應用程序,例如:
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-4 "['<Super>4']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-4 "['<Super><Shift>4']"
這些命令將設定一個熱鍵Super+4立即將您帶到 WS 4,以及一個熱鍵Super+ Shift+4將應用程式移至 WS 4(與平鋪視窗管理器 i3 中的工作方式非常相似)。
答案3
能夠將任何工作區與其較低的鄰居交換
有一個擴充功能允許您重新排序與 Gnome 3.38 相容的工作區:Reorder Workspaces
https://extensions.gnome.org/extension/3685/reorder-workspaces/
請注意,捷徑僅適用於工作區概覽。我已經打開了一個問題,以便從視窗視圖中實現:https://github.com/jeremiahmegel/gnome-reorder-workspaces/issues/5