[3.1] 나만의 자판 만들기 2
클리키 » 2007년 05월 31일
이번에는 ‘키보드’ 폴더에 들어 있는 *.kdf 파일의 내부를 살펴 보겠습니다. 말씀드린 것처럼 이 파일에 자판의 정보가 모두 들어 있습니다. 그럼 메모장으로 ‘달개비(예측추가)’ 자판의 KrB2PySn.kdf 파일을 열어 내부를 살펴보겠습니다.
첫부분에 다음과 같은 내용이 나옵니다. 찾으셨나요?
Version = 3.0
Width = 510
Height = 179
FontSize = 12
Prediction = true
Language = IL_KOREAN
Description = "한글 두벌식 - 단어예측"
대부분 무슨 의미인지 금방 이해가 가시죠? 이런 식의 값 설정이 낯설다면 자판 파일을 수정하는 것을 재고해 주세요. :) 한가지 명심하실 것은 여기에 정의된 자판의 폭(Width)과 높이(Height), 글꼴크기(FontSize)는 논리적인 값이라는 겁니다. 실제 자판의 크기와 글꼴 크기는 Clickey.cfg 파일에 들어 있습니다. 클리키는 위에 정의된 크기를 가지고 확대/축소해서 클리키 창의 크기에 맞도록 자판을 그리는 것입니다.
‘Prediction’은 단어예측을 사용하는지의 여부이고, ‘Language’는 입력문자를 의미합니다. EnQtPnSn.kdf 파일에는 이 값이 IL_ENGLISH로 되어 있습니다. 한 가지 주의할 것은 단어예측을 사용하려면 ‘Prediction’을 참으로 하고 아울러 예측단어 키도 자판 정의에 넣어야 한다는 점입니다.
그럼 이제 실제 자판 키의 정의를 살펴보겠습니다. 아래 내용은 KrB2PySn.kdf 파일의 97번째 줄에 있습니다.
Key {
code = 27,
type = 0,
pos = {left = 2, top = 34, width = 30, height = 22, },
stroke = "{ESC}",
label = {ncns = "Esc", ncys = "Esc", ycns = "Esc", ycys = "Esc", },
normal = {text = 0, face = RGB(213,234,230), border=RGB(102,102,204), },
press = {text = 0, face = RGB(166,194,226), border=RGB(102,102,204), },
scan = {line = 2, block = 1, },
}
클리키 자판에서 각 키의 정의는 위와 같은 형태이고, 키에 따라 그 안에 들어가는 값만 달라집니다. *.kdf 파일을 보시면 이런 정의가 계속 반복되고 있는 것을 보실 수 있습니다. 그럼, 각 항목의 의미를 설명 드리겠습니다.
- code = 27
윈도우즈의 가상 코드(Virtual code)를 가집니다. 이 값은 윈도우즈에서 지정한 값입니다. 따라서 임의로 지정하시면 안됩니다. 꼭 클리키의 KDF 파일을 참고하시거나, 마이크로소프트의 기술문서를 보시기 바랍니다. - type = 0
키의 종류를 지정합니다. 일반 키보드에 있는 키라면 그냥 영(0)을 주면 됩니다. 3.1에 새로 추가된 ‘복사’나 ‘붙임’ 키 같은 매크로인 경우에는 꼭 TK_MACRO를 지정하셔야 합니다. - pos = {left = 2, top = 34, width = 30, height = 22, }
키의 위치와 크기인데 첫부분에서 설명했던 자판의 폭(Width)과 높이(Height)를 기준으로 한 값이라는 점, 꼭 기억하세요. - stroke = “{ESC}”
‘type’ 이 TK_MACRO 일 때만 의미가 있습니다. 중요한 내용이니 밑에서 자세히 설명하겠습니다. - label = {ncns = “Esc”, ncys = “Esc”, ycns = “Esc”, ycys = “Esc”, }
키에 표시되는 글자입니다. 클리키에서 Esc 키가 ‘Esc’라고 표시되는 것은 이 값 때문입니다.
ncns = CapsLock 꺼짐, Shift가 떼임 상태
ncys = CapsLock 꺼짐, Shift가 눌림 상태
ycns = CapsLock 켜짐, Shift가 떼임 상태
ycys = CapsLock 켜짐, Shift가 눌림 상태 - normal = {text = 0, face = RGB(213, 234, 230), border = RGB(102, 102, 204), }
키가 떼어져 있을 때의 색깔을 지정합니다. text는 글자의 색깔, face는 배경색, border는 경계선의 색깔을 의미합니다. 색깔을 지정할 때는 RGB안에 빨간색, 녹색, 파란색 값을 지정하는데, 0~255 사이의 값이어야 합니다. 그래픽을 조금 다뤄보신 분이라면 금방 이해하실 수 있을 겁니다. text에 ‘0′을 지정한 것은 RGB(0, 0, 0)처럼 할 것을 귀찮아서 그렇게 한 것인데, 권장하지는 않습니다. - press
눌렸을 때의 색깔을 지정합니다. 내용은 normal에서 설명한 것과 같습니다. - scan = {line = 2, block = 1, }
스캔 입력 모드를 위한 것입니다. line은 몇 번째 줄인지, block은 그 줄에서 몇 번째 블럭인지를 의미합니다. 두 값 모두 꼭 1부터 시작해야 합니다. 여기서 line은 클리키 창에서 보이는 줄과는 관계 없습니다. 제비꽃(예측변형) 자판의 스캔 방법을 보시면 이해가 되실 겁니다. 같은 block에서 스캔되는 키의 순서는 따로 지정하지 않고, KDF 파일에 정의된 순서대로 스캔 됩니다.
사실 이런 내용을 손으로 직접 다 고치려면 보통 일이 아닙니다. 몇 개의 키만 고치는 것은 그나마 할만 합니다만. 저는 8개의 파일을 모두 직접 만들었습니다.
어쨌든, 그럼 이제 stroke에 지정하는 값에 대해 살펴 보겠습니다.
stroke는 3.0과 3.1에서 두 가지 용도로 사용하실 수 있습니다. 바로 문장 입력과 단축키(Shortcut Key)니다.
먼저 KDF 파일을 열어 특정 키의 내용을 다음과 같이 고쳐보세요.
type = TK_MACRO,
stroke = "dkssudgktpdy? qksrkqtmqslek.{Enter}",
KDF 파일을 저장한 다음, 클리키에서 해당 키보드를 선택하고 ‘메모장’을 연 다음 한글모드에서 수정한 키를 눌러보세요. 아래 문장이 입력되고 줄이 바뀌면 맞게 수정하신 겁니다.
안녕하세요? 반갑습니다.
짐작하셨겠지만 stroke에 지정된 문장은 위의 문장을 입력할 때 치는 키의 나열입니다. 만약 메모장이 한글모드가 아니고 영문모드이면 어떻게 될까요? stroke에 지정된 문장이 그대로 입력됩니다. 그 이유는 stroke에 지정된 값은 문자가 아니라 키보드의 키를 의미하기 때문입니다. 예를 들어 stroke에 지정된 ‘d’는 영어 알파벳이 아니라 키보드의 ‘d’ 키를 의미하는 것입니다. 이 키는 영문모드에서는 알파벳 ‘d’가 되지만, 한글모드에서는 ‘ㅇ’으로 입력됩니다. 마지막에 있는 {Enter}는 키보드의 ‘Enter’키를 입력하라는 의미입니다.
단축키에 대한 내용은 이어서 올리겠습니다.