Как остановить переупорядочивание однотипных окон предварительного просмотра при переключении задач?

21

При использовании переключения задач в графическом режиме по умолчанию Ubuntu 12.04, если они представляют собой несколько окон одного типа, например. Несколько окон терминала, вы можете увидеть их все вместе и выбрать, какой вы хотите.

введите описание изображения здесь

Моя проблема в том, что порядок этих окон постоянно меняется. Это следует за "последним использованным" заказом. Я хочу, чтобы они всегда были в точном порядке; как я могу это сделать?

n611x007
источник
3
Очень раздражающая особенность. Я задал тот же вопрос здесь askubuntu.com/questions/271506/… но, к сожалению, до сих пор нет ответа.
Gumkins
5
Эта «проблема» существует и в 14.04! Эти окна должны быть упорядочены в зависимости от их относительного положения на экране и на рабочих столах, когда окна с более чем одного рабочего стола предварительно просматриваются. Только когда одна вдова помещается близко друг к другу (измеряется в определенном диапазоне пикселей), положение предварительного просмотра зависит от правила «последнего использования». Я бы даже сделал еще одну «подстройку» к этому правилу: примените региональные языковые предпочтения текста «слева направо» или «справа налево», чтобы решить, какая сторона экрана считается «первой» - - слева или справа.
Пи Джей Сингх,
1
Возможным решением будет сохранить окна в том порядке, в котором они были созданы, но, по крайней мере, сохранить их в порядке. Я предпочел бы случайный, но стабильный порядок, чем этот беспорядок, я чувствую, что постоянно жонглирую экранами.
Минос
1
Я считаю, что это потребует изменения кода единства. Вы можете начать здесь: unity3d.com/learn/documentation
Старейшина Гик
У меня все еще есть эта проблема в 2018 году, версия 18.04. Супер раздражает.
Джесси Бусман

Ответы:

2

Вместо того, чтобы изменять кодовую базу Unity, вы можете рассмотреть возможность использования рабочих столов для достижения желаемого результата.

Пример использования Compiz Desktop Cube в CompizConfigSettingsManager

Откройте CompizConfigSettingsManager ( ccsm) и измените настройки, чтобы они соответствовали следующему:

CCSM-1

CCSM-2

Открытый терминал 1

Используйте сочетание клавиш CTRL-ALT -> (стрелка вправо), чтобы перейти к следующему рабочему столу справа.

Открытый терминал 2

Используйте сочетание клавиш CTRL-ALT -> (стрелка вправо), чтобы снова перейти на следующий рабочий стол вправо.

Открытый терминал 3

Используйте сочетание клавиш CTRL-ALT - <- (стрелка влево), чтобы перейти на предыдущий рабочий стол с терминалом 2 (или дважды, чтобы вернуться к терминалу 1).

Другой вариант

Используйте менеджер Viewport в CompizConfig SettingManager и назначьте комбинацию клавиш, чтобы перейти на рабочий стол по вашему выбору

Примечание: до сих пор я смог заставить работать только 10, хотя 12 должно быть возможно с этим методом. CCSM-3

Обновление: основано на проблемах, выраженных в комментариях:

Просто щелкните правой кнопкой мыши на строке заголовка Gedit и выберите всегда на видимом рабочем пространстве ...

Другой вариант:

Вместо того, чтобы открывать отдельные терминалы (или рабочие пространства) для ваших многочисленных действий, вы также можете использовать вкладки в терминале gnome. Сочетания клавиш для переключения вкладок доступны в настройках терминала. Увидеть ниже:

терминально-префы

