키 보내기 문법#
단축키로 시작하기#
키 보내기에서 ^c를 붙여 넣으면 Windows에서 Ctrl+C를, #c를 붙여 넣으면 Mac에서 Command+C를 보냅니다. 기록을 클릭하고 조합을 누른 뒤 완료를 클릭할 수도 있습니다. Lua도 ms.keys(sequence)를 통해 같은 문법을 사용합니다.
문자는 보통 US 키보드 위치의 키를 의미합니다. abc는 A, B, C를 순서대로 누르고, 대문자 ABC는 Shift를 추가하지 않습니다. Shift+A에는 +a를 사용하세요. 유니코드나 고정 텍스트는 텍스트와 이스케이프와 클립보드 레시피를 참조하세요.
수식 키와 그룹#
| 접두사 | Windows | Mac |
|---|---|---|
^ | Ctrl | Control ⌃ |
% | Alt | Option ⌥ |
+ | Shift | Shift ⇧ |
# | Win | Command ⌘ |
접두사는 다음 키나 괄호로 묶은 그룹에 적용됩니다. ^+t는 Ctrl+Shift+T를 보냅니다. ^(ac)는 A와 C 둘 다에 Ctrl을 적용합니다. ^ac는 A에만 Ctrl을 적용합니다. 그룹은 중첩할 수 있으며, 균형 잡힌 괄호를 사용하세요. 그룹 수식 키는 각 키 동작에 붙으므로, 키 사이에서 수식 키가 계속 눌려 있다고 가정하지 마세요. 끝에 놓인 수식 키 하나만으로는 키 입력이 아닙니다. 수식 키 자체가 필요하면 예를 들어 {CTRL}을 사용하세요.
Lua ms.is_keys_pressed는 두 플랫폼에서 조회 시점의 모든 키와 수식 키의 합집합을 검사합니다. ^ac는 Control, A, C가 함께 눌려 있어야 합니다. 어느 쪽이든 접두사를 만족하며, 명시적 {LCTRL} / {RCTRL} 이름은 해당 쪽을 유지합니다. 반복은 무시되고, 대기·텍스트·마우스·휠 단계는 false를 반환합니다. 과거에 눌린 순서는 인식하지 않습니다.
이름 있는 키, 반복과 지연#
Enter에는 {ENTER}를 사용하세요. 이름은 대소문자를 구분하지 않습니다. {LEFT 3}은 Left를 세 번 누릅니다. 양의 횟수는 키를 반복하고, 0이나 음수는 한 번으로 처리됩니다. {SLEEP 100}은 100 ms를 기다리며, 음수가 아닌 정수가 필요합니다. 이름과 인수는 공백으로 구분하세요.
예: ^c{SLEEP 100}^v는 Windows에서 복사하고 잠시 기다린 다음 붙여넣습니다. Mac에 해당하는 것은 #c{SLEEP 100}#v입니다.
아래 표는 별칭과 번호 붙은 F/숫자 키패드 이름을 포함해 파서가 받아들이는 이름을 모두 나열합니다. ASCII 문자, 숫자 또는 지원되는 US 구두점 문자 하나도 {a}나 {+}처럼 중괄호 안에 올 수 있습니다.
| 이름 | 의미 |
|---|---|
{ENTER}, {RETURN} | Enter |
{ESC} | Escape |
{TAB} | Tab |
{BACKSPACE} | Backspace |
{SPACE} | Space |
{CAPSLOCK} | Caps Lock |
{INSERT}, {INS} | Insert(Windows 전용) |
{DELETE}, {DEL} | Delete / forward delete |
{HOME}, {END} | Home / End |
{PGUP}, {PGDN} | Page Up / Page Down |
{UP}, {DOWN}, {LEFT}, {RIGHT} | 방향키 |
{PRTSC} | Print Screen(Windows 전용) |
{BREAK} | Break(Windows 전용) |
{MEDIA_NEXT}, {MEDIA_PREV}, {MEDIA_STOP}, {MEDIA_PLAY}, {MEDIA_PLAY_PAUSE} | 미디어 키(키 시퀀스에서는 Windows 전용) |
{VOLUME_MUTE}, {VOLUME_DOWN}, {VOLUME_UP} | 볼륨 키(키 시퀀스에서는 Windows 전용) |
{CTRL}, {ALT}, {SHIFT} | Control / Alt(Mac Option) / Shift |
{LCTRL}, {RCTRL}, {LSHIFT}, {RSHIFT}, {LALT}, {RALT} | 왼쪽/오른쪽 수식 키. Alt는 Mac에서 Option |
{LWIN}, {WIN}, {RWIN} | Windows 키. Mac에서는 Command |
{F1}, {F2}, {F3}, {F4}, {F5}, {F6}, {F7}, {F8}, {F9}, {F10}, {F11}, {F12}, {F13}, {F14}, {F15}, {F16}, {F17}, {F18}, {F19}, {F20}, {F21}, {F22}, {F23}, {F24} | 기능 키. Mac은 F1–F20 지원 |
{N0}, {N1}, {N2}, {N3}, {N4}, {N5}, {N6}, {N7}, {N8}, {N9} | 숫자 키패드 0–9 |
{MOUSE_LEFT}, {MOUSE_RIGHT}, {MOUSE_MIDDLE}, {MOUSE_X1}, {MOUSE_X2} | 마우스 클릭(Windows 전용) |
{MOUSE_WHEEL}, {MOUSE_HWHEEL} | 휠: 예 {MOUSE_WHEEL 120}, {MOUSE_HWHEEL -120}(Windows 전용) |
{SLEEP} | 지연: 예 {SLEEP 100}, 밀리초 |
마우스 버튼과 휠#
Windows는 {MOUSE_LEFT}, {MOUSE_RIGHT}, {MOUSE_MIDDLE}, {MOUSE_X1}, {MOUSE_X2}를 클릭으로 지원합니다. {MOUSE_LEFT 2}는 두 번 클릭을 보내며, 포인터를 옮기지는 않습니다.
{MOUSE_WHEEL 120}은 한 노치 위로 스크롤하고, -120은 아래로 스크롤합니다. {MOUSE_HWHEEL 120}은 오른쪽으로, -120은 왼쪽으로 스크롤합니다. 인수는 반복 횟수가 아니라 부호 있는 휠 델타입니다. 이것은 주입 입력의 관례이며, 기록된 제스처 휠 단계의 부호와 다릅니다.
Mac은 이 토큰을 파싱하지만 입력 실행 중 마우스와 휠 동작은 건너뜁니다. ms.keys로 Mac 클릭이나 스크롤을 합성하는 데 사용할 수 없습니다.
텍스트와 이스케이프#
텍스트 우선 모드는 Lua ms.keys(s, true)로만 사용할 수 있으며, 키 보내기 편집기는 항상 키 모드를 사용합니다. 일반 문자는 유니코드 텍스트가 되지만, ^, %, +, #, 괄호와 여는 중괄호는 여전히 문법을 시작합니다. 중괄호로 묶은 문자 하나는 텍스트 우선 모드에서도 키 동작으로 남습니다.
텍스트 우선 모드 안에서 단축키를 쓰려면 키를 중괄호로 묶으세요. ^{c}는 Ctrl+C를, #{c}는 Command+C를 보냅니다. 이 모드에서 중괄호 없는 ^c는 텍스트 c를 내보내고 수식 키는 버립니다. 일반 키 모드로 별도의 ms.keys("^c") 호출을 만들 수도 있습니다.
| 문자 그대로 | 시퀀스 표기 |
|---|---|
^ | {^} |
% | {%} |
+ | {+} |
# | {#} |
( | {(} |
) | {)} |
{ | {{} |
} | }(중괄호 없이) |
백슬래시는 키 시퀀스의 이스케이프가 아닙니다. 따옴표로 묶은 Lua 문자열에서는 백슬래시 하나를 "\\"로 쓰거나 긴 괄호 문자열을 사용하세요. 문법 기호가 포함된 임의 텍스트에는 클립보드 방식이 두 겹의 이스케이프를 모두 피합니다.
자주 쓰는 단축키#
대상 애플리케이션과 운영 체제의 단축키 설정에 따라 달라집니다.
| 목적 | Windows 시퀀스 | Mac 시퀀스 |
|---|---|---|
| 복사 | ^c | #c |
| 붙여넣기 | ^v | #v |
| 잘라내기 | ^x | #x |
| 모두 선택 | ^a | #a |
| 실행 취소 | ^z | #z |
| 새 탭 | ^t | #t |
| 탭 닫기 | ^w | #w |
| 닫은 탭 다시 열기 | ^+t | #+t |
| 다음 탭 | ^{TAB} | ^{TAB} |
| 이전 탭 | ^+{TAB} | ^+{TAB} |
| 앱 전환 | %{TAB} | #{TAB} |
| 이전/다음 데스크톱 | #^{LEFT} / #^{RIGHT} | ^{LEFT} / ^{RIGHT} |
| 화면 영역 캡처 | #+s | #+4 |
| 바탕 화면 표시 | #d | {F11} |
| 작업 관리자 / Activity Monitor | ^+{ESC} | 앱 열기 사용: com.apple.ActivityMonitor |
| 화면 잠금 | #l | ^#q |
Ctrl+Alt+Del을 보낼 수 없는 이유#
Ctrl+Alt+Del은 Windows의 보안 주의 시퀀스(Secure Attention Sequence)입니다. Windows는 이 시퀀스에 대해 일반적인 합성 입력을 무시하므로 ^%{DEL}로 그 보안 화면을 열 수 없습니다. 작업 관리자에는 ^+{ESC}를, 잠금에는 #l을 사용하거나, 로그아웃(세션 종료)하려면 shutdown /l을 담은 명령 실행 동작을 사용하세요.
제한과 플랫폼 참고 사항#
공유 파서에는 전체 문자열 길이나 반복 횟수 상한이 없습니다. 반복 횟수와 지연은 부호 없는 32비트 값으로, 휠 델타는 부호 있는 32비트 값으로 저장됩니다. 범위를 벗어난 값은 변환 시 순환할 수 있으므로 작고 실용적인 횟수와 지연을 사용하세요. 잘못된 키 이름이나 필수 인수 누락은 파싱 오류를 내며, 편집기는 입력하는 동안 검증합니다.
Windows는 워커 스레드에서 시퀀스를 실행하고 {SLEEP ms} 동안 잠듭니다. Mac은 타이머 기반 배치로 입력을 보냅니다. Mac에서 16,384바이트보다 긴 동작 문자열은 거부되며, 이미 파싱된 Lua 입력의 한도는 동작 16,384개와 텍스트 동작당 16,384바이트입니다. 대기 큐는 최대 64개 항목을 담고, 초과 입력은 버려지고 기록됩니다.
Mac에서는 F1–F20, 숫자 키패드와 매핑된 탐색 키를 사용할 수 있습니다. Insert/INS, PRTSC, BREAK, F21–F24, 미디어/볼륨 토큰, 마우스/휠 토큰은 지원되지 않으며 건너뜁니다. 미디어와 볼륨에는 미디어와 시스템을 사용하세요. ms.keys_down과 ms.keys_up은 Windows 전용입니다. Lua API를 참조하세요.