추석 연휴가 끝나자마자 <날개셋> 한글 입력기의 따끈한 새 버전 소식이 기다리고 있다. (만세 ㄲㄲ)
본인의 사정으로 인해, 6.2가 나온 지 한 달이 채 되지 않아 6.21도 아니고 이례적으로 6.3이 나오게 됐다. 원래는 10월쯤에 내놓으려고 했는데.
그 대신 이게 올해의 마지막 버전업이 되지 싶다.
이번 학기를 마친 뒤엔 드디어 종합 시험(논자시;;)을 봐야 하고, 또 이번에 듣는 과목은 지난 학기의 과목과는 달리, 국어학 배경이 빈약한 본인에게는 만만찮은 것들이다.
그래서 프로그램 개발부터 좀 마무리를 짓고 나서 그런 일들에 전념하고자 한다.
6.3은 +0.1 이상에 해당하는 기능 추가와 개선이 충분히 이뤄졌다.
외부 모듈이 TSF 환경에서 옛한글 같은 2글자 이상의 조합을 표현할 때 조합이 끊어지던 문제를 완전히 해결했고,
한글 표현 체계와 에디팅 엔진이 크게 바뀌었던 직전 버전에만 자잘하게 존재하던 여러 버그들도 잡았다. 편집기의 경우 화면 잔상이 남던 것부터 시작해 심하면 프로그램이 죽던 문제까지도 있었다. 더 구체적인 내역은 모방 범죄 예방을 위해 알리지 않겠다. ㄲㄲ
정 재민 님께서 보내 주신 글꼴 데이터를 반영하였으며, 유용한 텍스트 필터도 세 종류나 추가했다.
- 호환용 영역의 한자를 본디 형태로 바꾸는 필터 (정 재민 님 제안)
- 본문 중의 수식을 계산하고 숫자의 경우 진법을 싹 바꿔 주는 필터
- 패턴 치환 필터. 이건 프로그램 설치해서 도움말을 읽어 보기 바란다. 일괄 치환과 더불어 아주 유용한 기능으로, 이걸 쓰면 칼럼 단위의 데이터를 다루기 위해 엑셀 같은 별도의 프로그램을 쓸 일이 크게 줄어든다. <날개셋> 편집기는 키매크로나 칼럼 블록 기능을 제공하지 않지만, 대체 기능을 텍스트 필터의 형태로 꾸준히 제공하고 있다.
그리고 뭐니뭐니해도 6.3 버전의 가장 큰 특징은 Bksp 키를 다루는 체계를 싹 바꿨다는 점.
<날개셋> 한글 입력기는 1.0 시절부터 Bksp에 여타 한글 입력기에서는 찾을 수 없는 특수한 기능들을 제공해 왔다. 즉,
- Bksp와 Shift+Bksp의 용도를 구분하고,
- 조합 여부와 상관없이 한글을 낱자나 글자 단위 중 원하는 형태로 얼마든지 지울 수 있다.
- 그리고 한글이든 비한글이든 지금 글자가 다 지워진 후 그 앞에 또 한글이 있으면 그 한글에 달라붙어서 조합 상태가 재연된다. 앞 글자도 seamless하게 계속 낱자 단위로 지우거나 고치거나 빠진 낱자의 추가 입력이 가능하다.
- 게다가 이걸로도 모자라서, 두벌식 글자판의 경우 도깨비불 현상까지 고려해서 이전 상태를 복원해 준다. 일명 역도깨비불인데,
안해 → 않 (≠ 안해 → 안ㅎ → 안)
보끼 → 볶 (≠ 보ㄲ → 보ㄱ)
같은 동작도 지원된다는 뜻이다.
그리고 그 후 10여 년 뒤, 6.3 버전에서는, <날개셋> 한글 입력기의 간판 기능으로 손색이 없는 이 기능을 지정하는 방식이, 예전보다 훨씬 더 깔끔하고 체계적이고 전문적으로 바뀌었다.
스크린샷을 보면, 예전에 Bksp 동작 방식에 있던 서너 개의 체크 옵션이, 자주 쓰는 predefined configuration을 바로 가져오는 콤보 상자로 대체되었음을 알 수 있다. 자세한 설정은 말 그대로 '자세히' 버튼을 눌러서 나타나는 별도의 대화상자에서 해야 한다.
스크린샷에서 알 수 있듯, Bksp와 Bksp, 그리고 한글을 조합 중일 때와 그렇지 않을 때, 각 상황별로 한글을 무슨 순서대로 지울 것이며 이 글자가 다 지워졌을 때 앞의 한글에 달라붙을지를 일일이 사용자가 설정할 수 있다. 예전 버전에서는 기능 자체만 제공되었지 이 정도로 세밀한 설정은 가능하지 않았다.
또한 두벌식 역도깨비불 재현도 별도의 옵션으로 바뀌었다. 따라서 두벌식 자판을 쓴다고 하더라도 그냥 달라붙기 기능만 쓰지, 역도깨비불까지 원하지는 않는 사용자라면 해당 옵션을 끄면 된다. 이런 취사선택도 예전 버전에서는 가능하지 않았다.
과거의 3.0부터는 자그마한 옵션이 하나 추가되었는데, 입력 순서와 상관없이 하위 낱자부터 한 타씩 지우는 옵션이 그것이다.
ㅇ+ㅜ+ㅣ+ㄴ 순으로 입력했든 ㅇ+ㅜ+ㄴ+ㅣ 내지 ㅜ+ㅇ+ㅣ+ㄴ 순으로 입력했든, '윈'은 무조건 종성부터 역순으로 지워서 위-우-ㅇ이 되게 하는 기능인데, 이것이 바로 위의 스크린샷에서는 '최하위 낱자의 직전 한 타'이다. 이런 차이는, 당연한 말이지만 동일한 글자를 여러 가지 순서로 입력할 수 있는 모아치기가 가능한 세벌식 체계에서만 의미가 있다.
그에 덧붙여 이 새 버전에서는 '최하위 낱자 전체'라는 옵션도 추가됐다. 말 그대로 낱자 단위로 한꺼번에 지워 버리는 옵션으로, 아무리 복잡한 한글이라도 초· 중· 종성이 모두 갖춰져 있다면 세 타 만에 다 지워진다. '윈'을 지울 때 '위' 다음에 '우'를 안 거치고 바로 'ㅇ'이 된다는 뜻. 사실, PC용이 아닌 휴대전화용 한글 입력기의 Backspace는 다들 이런 방식으로 구현되어 있다.
여담이지만, 내부적인 구현 오버헤드는 최하위 낱자를 따지는 방식이, 고전적인 '직전에 입력된 한 타'보다 더 크다.
이쪽 기능을 대대적으로 손을 좀 봐야겠다고 거의 6.0 개발 초창기 시절부터 생각은 하고 있었는데 드디어 해내게 되어 무척 기쁘다. 진작부터 지원돼야 했을 기능들이다.
물론, 주변 글자를 자유자재로 다룰 수 없고 write-only만 가능한 TSF B급 이하 환경에서는 '달라붙음' 같은 기능은 전혀 쓸 수 없고, '조합 상태가 아닌 한글을 지우는 단위' 역시 오로지 글자 전체 단위로 제약을 받게 된다.
기능을 구현하는 과정에서 <날개셋> 한글 입력기의 내부 구조도 제법 바뀌었다. 하지만 더 합리적으로 바뀌었다. 그 내막을 살펴보면 이렇다.
지난 3.0 버전 이래로 Bksp 키는 입력 스키마가 '낱자 단위 지우기' 아니면 '글자 단위 지우기'라는 특수글쇠를 생성하는 형태로 내부적으로 처리되었다. 그리고 전자와 후자를 Bksp와 Shift+Bksp에다 각각 대응시킬지, 아니면 반대로 Shift+Bksp와 Bksp에다 대응시킬지를 '입력 스키마'의 옵션으로 지정 가능했다. 그게 끝이었다.
그러나 이제부터는 입력 스키마는 Bksp일 때 Bksp1, 그리고 Shift+Bksp일 때 Bksp2라고 언제나 고정적인 특수글쇠만을 생성한다. 이런 특수글쇠는 1부터 4까지 현재 네 종류가 예약되어 있는데, 이들 자체에는 어떤 특정 동작 방식이 규정되어 있지는 않다. 각 특수글쇠의 해석은 전적으로 그 아래의 '문자 생성기'만이 담당하게 된다. 그것이 바로 저 'Bksp 동작 방식' 옵션인 것이다.
그리고 그 추상적인 Bksp와는 별개로, 특정 방식대로 한글 낱자를 지워 주는 특수글쇠가 또 존재한다. 즉, 진짜배기 Bksp는 입력기의 옵션이 어떻게 지정됐냐에 따라서 낱자/글자 단위로 지우고 필요하다면 달라붙기나 역도깨비불까지 제공하는 반면, 그냥 낱자 단위, 입력 역순, 글자 전체(위의 스크린샷에 있는 네 옵션 중 하나) 삭제라는 고정불변 단편적인 Bksp 기능도 임의의 글쇠에다가 특수글쇠의 형태로 배당해서 쓸 수 있다는 뜻이다.
아시는 분이 있으려나 모르겠는데, <날개셋> 한글 입력기에는 0x10과 0x11에 '뒷글자 삭제'라고 해서 Del과 유사한 기능을 하는 특수글쇠가 이미 있다. 그것처럼 Bksp와 유사한 기능을 하는 네 가지 특수글쇠도 일관성 차원에서 추가된다고 이해하면 정확하다.
이들 특수글쇠는, 편집 환경만 지원된다면(TSF A급 같은), 이미 완성된 한글도 물론 낱자 단위로 자기 방식대로 지울 수 있다. 하지만 그런 이상적인 환경이 아니라면, 이미 완성된 글자는 건드리지 못한다. 사실 Bksp 키 자체가, 한글 입력기가 조종하는 것과 에디터 응용 프로그램이 조종하는 것이 공존하는 체계이다. 완성된 글자는 한글 입력기가 아니라 응용 프로그램이 지워 주며, 응용 프로그램은 일반적으로 '진짜' Bksp 키가 들어왔을 때만 그런 동작을 하기 때문이다.
이런 식으로 시스템 개편을 했는데, 솔직히 내가 생각했지만 내가 봐도 너무 멋있다..;; 이 맛에 프로그래밍 하는 거다.
이것저것 생각해 놓은 게 많아서 당분간은 새 버전의 Readme엔 '※ 한글 입력 체계' 카테고리가 쭉 있을 것으로 보인다. 한글 입력기 본분에 충실한 기능이 계속 강화되고 개선되고 있기 때문이다.
6.3 버전은 6.2와 API가 완전히 호환된다.
다음 버전은 내년 초에 6.5 정도가 목표이다. 버그 없이 프로그램을 잘 만들어서 가능하면 0.0x대로 내려가지는 말고 버전을 쑥쑥 크게 올려야겠다.
Posted by 사무엘