如何在任务切换中停止对相同种类的多个预览窗口进行重新排序?


21

在Ubuntu 12.04的默认图形模式下使用任务切换时,如果它们是同一类型的多个窗口,例如。多个终端窗口,您可以一起查看所有窗口,然后选择所需的窗口。

在此处输入图片说明

我的问题是这些窗口的顺序不断变化。它遵循“最后使用”的顺序。我希望它们始终保持固定的顺序;我该怎么做?


3
非常烦人的功能。我在这里问了同样的问题askubuntu.com/questions/271506/…但不幸的是仍然没有答案。
gumkins 2014年

5
这个“问题”也存在于14.04中!当预览来自多个桌面的窗口时,实际上应该根据它们在屏幕和桌面上的相对位置对这些窗口进行排序。仅当一个寡妇紧靠另一个寡妇(在某个像素范围内测量)时,预览的位置才取决于“上次使用”规则。我什至还要对该规则进行“调整”:应用区域语言首选项(从“从左到右”或“从右到左”的文本)来确定屏幕的哪一侧被认为是“第一”- -左侧或右侧。
PJ辛格

1
一种可能的解决方案是使窗口保持其创建顺序,但至少保持其顺序固定。我宁愿选择一个随机但稳定的顺序来解决混乱问题,我感觉自己一直在不断地调整屏幕。
Minos,

1
我相信这将需要更改统一代码。您可能从这里开始:unity3d.com/learn/documentation
Elder Geek

我在2018年版本18.04中仍然遇到此问题。超级烦人。
杰西·布斯曼

Answers:


2

您可以考虑使用台式机来获得所需的结果,而不是更改统一的代码库。

在CompizConfigSettingsManager中使用Compiz Desktop Cube的示例

打开CompizConfigSettingsManager(ccsm)并更改设置以匹配以下内容:

ccsm-1

ccsm-2

打开终端1

使用键盘快捷键CTRL-ALT->(向右箭头)转到右侧的下一个桌面。

打开2号航站楼

使用键盘快捷键CTRL-ALT->(向右箭头)再次转到右侧的下一个桌面。

打开3号航站楼

使用键盘快捷键CTRL-ALT-<-(向左箭头)转到包含终端2的上一个桌面(或两次回到终端1)。

另外一个选项

使用CompizConfig SettingManager中的视口管理器并分配一个组合键,以直接转到您选择的桌面

注意:到目前为止,我只能使10个工作,尽管使用此方法应该可以使12个工作。 ccsm-3

更新:基于评论中表达的关注:

只需右键单击gedit标题栏,然后选择始终在可见的工作区...

另外一个选项:

除了为多个活动打开单独的终端(或工作区),您还可以在gnome终端中使用选项卡。可以从终端首选项中使用选项卡切换的快捷键。见下文:

终端偏好


如果我理解正确,这将使我有必要使用其他快捷方式或点击方式来切换任务。我猜可以做到的。但是,当我需要或希望在终端和其他窗口之间进行快速且可能的交互时,我该如何克隆我通常需要在所有桌面上只有一个实例的所有非终端窗口?
n611x007'3

您需要多少个实例?使用视口管理器最多可以给您12。键盘已激活。那是“ clicky”吗?
年长者怪胎


我想我很难理解...工作区就足够了。让我尝试这样说。假设的例子。之前:3个终端,'t1','t2','t3',+ 1个gedit窗口。我在gedit与“ t1”和“ t2”之间来回复制粘贴。任务切换顺序错误。之后(应用您的解决方法):我分别在3个工作区“ w1”,“ w2”,“ w3”上有3个终端,在“ w1”上有一个gedit窗口。我需要在gedit与“ t1”和“ t2”之间复制粘贴。如何以最舒适的方式在“ t2”和gedit上的“ t2”之间复制粘贴?
n611x007 2015年

我在工作区之间复制和粘贴时没有问题,所以我不确定您到底在问什么。由于“最舒适的方式”是见解而不是可衡量的事实,您对此表示歉意,但我认为我不能对此做出逻辑回应。
年长者极客2015年

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_ORDERLAUNCHER_ORDER应该可以解决您的问题。您可以在调用前插入一个附加的if语句,Show以防止启动器订单排序ShowMode::ALL

请注意,Unity 8的源代码看起来完全不同。因此,此解决方案仅适用于Unity 7。在修复了丢失的依赖项半小时之后,又与cmake战斗了一个小时,我决定不破坏我的系统,明天再在VM中进行尝试;)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.