연구(?) 계기

맥은 기본적으로 caps lock 버튼을 짧게 눌러 한영을 하고, caps lock 버튼을 길게 눌러 캡스락이 됩니다.
저는 이 기능을 구현하고 싶었습니다.

맥이 기본으로 제공한다면서, 왜 karabiner로?
맥을 사용해보신 분들은 모두 공감하실겁니다.
한영이 원할 때 안되요…ㅠㅠ

목표

캡스락을 누를 때 한영 전환을 합니다.

캡스락을 일정 시간 이상 누르면 다시 원래 언어로 전환한 후에 캡스락을 켭니다.

실패

일단 목표는 달성하지 못했습니다.
카라비너의 한계 때문입니다.
카라비너는 카라비너에서 변환된 버튼도 카라비너가 적용됩니다.

만약에 캡스락을 누르면 A가 입력되게 해두었다고 합시다.
그런데 캡스락이 필요하다고 가정합시다.
그러면 대소문자 전환을 caps lock 버튼으로 못하니까 다른 버튼에 캡스락을 넣겠죠.
만약 버튼에 캡스락을 넣었다고 합시다.
그러면 버튼으로 대소문자 전환을.. 할 수 없습니다

왜냐하면 커맨드를 누르면 A가 입력되기 때문이죠.
커맨드를 누르면 그 버튼은 캡스락으로 바뀌고, 캡스락은 A로 바꿨기 때문에 A가 됩니다.
카라비너를 통해 한번 변환된게 또 변환되요.

그러므로 제가 아는 선에서는 다음 방법이 안됩니다.
캡스락을 짧게 눌러 f19가 입력되게 하고, f19로 영어/한글을 전환합니다.
캡스락을 길게 눌러… 캡스락을 할 방법이 없습니다.
캡스락을 길게 눌러 캡스락이 되도록 하면, 캡스락이 입력되면서 한영이 전환되기 때문이죠
결국 캡스락을 누를 때 한영이 되는 것은 포기했습니다.

대신 to_if_alone을 이용해서 뗄때 한영이 전환되도록 하고, 캡스락을 길게 눌러 캡스락이 실행된 경우 f19로의 변환이 되지 않도록 하였습니다.

결과

캡스락을 뗄 때 한영이 전환됩니다.
캡스락을 길게 눌러 캡스락이 됩니다.
이 때 캡스락을 떼기 전에 다른 키를 누르면 한영 전환이 이루어지지 않습니다.ㅠㅠ

적용하는 방법

xml 파일 생성

{
  "title": "capslock hanguel + capslock",
  "rules": [
    {
      "description": "한영 버튼을 컨트롤+space로 변경. 200ms보다 짧게 눌러 한영. 200ms보다 길게 눌러 캡스락",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "caps_lock"
          },
          "parameters": {
            "basic.to_if_alone_timeout_milliseconds": 200,
            "basic.to_if_held_down_threshold_milliseconds": 200
          },
          "to_if_alone": [
            {
              "key_code": "spacebar",
              "modifiers": [
                "left_control"
              ]
            }
          ],
          "to_if_held_down": [
            {
              "key_code": "caps_lock"
            }
          ]
        }
      ]
    },
    {
      "description": "한영 버튼을 f19로 변경. 200ms보다 짧게 눌러 한영. 200ms보다 길게 눌러 캡스락",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "caps_lock"
          },
          "parameters": {
            "basic.to_if_alone_timeout_milliseconds": 200,
            "basic.to_if_held_down_threshold_milliseconds": 200
          },
          "to_if_alone": [
            {
              "key_code": "f19"
            }
          ],
          "to_if_held_down": [
            {
              "key_code": "caps_lock"
            }
          ]
        }
      ]
    }
  ]
}

위 코드는 xml 코드입니다.
메모장이나 아무 텍스트 편집기로 위 코드를 붙여넣고 ~.xml로 저장합니다.

xml 파일을 카라비너 설정에 복사

Finder를 열고, ++G를 누릅니다.
여기에서 다음을 입력하여 폴더로 이동합니다.
~/.config/karabiner/assets/complex_modifications
해당 폴더에 위에서 생성한 xml 파일을 넣습니다.

karabine-element를 실행하여 설정합니다.

카라비너의 설정으로 진입합니다.
Complex Modifications에서 Add rule 버튼을 클릭합니다.
이 창에서 가장 아래로 스크롤 해보면 ‘한영 버튼을 f19로 변경. 200ms보다 짧게 눌러 한영. 200ms보다 길게 눌러 캡스락’라는 이름의 규칙이 보이는데 enable을 눌러줍니다.
컨트롤 스페이스는 아이패드를 위해 넣어두었는데, 아쉽게도 정상 작동하지는 않더군요.
추후 ios 업데이트가 되면 추가적으로 작업해보도록 하겠습니다

맥os 시스템 설정을 합니다.

현재 Karabiner를 통해 capslock을 F19로 변경하였으나, F19는 언어 전환키가 아니기 때문에 전환되지 않습니다.
캡스락을 길게 누르면 캡스락이 입력되므로 캡스락을 길게 눌러 언어를 전환하실 수 있습니다.

맥 설정에서 해야하는 것은 두가지입니다.
F19(캡스락 짧게 누름)로 언어를 전환하고,
캡스락(캡스락 길게 누름)으로는 언어가 전환되지 않게 해야 합니다.

언어 전환 단축키 설정

벤추라를 기준으로 설명 드립니다
‘키보드 -> 키보드 단축키 버튼 -> 입력 소스 -> 이전 입력 소스 선택’의 오른쪽 버튼 부분을 더블클릭하고
caps lock을 짧게 눌러줍니다.
그러면 아래 이미지처럼 F19가 입력되면서 F19가 언어 전환키로 설정되신 것을 확인하실 수 있습니다.
언어-전환-단축키

caps lock으로 언어 전환(한영)되지 않게 하기

앞서 caps lock을 짧게 눌러 언어가 전환되게 설정하였습니다.
하지만 caps lock을 길게 누르면 karabiner가 caps lock 짧게 누른것을 입력해주기 때문에 대소문자가 전환되는것이 아니라 한영을 전환해줍니다.
캡스락으로 한영이 전환되지 않게 해줌으로써 caps lock을 길게 눌러서 한영이 전환되지 않게 해야합니다.
‘시스템 설정 – 키보드 -> 텍스트 입력 상자 -> 편집’을 누르면 입력기 관련 설정 화면이 표시됩니다.

여기서 네모 표시 해둔 항목을 끄면 완성입니다.
캡스락 언어전환 끄기

감사합니다.

저는 제가 처음에 생각했던 목표에 달성하지 못했습니다.
혹시 달성할 방법을 알고 계시다면 도와주세요.ㅎㅎ

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다


Ads Blocker Image Powered by Code Help Pro

광고 차단 감지됨!

닫기를 누르면 이용하실 수 있지만, 광고 차단은 해제해주시면 좋겠습니다.
Powered By
100% Free SEO Tools - Tool Kits PRO