Старейшина Гик
источник
Если я правильно понимаю, это оставит меня с необходимостью использовать другой ярлык или щелчок для переключения задач. Можно сделать, я думаю. Однако как бы я клонировал все нетерминальные окна, которые мне нужны, которые обычно имеют по 1 экземпляру на всех рабочих столах, когда мне нужно или нужно, чтобы это взаимодействие было быстрым и возможным между терминалом (ами) и другими окнами?
n611x007
Сколько экземпляров вам нужно? Использование диспетчера просмотра даст вам до 12. Клавиатура активирована. Это "клики"?
Старейшина Гик
См. Также askubuntu.com/questions/34572/…
Старейшина Гик
Я думаю, что меня неправильно поняли ... Рабочих мест достаточно. Позвольте мне попытаться выразить это так. Гипотетический пример. Перед: 3 терминала, «t1», «t2», «t3», + 1 окно gedit. Я копирую и вставляю туда-сюда между gedit и «t1» и «t2». Порядок переключения задач плохой. Корм (применяя ваш обходной путь): у меня есть 3 терминала в 3 рабочих пространствах 'w1', 'w2', 'w3' соответственно, окно gedit на 'w1'. Мне нужно скопировать и вставить между Gedit и «T1» и «T2». Как скопировать и вставить между 't2' и gedit на 'w2' наиболее удобным способом?
n611x007
У меня не было проблем с копированием и вставкой между рабочими пространствами, поэтому я не уверен, что именно вы спрашиваете. Поскольку «наиболее удобный способ» - это вопрос мнения, а не измеримого факта, у вас есть мои извинения, но я не думаю, что смогу логически ответить на это.
Старейшина Гик
1

Другой вариант, если ваш рабочий стол достаточно большой, это установить некоторые окна на «всегда сверху» и расположить их так, чтобы вы могли переключаться с помощью мыши. Это помеха ... но я иногда нахожу это полезным при работе с несколькими окнами одного типа.

Еще одно - определить несколько профилей терминала с разными цветовыми схемами и использовать разные для каждого терминала ... это позволит легко их идентифицировать. введите описание изображения здесь Да, это тоже обходной путь.

смех
источник
1

Я думаю, что вы можете добиться этого, изменив исходный код Unity 7 . Просто следуйте шагам, описанным на сайте разработчика, но прежде чем начать процесс сборки, откройте: ./trunk/plugins/unityshell/src/unityshell.cppи посмотрите на SetUpAndShowSwitcherфункцию:

void UnityScreen::SetUpAndShowSwitcher(switcher::ShowMode show_mode)
{
  RaiseInputWindows();

  if (!optionGetAltTabBiasViewport())
  {
    if (show_mode == switcher::ShowMode::CURRENT_VIEWPORT)
      show_mode = switcher::ShowMode::ALL;
    else
      show_mode = switcher::ShowMode::CURRENT_VIEWPORT;
  }

  auto results = launcher_controller_->GetAltTabIcons(show_mode == switcher::ShowMode::CURRENT_VIEWPORT,
                                                      switcher_controller_->show_desktop_disabled());

  if (switcher_controller_->CanShowSwitcher(results))
    switcher_controller_->Show(show_mode, switcher::SortMode::FOCUS_ORDER, results);
}

Здесь вы можете ясно увидеть, что это именно та функция, которую мы искали. Верхняя часть отвечает за переключение режимов просмотра:

Показать режимы

Это переключение появляется каждый раз, когда мы переходим в группу приложений или если мы выходим из группы. optionGetAltTabBiasViewportуказывает, когда это произойдет. Затем GetAltTabIconsучаствует, чтобы получить правильные значки. И, наконец, вызывается Showфункция с SortMode::FOCUS_ORDERотображением отсортированных значков. SortMode - это перечисление:

enum class SortMode
{
  LAUNCHER_ORDER,
  FOCUS_ORDER,
};

и изменение FOCUS_ORDERв LAUNCHER_ORDERдолжно решить вашу проблему. Вы можете вставить дополнительный оператор if перед вызовом, Showчтобы предотвратить сортировку порядка запуска в ShowMode::ALLслучае.

Обратите внимание, что исходный код Unity 8 выглядит совершенно иначе. Так что это решение может работать только для Unity 7. После получаса исправления отсутствующих зависимостей и после еще одного часа борьбы с cmake я решил не разрушать мою систему и завтра попробовать ее в ВМ;)

Дмитрий Подборский
источник