Рабочие пространства Gnome очень удобны в использовании, но я считаю, что ими очень трудно управлять. Например:
Возможности, которые я, хотя и существует, но не могу найти:
Может быть, я просто не знаю об общеизвестных фактах , Или, может быть, Gnome предлагает API для программирования такого поведения. Или, может быть, это невозможно.
Пожалуйста, сообщите.
Приложение. Через несколько дней после выбора ответа на этот вопрос я нашел относительно простой API для достижения поставленных целей. Эта информация предоставляется ниже в качестве нового ответа.
В GNOME Shell по умолчанию нельзя перемещаться по всем рабочим областям с приложениями, которые они содержат. Хотя это было бы мощной функцией, я не знаю, в каких средах Linux это предусмотрено.
Что касается API, в GNOME Shell есть механизм расширений. Это на самом деле не API вообще. По сути, это «дыра (потенциальной безопасности)» в системе, где разработчики могут внедрить свой собственный код javascript, чтобы изменить поведение командной консоли. Существующие многочисленные расширения GNOME Shell иллюстрируют, что можно сделать, во многих случаях с большим успехом.
Что касается ожидаемых функций, ситуация выглядит следующим образом:
Возможность подавления автоматического закрытия рабочих пространств, возможно, для замены на закрытое (пустое). ) -workspace command.
По умолчанию GNOME Shell поставляется с динамическими рабочими пространствами. Это, однако, может быть отключено, и вы можете установить количество фиксированных рабочих областей. Для этого установите (GNOME) Tweaks и выберите «Статические рабочие пространства» на вкладке «Рабочие пространства» , как показано здесь .
Возможность вращать рабочие пространства (чтобы пустое рабочее пространство можно было разместить где угодно)
Нет возможности изменить порядок рабочих пространств (и их содержимое) , к несчастью. Вы можете только перемещать приложения. Конечно, в статических рабочих пространствах пустое рабочее пространство остается пустым.
Возможность поменять любое рабочее пространство с его нижним соседом
Это зависит от того, что вы имеете в виду. Если вы имеете в виду снова изменить порядок рабочих пространств, то смотрите пункт выше. Если вы имеете в виду быстрое переключение рабочих пространств, то это легко достигается с помощью сочетаний клавиш Ctrl kbd> + Alt kbd> + Вверх kbd> / Вниз kbd > или Super kbd> + PgDn kbd> / PgUp kbd>.
Переключение на статические рабочие пространства может дать вам больше контроля над тем, что и где, с ограничением, что вы не можете перемещать целые рабочие пространства вокруг.
Несколько советов по улучшению рабочего процесса со статическими рабочими пространствами
Вы можете настроить горячие клавиши для быстрого переключения на определенную рабочую область или перемещения приложения, например:
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 kbd> + 4 kbd>, которая немедленно приводит вас к WS 4, и горячая клавиша Super kbd> + Shift kbd> + 4 kbd>, которая перемещает приложение в WS 4 (так же, как это работает в диспетчере окон листов i3).
Примечание: отвечая на мой собственный вопрос - , оставляя принятый ответ, поскольку он точно отражает статус гнома.
Существует проект xdotool , который удобно предоставлять в виде управляемой упаковки Ubuntu 18.04. Он предлагает доступ для чтения и записи к рабочим столам, окнам и их отношениям. (Также много других функций, которые я не использовал.)
Используя этот пакет, было просто кодировать нужные функции. Прямой интерфейс командной строки бесполезен, но связывать их с пользовательскими ярлыками 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
. Этот проект не зависит от Gnome , а работает параллельно с Gnome , получающим доступ к тем же примитивам X . Скорее всего, его можно использовать в нескольких различных оконных менеджерах, при условии, что будут предприняты меры для предотвращения взаимных помех между WM и xdotool (например, отключение динамических рабочих столов в Gnome).