Есть ли привязка клавиш для переключения на «последнее» рабочее пространство в mint 17.2?

Mint 17.2, Cinnamon.

Я использую редактор dconf, чтобы настроить горячие клавиши для переключения между рабочими пространствами. Вот соответствующая часть привязок клавиш моей рабочей области:

enter image description here

Я хочу привязку клавиш, которая переключает обратно на последнее рабочее пространство, в котором я был. Эта функция доступна в диспетчере рабочего стола Windows "dexpot", как показано здесь:

enter image description here

Итак, когда я набираю "Ctrl-Alt-L" в окнах, я попадаю в последнее рабочее пространство, в котором я был. Если вы нажмете его несколько раз, затем он переключается между двумя активными рабочими пространствами.

Я знаю, что этот вопрос задавался раньше, поскольку я нашел его однажды несколько лет назад (и ответ был «нет, не можете»), но, к сожалению, я больше не могу найти ничего, связанного с этим в Google, поэтому Заранее прошу прощения, если на это уже был дан ответ. Я также знаю, что это функция оконного менеджера (например, корицы), а не gnome.

Я надеюсь, что есть какой-то способ сделать это сейчас, так как мне очень не хватает этой функциональности, тем более, что в последнее время я часто переключаю контекст между Windows и Linux.

Большое спасибо!

1
11.06.2020, 15:04
1 ответ

Поскольку никто ничего не придумал (и я сам ничего не могу найти), я предполагаю, что ответ на этот вопрос будет "Нет, вы не можете этого сделать". Поэтому я открыл проблему на cinnamon github с просьбой сделать это функцией.

Так как я не получил ответа и там, я ищу возможность реализовать это самостоятельно. Изучая кодовую базу cinnamon, похоже, что внутренний "движок" написан на c (сложно исправить), но многие вещи внешнего пользовательского интерфейса обрабатываются на JavaScript (проще исправить). Таким образом, есть шанс, что я смогу что-то взломать, чтобы хотя бы подлатать свою систему, если не создать настоящее исправление, которое будет включено в саму Cinnamon.

Если я найду решение, я опубликую результат здесь.

Обновление: Я сделал взлом кода. Это не официальное решение, но если вы обратитесь к ранее упомянутому тикету, то сможете найти подробности. Я воспроизвожу свою запись и здесь:

Решение

Ограничения

Итак, после установки тестового изображения, изучения кода и некоторых исследований, я придумал решение, как это исправить. Примечание: в настоящее время это просто обходной путь, который включает в себя ручное редактирование нескольких файлов. Чтобы представить это как "официальное" исправление, мне нужно:

  1. добавить поддержку нового ключевого слова "switch-to-workspace-last" так, чтобы оно было видно, по крайней мере, в dconf-редакторе, если не в Keyboard->Shortcuts gui в панели управления.
  2. Написать любые модульные тесты (хотя, я не вижу никаких uts для файлов, которые я трогал в разделе /tests (?)).
  3. Разберитесь с созданием фактической сборки .deb из пакета cinnamon (или это не обязательно для отправки исправления?).

  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' в js-переменную 'global', а затем использовать функцию 'global.screen.get_workspace_by_index(new_index)' для активации "последнего" рабочего пространства, а затем вызвать 'activate' для перехода на него.

Хорошим примером существующего файла, который делает нечто подобное, является апплет workspace-switcher, который находится по адресу '/usr/share/cinnamon/applets/workspace-switcher@cinnamon.org/applet.js'. Вы должны добавить этот апплет на панель, чтобы увидеть файл.

К счастью, это можно сделать полностью на JavaScript в Cinnamon.

Подробности

Изменения кода

Смотрите здесь для полной копии исправленного файла 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) обновляйте penultimate_workspace каждый раз, когда кто-то вручную переключается на рабочее пространство с помощью клавиши 'switch-to-workspace-'. Это функция _switchWorkspace в windowManager.js ;

   _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-editor changes:

1) Я решил использовать "Ctrl-Alt-l" (это нижний регистр 'ell) в качестве команды 'switch-to-workspace-last'. К сожалению, она уже использовалась в качестве блокировки экрана. a) итак, зайдите в панель управления->Клавиатура->Сокращения->Система->Блокировка экрана и измените на Ctrl-Alt-Shift-l (или то, что вы хотите)

2) используя редактор dconf, измените 'move-to-workspace-left' на 'Control -Alt-l' в схеме org.cinnamon.desktop.keybindings.wm

Активируйте изменения

1) введите "Ctrl-Alt-Esc", чтобы обновить оконный менеджер cinnamon. Это похоже на выход из системы и вход в систему, за исключением того, что все ваши окна и сеансы редактирования останутся в силе.

Примечание: иногда ваш терминал может зависнуть после выполнения этого действия. Если это произойдет, просто перезагрузите образ.

Вот и все. После этого нажатие "Ctrl-Alt-l" должно привести вас к последнему посещенному окну.

Помощь при отладке:

1) используйте Ctrl-Alt-Esc для обновления оконного менеджера, если вы изменили файл. Любые изменения, которые вы делаете, не вступят в силу, пока вы не сделаете это.

2) используйте global.log("vt: windowManger. blah");

для просмотра отладочных сообщений. Сделайте tail -f на ~/.cinnamon/glass.log, чтобы увидеть сообщения:

tail -f glass.log

Примечание: вы должны убить все предыдущие tail -...f сеансов и начинать заново каждый раз, когда вы делаете "Ctrl-Alt-Esc", чтобы обновить оконный менеджер.

2
29.04.2021, 00:25

Теги

Похожие вопросы