도구 환경
구름 입력기 + Karabiner로 Caps Lock 한영 전환을 빠르고 부드럽게 만드는 법
먼저 결과부터
구름 입력기를 쓰면서 한영 전환은 다시 Caps Lock 하나로 하고 싶었다. 최종 설정에서는 Caps Lock을 짧게 눌렀는지 확인한 뒤 전환하지 않고, 누르는 순간 바로 전환하도록 순서를 바꿨다.
1
2
3
4
5
6
Caps Lock을 누르는 순간
→ Control + Space로 즉시 한영 전환
400ms 이상 길게 누르면
→ Control + Space를 한 번 더 보내 입력 상태 복구
→ 실제 Caps Lock 실행
이 방식으로 바꾼 뒤 내 환경에서는 짧게 누른 Caps Lock이 바로 한영 전환으로 동작했고, 이전 설정에서 겪었던 전환 누락도 현재까지 다시 나타나지 않았다.
구름 입력기에서 다시 Caps Lock으로 돌아오기까지
이 설정을 찾게 된 과정은 다음 네 단계였다.
1
2
3
4
5
6
7
8
9
10
11
Discord에서 한글 입력이 간혹 어긋남
→ 구름 입력기 설치
Control + Space 한영 전환이 불편함
→ Karabiner로 Caps Lock 한영 전환 설정
Caps Lock 한영 전환이 간혹 누락됨
→ 다시 Control + Space 사용
Control + Space를 반복해서 누르니 손목이 불편함
→ Caps Lock 설정을 다른 방식으로 다시 만듦
macOS 기본 한글 입력기로 Discord에서 빠르게 타이핑할 때 글자가 간혹 예상과 다르게 조합됐다. 체감은 다음과 비슷했다.
1
2
입력하려던 것: 안녕하세요
실제로 입력된 것: 안ㅕㅇ하세요
다른 앱에서는 크게 체감하지 못했지만 Discord에서는 반복적으로 불편했다. 한영 전환 직후 곧바로 다음 글자를 입력할 때도 전환이 따라오지 않는 경우가 있었다.
해결 방법을 찾다가 macOS용 오픈소스 한글 입력기인 구름 입력기를 설치했다. 공식 저장소에서는 설치 패키지와 Homebrew 설치 방법을 안내한다. 내 환경에서는 구름 입력기로 바꾼 뒤 Discord의 한글 조합 문제와 전환 직후의 입력 누락이 사라졌다.
구름 입력기의 한영 전환에는 Control + Space를 사용했다. 기능은 제대로
동작했지만 자주 누르다 보니 손목이 불편해졌고, Caps Lock 하나로 전환하기 위해
Karabiner-Elements 설정을 인터넷에서 찾아 적용했다.
1
2
3
4
5
Caps Lock을 짧게 누름
→ Control + Space
Caps Lock을 길게 누름
→ 실제 Caps Lock
겉으로 보이는 동작은 단순하지만, 짧게 눌렀을 때의 한영 전환은 Caps Lock을
누르는 순간 발생하지 않았다. Caps Lock에서 손을 뗀 뒤 단독 입력이었는지
판정하고, 그때 Control + Space를 보내는 구조였다.
1
2
3
4
5
Caps Lock을 누름
→ 기다림
→ Caps Lock에서 손을 뗌
→ 단독으로 짧게 누른 입력인지 판정
→ Control + Space
1
2
3
4
5
6
7
8
9
10
"parameters": {
"basic.to_if_alone_timeout_milliseconds": 300,
"basic.to_if_held_down_threshold_milliseconds": 300
},
"to_if_alone": [
{
"key_code": "spacebar",
"modifiers": ["left_control"]
}
]
겉으로는 원하는 동작과 같았지만 실제로 사용해 보니 Caps Lock을 짧게 눌러도 전환되지 않는 경우가 생각보다 자주 있었다. CPU와 메모리 사용량이 높고 발열이 심할 때 더 잦은 것처럼 느껴졌지만, 시스템 부하가 원인인지는 확인하지 못했다. 컴퓨터가 한가할 때도 완전히 사라지지는 않았다.
안정성을 위해 다시 Control + Space를 직접 누르면 전환은 잘 됐지만 손목
불편도 돌아왔다. 그래서 timeout 숫자를 계속 조절하는 대신 입력을 보내는 시점
자체를 바꿨다.
짧게 눌렀는지 기다리지 않고 먼저 전환하기
한영 전환은 실제 Caps Lock보다 훨씬 자주 사용한다. 그렇다면 자주 쓰는 동작을
to_if_alone의 예외 처리로 늦게 보내기보다 Caps Lock의 기본 동작으로 만들 수
있다.
1
2
3
Caps Lock key-down
→ Control + Space
→ 즉시 한영 전환
남는 문제는 Caps Lock 본래 기능이다. 내 입력 소스 구성에서는
Control + Space가 한글과 영어를 토글한다. 한 번 누르면 입력 상태가 바뀌고,
한 번 더 누르면 처음 상태로 돌아온다. 이 성질을 길게 누르기에 이용했다.
1
2
3
4
5
6
7
8
Caps Lock을 누름
→ Control + Space
→ 한영 전환
400ms 이상 계속 누름
→ Control + Space
→ 처음 전환을 되돌림
→ 실제 Caps Lock
결과적으로 짧게 누르면 한영 전환이 한 번 일어나고, 길게 누르면 한영 전환이 두 번 일어나 원래 상태로 돌아온 뒤 Caps Lock만 실행된다.
이 원리는 Control + Space를 두 번 눌렀을 때 원래 입력 상태로 돌아오는
환경에서만 성립한다. 입력 소스가 여러 개이거나 macOS 단축키를 다르게
설정했다면 JSON을 적용하기 전에 Control + Space를 수동으로 두 번 눌러
원래 상태로 돌아오는지 먼저 확인해야 한다.
그대로 적용할 Karabiner 설정
아래 내용을 gureum-caps-lock.json 같은 이름으로 저장한다. Karabiner 공식
문서가 안내하는 사용자 정의 complex modification 위치는
~/.config/karabiner/assets/complex_modifications/다. 저장한 뒤
Karabiner-Elements의 Complex Modifications에서 규칙을 추가하고 활성화한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{
"title": "Gureum Caps Lock Korean-English toggle",
"rules": [
{
"description": "Caps Lock press: Ctrl+Space, hold: Ctrl+Space again + real Caps Lock",
"manipulators": [
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"optional": ["any"]
}
},
"parameters": {
"basic.to_if_held_down_threshold_milliseconds": 400
},
"to": [
{
"key_code": "spacebar",
"modifiers": ["left_control"],
"repeat": false
}
],
"to_if_held_down": [
{
"key_code": "spacebar",
"modifiers": ["left_control"],
"repeat": false
},
{
"key_code": "caps_lock",
"hold_down_milliseconds": 500
},
{
"key_code": "vk_none"
}
]
}
]
}
]
}
각 부분의 역할은 간단하다.
to는 Caps Lock key-down에 곧바로Control + Space를 보낸다.basic.to_if_held_down_threshold_milliseconds: 400은 400ms 이상 누른 입력을 hold로 판정한다.to_if_held_down은 hold가 됐을 때Control + Space를 한 번 더 보내고 실제 Caps Lock을 실행한다.hold_down_milliseconds: 500은 가상 Caps Lock의 key-down과 key-up 사이를 500ms로 만든다.vk_none은 하드웨어 Caps Lock의 key-up 이벤트가 이 가상 입력을 끊지 않게 한다. Karabiner 공식 문서도 Caps Lock과hold_down_milliseconds를 함께 쓰는 예제에서vk_none을 사용한다.repeat: false는 키를 계속 누르는 동안Control + Space가 반복 입력되는 것을 막는다.
Karabiner의
to_if_held_down 문서와
hold_down_milliseconds 문서에서
각 필드의 현재 의미를 확인할 수 있다.
400ms와 500ms는 서로 다른 값이다
설정에 들어간 두 시간은 역할이 다르다.
1
2
3
4
5
400ms
= 길게 눌렀다고 판단하는 기준
500ms
= hold로 판정된 뒤 실제 Caps Lock 입력을 유지하는 시간
Caps Lock이 의도보다 쉽게 켜진다면 hold 판정 기준인 400ms를 450~500ms로 늘린다. 반대로 Caps Lock을 쓰기 위해 너무 오래 눌러야 한다면 300~350ms로 줄여 볼 수 있다. 500ms는 tap/hold 감도를 정하는 값이 아니므로 두 값을 같이 바꿀 필요는 없다.
조정할 때는 문장을 빠르게 입력하면서 Caps Lock을 짧게 누르는 경우와, 실제 Caps Lock을 켜기 위해 길게 누르는 경우를 따로 시험하는 편이 좋다.
내 환경에서 확인한 결과와 한계
내가 이 설정을 사용한 환경은 다음과 같다.
1
2
3
macOS: Tahoe 26.5.2
Karabiner-Elements: 16.1.0
입력기: 구름 입력기
현재는 Caps Lock을 짧게 누르면 바로 한영 전환이 되고, 길게 누르면 입력
상태가 원래대로 돌아온 뒤 Caps Lock이 동작한다. 기존 to_if_alone 방식에서
경험했던 전환 누락도 현재까지 나타나지 않았다. 구름 입력기로 바꾼 뒤 얻은
Discord 한글 입력의 안정성도 내 환경에서는 유지되고 있다.
다만 세 가지는 분리해서 봐야 한다.
- Discord의 한글 조합 문제가 정확히 어디에서 생겼는지는 확인하지 않았다.
- 높은 시스템 부하가 기존 Karabiner 설정의 전환 누락 원인인지도 확인하지 않았다.
- 현재까지 재발하지 않았다는 결과는 장기 무오류나 다른 버전에서의 동일한 동작을 보장하지 않는다.
이 설정에서 재사용할 만한 핵심은 timeout 값을 하나 찾은 것이 아니다. 실제로 자주 쓰는 동작이 한영 전환이라면 “짧게 눌렀는지 확인한 뒤 전환”하기보다 “먼저 전환하고, 길게 눌렀을 때만 되돌린다”는 쪽으로 이벤트 순서를 바꾼 것이다. Caps Lock 본래 기능보다 한영 전환을 훨씬 자주 쓰는 내 사용 방식에는 이 순서가 더 잘 맞았다.