如何在任务切换中停止重新排序同类多个预览窗口?

在Ubuntu 12.04的默认图形模式下使用任务切换时,如果它们是同一类型的多个窗口,例如。 多个终端窗口,您可以一起看到它们并选择您想要的那个。

在此处输入图像描述

我的问题是这些窗口的顺序不断变化。 它遵循“最后使用”的顺序。 我总是希望他们处于修复顺序; 我该怎么做?

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

在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终端中使用选项卡,而不是为您的众多活动打开单独的终端(或工作空间)。 可从终端首选项中获得用于制表符切换的快捷键。 见下文:

终端首选项

如果您的桌面足够大,另一个选择是将一些窗口设置为“始终在顶部”并将它们排列在一起,以便您可以使用鼠标进行切换。 这是一个kludge …但我有时会发现它在使用相同类型的多个窗口时很有用。

另一个是定义具有不同配色方案的几个终端配置文件,并为每个终端使用不同的终端配置文件……这将使它们易于识别。 在此处输入图像描述 是的,这个也是一个解决方法。

我认为你可以通过修改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); } 

在这里你可以清楚地看到这正是我们所寻找的function。 上半部分负责切换视口模式:

显示模式

每当我们进入一组应用程序或者我们离开该组时,就会出现此切换。 optionGetAltTabBiasViewport指示何时发生这种情况。 然后参与GetAltTabIcons以获得正确的图标。 最后调用带有SortMode::FOCUS_ORDERShow函数来显示我们的排序图标。 SortMode是一个枚举:

 enum class SortMode { LAUNCHER_ORDER, FOCUS_ORDER, }; 

并将FOCUS_ORDER更改为LAUNCHER_ORDER应该可以解决您的问题。 您可以在调用Show之前插入一个额外的if语句,以防止在ShowMode::ALL情况下启动启动器顺序排序。

请注意,Unity 8的源代码看起来完全不同。 因此,此解决方案仅适用于Unity 7。 经过半个小时修复缺失的依赖关系,经过一段时间与cmake战斗后,我决定不破坏我的系统,明天在VM中试试;)