민트 17.2에 "마지막" 작업공간으로 전환하는 키 바인딩이 있나요?

민트 17.2에 "마지막" 작업공간으로 전환하는 키 바인딩이 있나요?

민트 컬러 17.2, 시나몬 컬러.

dconf 편집기를 사용하여 작업 공간 간을 전환하는 단축키를 설정했습니다. 내 작업공간 키 바인딩의 관련 부분은 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

내가 원하는 것은 내가 마지막에 있었던 작업 공간으로 다시 전환하는 키 바인딩입니다. 이 기능은 다음과 같이 Windows 데스크톱 관리자 "dexpot"에서 사용할 수 있습니다.

여기에 이미지 설명을 입력하세요.

따라서 Windows에서는 "Ctrl-Alt-L"을 입력하면 마지막으로 있었던 작업 공간으로 이동합니다. 반복적으로 클릭하면 두 개의 활성 작업 공간 간에 전환됩니다.

이 질문이 이전에 제기된 적이 있다는 것을 알고 있습니다. 몇 년 전에 한 번 알게 되었기 때문입니다(대답은 "아니요, 할 수 없습니다"였습니다). 하지만 안타깝게도 Google에서 이 문제를 다룬 내용을 찾을 수 없었으므로 사과드립니다. 이 질문에 이미 답변한 경우 진행하시기 바랍니다. 나는 또한 이것이 gnome이 아닌 창 관리자(예: 계피)의 기능이라는 것을 알고 있습니다.

이 기능이 정말 그리워서 지금 이 작업을 수행할 수 있는 방법이 있었으면 좋겠습니다. 특히 최근에 Windows와 Linux 간에 컨텍스트 전환을 많이 했기 때문에 더욱 그렇습니다.

매우 감사합니다!

답변1

아무도 아무것도 알아내지 못했기 때문에(사실 나 자신도 아무것도 찾지 못했습니다), 이 질문에 대한 대답은 "아니요, 할 수 없습니다"라고 생각합니다. 그래서 하나 열어봤는데Cinnamon github 관련 문제이것을 기능으로 요청하세요.

거기에서도 반응이 없어서 직접 구현해볼까 생각중입니다. Cinnamon 코드베이스를 확인할 때 백엔드 "엔진"은 c로 작성된 것처럼 보이지만(수정하기 더 어려움) 많은 프런트엔드 UI 항목이 JavaScript로 처리됩니다(수정하기 더 쉬움). 따라서 Cinnamon 자체에 통합된 실제 수정 사항을 만들지는 않더라도 최소한 시스템을 패치할 수 있도록 뭔가를 함께 구성할 합리적인 기회가 있을 것입니다.

해결책을 찾으면 여기에 결과를 게시하겠습니다.

업데이트: 코드 해킹을 했습니다. 공식적인 해결방법은 아니지만 참고하시면앞서 언급한 티켓, 세부정보를 확인할 수 있습니다. 또한 여기에 내 기사를 복사하고 있습니다.

해결책

한정

좋습니다. 테스트 이미지를 설정하고 코드를 살펴보고 조사한 후 이 문제에 대한 해결책을 찾았습니다. 참고: 이는 현재 해결 방법일 뿐이며 일부 파일을 수동으로 편집해야 합니다. 이 문제를 "공식" 수정 사항으로 제출하려면 다음을 수행해야 합니다.

  1. 최소한 dconf-editor에서 볼 수 있도록 새로운 키워드 "switch-to-workspace-last"에 대한 지원을 추가합니다(제어판의 키보드->단축키 GUI에 없는 경우).
  2. 단위 테스트를 작성합니다(단, 내가 만지는 파일에 대한 /tests 아래에는 uts(?)가 표시되지 않습니다).
  3. cinnamon 패키지를 생성하는 .deb의 실제 빌드를 처리합니다(또는 수정 사항을 제출할 필요가 없습니까?).

  4. 내가 하고 있는 일이 "좋은" 일인지에 대해 더 많은 피드백을 받으세요.

지금은 해결 방법을 고수하겠습니다. 실제로 해결 방법이 있어서 기쁩니다. 단 몇 줄의 코드만으로 구현할 수 있습니다. 이를 통해 즉시 사용을 시작할 수 있었습니다(이런 것이 있으면 정말 좋습니다).

어쨌든, 또 다른 댓글에서 어떤 파일이 중요한지, 어떻게 알아냈는지, 정확히 언제 수정 사항을 프로덕션 이미지에 적용했는지에 대한 배경 지식을 갖춘 자세한 게시물을 작성할 것입니다.

Cinnamon 17.2(2.6.13+rafaela)에서 "마지막 작업 공간 액세스"에 대한 단축키 지원을 추가하는 방법.

개요:

우리는 거의 사용되지 않는 키 바인딩(나는 "작업 공간 왼쪽으로 이동"을 사용함)을 선택하고 "마지막 작업 공간으로 이동"을 구현하는 기능을 탈취할 것입니다. 여기에는 "/usr/share/cinnamon/js/ui/windowManger.js"에 몇 줄을 추가하는 작업이 포함됩니다. 새로운 상태 변수 "global.screen.penultimate_workspace"를 "전역" js 변수에 추가한 다음 "global.screen.get_workspace_by_index(new_index)" 함수를 사용하여 "마지막" 작업 공간을 활성화하고 "활성화"를 호출해야 합니다. 그것으로 전환합니다.

유사한 작업을 수행하는 기존 파일의 좋은 예는 '/usr/share/cinnamon/applet/에 있는 작업 공간 전환기 애플릿입니다.[이메일 보호됨]/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-" 키를 통해 수동으로 작업공간으로 전환할 때마다 Penalty_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"를 입력하여 시나몬 창 관리자를 새로 고칩니다. 모든 창과 편집 세션이 여전히 활성화되어 있다는 점을 제외하면 로그아웃 및 로그인과 비슷합니다.

참고: 때때로 이 작업을 수행한 후 터미널이 중단될 수 있습니다. 이런 일이 발생하면 이미지를 재부팅하면 됩니다.

그게 다야. 이 작업을 수행한 후 "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 세션을 모두 종료하고 다시 시작해야 합니다.

관련 정보