在 mint 17.2 中是否有一个键绑定可以切换到“最后一个”工作区?

在 mint 17.2 中是否有一个键绑定可以切换到“最后一个”工作区?

薄荷色 17.2,肉桂色。

我使用 dconf 编辑器设置热键以在工作区之间切换。这是我的工作区键绑定的相关部分:

在此输入图像描述

我想要的是一个可以切换回我上次所在工作区的键绑定。此功能在 Windows 桌面管理器“dexpot”中可用,如下所示:

在此输入图像描述

因此,在 Windows 下,当我键入“Ctrl-Alt-L”时,它会将我带到我所在的最后一个工作区。如果您反复点击它,它就会在两个活动工作区之间切换。

我知道这个问题以前已经被问过,因为我几年前发现过一次(答案是“不,你不能”),但不幸的是我在谷歌下找不到任何处理这个问题的东西,所以我道歉如果已经回答了这个问题,请提前。我也知道这是窗口管理器(例如 cinnamon)的功能,而不是 gnome 的功能。

我希望现在有某种方法可以做到这一点,因为我真的很怀念这个功能,特别是因为我最近经常在 Windows 和 Linux 之间进行上下文切换。

非常感谢!

答案1

由于没有人想出任何东西(事实上,我自己也找不到任何东西),我认为这个问题的答案是“不,你做不到”。于是我开了一个肉桂 github 上的问题请求将此作为一项功能。

由于我在那里也没有得到回应,所以我正在考虑自己实施。在检查 cinnamon 代码库时,看起来后端“引擎”是用 c 编写的(很难修复),但很多前端用户界面的东西是用 JavaScript 处理的(更容易修复)。因此,我可能有合理的机会将一些东西组合在一起,所以如果不创建一个合并到 Cinnamon 本身的实际修复程序,我至少可以修补我的系统。

如果我想出解决方案,我会将结果发布在这里。

更新:我做了一个代码破解。这不是官方解决方案,但如果您参考之前提到的票,您可以找到详细信息。我也在这里复制我的文章:

解决方案

局限性

好的,在设置测试图像、查看代码并进行一些研究之后,我想出了一个解决方案来解决这个问题。注意:目前这只是一种解决方法,涉及手动编辑一些文件。为了将此作为“官方”修复提交,我需要:

  1. 添加对新关键字“switch-to-workspace-last”的支持,以便它至少在 dconf-editor 中可见(如果不在控制面板的键盘->快捷方式 gui 中)。
  2. 编写任何单元测试(尽管,我在 /tests 下没有看到我接触的文件的任何 uts(?))。
  3. 处理创建 cinnamon 包的 .deb 的实际构建(或者不需要提交修复程序?)。

  4. 获得更多反馈,了解我的做法是否是“好”的做法。

现在,我将坚持使用解决方法。事实上,我很高兴我有一个解决方法,而且只需几行代码即可实现。这让我可以立即开始使用它(天哪,拥有它真是太棒了)。

无论如何,在另一条评论中,我将写一篇详细的帖子,其中包含一些背景:哪些文件很重要,我是如何弄清楚的,以及当我将修复程序传播到我的生产映像中时到底需要做什么。

如何在 Cinnamon 17.2 (2.6.13+rafaela) 中添加对“访问最后一个工作区”的热键支持。

概述:

我们将劫持您选择的很少使用的键绑定的功能(我使用“move-to-workspace-left”)以及实现“move-to-workspace-last”的功能。这涉及到向“/usr/share/cinnamon/js/ui/windowManger.js”添加几行。我们需要将一个新的状态变量“global.screen.penultimate_workspace”添加到“global”js变量中,然后利用函数“global.screen.get_workspace_by_index(new_index)”激活“最后一个”工作空间,然后调用“激活'以切换到它。

执行类似操作的现有文件的一个很好的例子是工作区切换器小程序,它位于 '/usr/share/cinnamon/applets/[电子邮件受保护]/applet.js'。您必须将此小程序添加到面板中才能查看该文件。

幸运的是,这可以完全在 Cinnamon 的 JavaScript 部分中完成。

细节

代码变更

看这里获取 Mint 17.3 修补文件的完整副本。搜索“vt”(我的姓名缩写)以查看代码的相关部分。这比我接下来给出的小代码片段更容易理解。

像这样编辑文件“/usr/share/cinnamon/js/ui/windowManger.js”:

1)初始化新的全局变量'screen.penultimate_workspace':

WindowManager.prototype = {                                                                   
          _init : function() {                                                                      
         this._cinnamonwm =  global.window_manager;  
         ...
         //fix add
        global.screen.penultimate_workspace = 1;
        //fix end

2) 每当有人通过“switch-to-workspace-”键手动切换到工作空间时更新penultimate_workspace。这是 windowManager.js 中的函数 _switchWorkspace ;

   _switchWorkspace : function(cinnamonwm, from, to, direction) {
        //fix add
        global.screen.penultimate_workspace = from;
        //fix end
        if (!this._shouldAnimate()) {
            cinnamonwm.completed_switch_workspace();
            return;
        }

3)覆盖您选择的键绑定处理程序:

   _moveWindowToWorkspaceLeft : function(display, screen, window, binding) {
        //original code
        //this._shiftWindowToWorkspace(window, Meta.MotionDirection.LEFT);
        //end original code
        //fix add
        // get workspace object for 'last' workspace
        let metaWorkspace = global.screen.get_workspace_by_index(global.screen.penultimate_workspace);
        // save current workspace index into penultimate_workspace
        global.screen.penultimate_workspace = global.screen.get_active_workspace_index();

        // and switch to penultimate workspace
        metaWorkspace.activate(global.get_current_time() );
        //fix end
    },

dconf 编辑器更改:

1)我选择使用“Ctrl-Alt-l”(小写的“ell”)作为“切换到工作空间的最后一个”命令。不幸的是,这已经被用作屏幕锁定。 a) 所以转到控制面板->键盘->快捷方式->系统->LockScreen 并更改为 Ctrl-Alt-Shift-l (或任何你想要的)

2)使用 dconf 编辑器将模式 org.cinnamon.desktop.keybindings.wm 中的“move-to-workspace-left”更改为“Control -Alt-l”

激活变更

1) 输入“Ctrl-Alt-Esc”刷新 cinnamon 窗口管理器。这有点像注销和登录,只不过所有窗口和编辑会话仍然有效。

注意:有时您的终端可能会在执行此操作后挂起。如果发生这种情况,只需重新启动您的映像即可。

就是这样。执行此操作后,按“Ctrl-Alt-l”应该会将您带到上次访问的窗口。

调试帮助:

1) 如果更改文件,请使用 Ctrl-Alt-Esc 刷新窗口管理器。在执行此操作之前,您所做的任何更改都不会生效。

2) 使用 global.log("vt: windowManger.blah");

查看调试消息。在 ~/.cinnamon/glass.log 上执行 tail -f 以查看消息:

tail -f glass.log

注意:每次执行“Ctrl-Alt-Esc”刷新窗口管理器时,您都必须终止所有先前的 tail -f 会话并重新开始。

相关内容