[온라인 한글 입력기] 윗글쇠를 쓰는 모아치기 글쇠 조합
앞에 올린 글 「웹에서 맛보는 모아치기 세벌식 자판 (온라인 한글 입력기)」(https://pat.im/1109)에서 온라인 한글 입력기(http://ohi.pat.im)로 구현한 모아치기 자판의 입력 유형을 설명한 적이 있다. 그 글에서는 일반 글쇠를 쓰는 모아치기 자판의 입력 유형을 이야기하였고, 윗글쇠를 쓰는 모아치기는 헤아리지 않았다.
윗글쇠(시프트, Shift)는 어떤 글쇠판이든 모아치기에 기본으로 쓰일 수 있는 글쇠들과 조금 떨어진 자리에 있다. 윗글쇠를 치는 손으로는 다른 일반 글쇠를 함께 누르기 어려우므로, 일반 글쇠를 쓰듯이 윗글쇠를 모아치기에 쓰기는 쉽지 않다. 그래서 그런지 모아치기 자판들에서도 윗글쇠를 쓰는 때는 일반 글쇠판에서 쓰이는 입력 방법을 따르고 있다. 흔히 쓰이는 윗글쇠를 통한 윗글 자리 입력 방법에는 이런 특징들이 있다.
- 윗글쇠를 먼저 누른 채로 일반 글쇠를 누르면 윗글 자리 문자가 들어감
(일반 글쇠보다 윗글쇠를 먼저 눌러야 윗글 자리 문자를 넣을 수 있음) - 일반 글쇠를 누르는 순간에 문자가 들어감
- 윗글쇠를 떼지 않은 채로 일반 글쇠들을 여러 개 누르면 모두 윗글 자리 문자가 들어감
(문자들이 들어가는 차례는 일반 글쇠를 누른 차례에 달려 있고, 일반 글쇠들이 잠시 함께 눌려 있는 것은 관계 없음) - 일반 글쇠을 떼지 않고 오래 누르고 있으면 같은 문자가 짧은 시간 간격으로 거듭하여 들어감
(일반 글쇠 여러 개를 함께 누르고 있으면 마지막으로 누른 일반 글쇠의 윗글 자리 문자가 거듭하여 들어감) - 윗글쇠를 누른 시간에 따라 문자 입력 결과가 달라지지 않음
- 특수 기능을 부르지 않고 문자만 넣을 때에는 왼쪽과 오른쪽에 있는 두 윗글쇠가 기능이 똑같음
이런 입력 방법을 그대로 따른다면, 윗글쇠를 함께 써서 늘릴 수 있는 글쇠 자리 수는 일반 글쇠 수와 같다. 이는 이어치기 방식을 쓸 때에는 어쩔 수 없는 일이지만, 모아치기 자판을 쓰는 관점에서는 아쉽게 보일 수 있다. 윗글쇠를 쓸 때에도 모아치기를 할 수 있다면, 글쇠 자리가 몇 갑절 늘어나는 효과를 낼 수 있기 때문이다. 그래서 모아치기 자판을 쓸 때에도 윗글쇠를 모아치기에 활용할 수 있도록 이런 규칙을 세워 보았다.
- 윗글쇠를 가장 먼저 누름
(이어치기 방식을 쓸 때와 같음) - 윗글쇠를 누르고 있는 동안에 일반 글쇠를 여러 개 누를 수 있음
- 일반 글쇠들을 누른 차례는 따지지 않음
- 윗글쇠를 누른 채로 일반 글쇠를 모두 떼지 않은 동안에는 일반 글쇠를 더 조합할 수 있음
- 윗글쇠를 떼거나 일반 글쇠를 모두 뗀 때에 문자가 들어감
- 윗글쇠만 누른 것은 입력에 반영하지 않음
(별다른 뜻 없이 윗글쇠를 오래 누르거나 더 누른 것 때문에 바로 앞에 줄여넣기로 넣은 글을 뒷걸음쇠로 한꺼번에 지우는 기능을 쓰지 못하는 일을 막음)
이어치기 방식으로 쓸 때와 가장 다른 것은 일반 글쇠를 누를 때에 문자가 바로 들어가지 않는다는 점이다. 모아치기를 할 때에는 윗글쇠를 떼거나 일반 글쇠를 모두 떼었을 때에 비로소 문자가 들어가므로, 누른 글쇠들을 빨리 떼지 못하면 이어치기 자판을 쓸 때보다 글을 넣는 속도가 느린 느낌이 들 수도 있다.
윗글쇠를 쓰지 않는 모아치기를 구현할 때와 마찬가지로, 윗글쇠를 쓰는 모아치기 글쇠 조합도 일거리 다루개(event handler)에서 거의 같은 과정을 거쳐 처리된다. onkeypress 함수에서 윗글 자리 일반 글쇠값을 모으고, 마지막으로 눌린 일반 글쇠가 일정 시간 이상 눌리면 그 자리의 기본 배열 윗글 자리 문자가 거듭하여 들어간다. 다만 윗글쇠가 눌리고 뗀 때를 가리는 작업 등이 onkeyup 등에 더해져 들어간다. 윗글쇠는 뜻하지 않게 오래 누르거나 더 누르기 쉬운 글쇠이므로, 윗글쇠만 누른 것은 입력 처리에 영향을 미치지 않게 했다.
이 원리를 시험 삼아 세모이 자판의 기호 확장 기능에 적용해 보았다. 2017년판 세모이 자판에서는 쿼티 배열 기준으로 윗글쇠를 누른 채로 'jk' 또는 'jl' 또는 'j;'을 차례로 쳐서 기호 확장 배열을 쓰는 상태로 들어간다. 그 동안 쓰이는 입력 규칙으로는 '윗글쇠+j'와 '윗글쇠+j+k'를 따로 쓸 수 없었는데, 위의 모아치기 규칙을 쓰면 '윗글쇠+j'와 '윗글쇠+j+k'를 따로 다르게 쓸 수 있다. '윗글쇠+j+k' 같은 모아치기 꼴로 기호 확장 배열을 쓰는 상태로 들어가게 하면, '윗글쇠+j'를 다른 목적으로 쓸 수 있다.
일단 온라인 한글 입력기(http://ohi.pat.im)에서는 '여러 글쇠를 누르는 줄여넣기'로 윗글쇠를 쓰는 모아치기를 구현하였다. 세모이 자판의 기호 확장 배열로 들어가는 글쇠 조합은 이렇게 지정하였다.
K3_Semoe_2017_multikey_abbreviation_table = [
{keys: ['J','K'], chars: [-1]}, /* 기호 확장 상태 ① */
{keys: ['J','L'], chars: [-2]}, /* 기호 확장 상태 ② */
{keys: ['J',':'], chars: [-3]}, /* 기호 확장 상태 ③ */
];
한글을 넣는 글쇠-줄임말 조합은 다음과 같은 꼴로 지정할 수 있다.주1
{keys: ['K','L'], chars: [0x1100, 0x1173, 0x1105, 0x1165, 0x11C2, 0x110C, 0x1175, 0x1106, 0x1161, 0x11AB]}, /* 그렇지만 */
(이 움직그림의 '그렇지만'을 넣는 것은 세모이 자판에 반영되었거나 반영될 예정인 조합이 아니고, 윗글쇠를 쓰는 줄여넣기 조합을 설명하려고 글쓴이가 임의로 예로 든 것임)
위와 같이 지정하고 윗글쇠를 누른 채로 k 자리 글쇠와 l 자리 글쇠를 모아치면 '그렇지만'이 바로 들어간다. '그렇지만'이 들어가는 때는 윗글쇠를 뗀 때 또는 일반 글쇠를 모두 뗀 때이다. "keys: ['K','L','P']"처럼 모아치기로 조합하는 글쇠 수를 더 늘릴 수도 있다. "keys: ['K']" 처럼 한 글쇠만 지정하면 '윗글쇠+k' 자리의 기본 배열을 바꿀 수 있다.
모아치기에 윗글쇠까지 쓸 수 있으면, 이론상으로 쓸 수 있는 모아치기 글쇠 조합의 수가 많이 늘어난다. 특수 기능이나 옛한글 낱자 같은 확장 요소를 더 담아서 모아치기 자판을 쓰는 묘미를 더 살릴 수 있을 것이다. 하지만 윗글쇠를 먼저 눌러야 하는 제약 때문에 누르는 글쇠 수가 많을수록 일반 글쇠만 누를 때보다 오타가 나기 쉽고, 아직 살피지 못한 오타 유형이 있을 수 있다. 4째·5째 손가락은 자주 함께 쓰기 힘들므로, 정확하게 치기 좋은 글쇠 조합이 어쩌면 생각보다 적을 수 있다.
덧글을 달아 주세요
신세기 2018/04/25 18:49 고유주소 고치기 답하기
이렇게 좋은 방법을 구현해주셔서 감사드립니다!
사실 새로운 종류의 약어를 연구하고 있었는데 방법을 어떻게 해야할 지 고민하고 있던 참이었습니다.
그런데 팥알 님께서 소개해주신 방법을 적용하면 아주 좋을 것 같습니다.
다시 한번 이렇게 좋은 방법을 알려주셔서 감사드립니다.
팥알 2018/04/27 03:57 고유주소 고치기 답하기
고맙습니다.
문득 생각난 건데 너무 늦게 공개하면 세모이 자판 연구에 혼선을 일으킬 수 있을 것 같아서 부랴부랴 서둘러 공개했습니다. 그래서 모자라거나 더 생각해 볼 점이 좀 있습니다.
이를테면 기호 확장 배열을 쓰는 원리와 같이 모아치기 줄임말도 확장 배열을 두는 것을 생각해 볼 수 있겠는데, 생각하기에 따라 확장 배열을 얼마든지 꾸릴 수 있습니다. 하지만 다른 입력기로 구현하는 일과 익히는 일이 걸리는데, 제가 모아치기 자판의 실사용자가 아니고 깊이 연구해 보지도 않아서 더 필요한 줄임말이 얼마나 있고 어떻게 넣으면 편할지를 가늠하지 못합니다.
그래서 우선은 기본 배열을 정돈하는 쪽으로 도움이 될 수 있으면 좋겠고, 배열 확장을 하기 좋은 기본 배열이 되면 더욱 좋겠다고 생각했습니다.
신세기 2018/05/05 16:27 고유주소 고치기 답하기
답글이 늦어서 죄송합니다... 그리고 이렇게 신경써주셔서 정말 감사드립니다...
기본 기호 배열이 윗글쇠 약어화 되면서 시프트 + J K 모아치기를 통해 기호배열을 불러올 수 있는 것을 보고 정말 깜짝 놀랐습니다. 또한 새로운 약어를 추가할 때 배열 확장을 이용하면 아주 좋을 것 같다는 생각을 했습니다. 이번에 '다. ', '요? '와 같은 약어를 추가하려 하고 있는데 이렇게 시프트를 이용한 약어로 쓰면 정말 좋을 것 같습니다.