티스토리 뷰

소스인사이트 한글 주석이 깨질 때

프로그래밍 편집 툴인 소스인사이트(Source Insight)을 이용하다 보면 아래와 같이 한글 입력 시 글자가 깨지는 경우를 볼 수 있다. 이 문제는 매크로를 활용하여 해결이 가능하다. 


매크로를 이용한 소스인사이트 한글 깨짐 처리

작업 중인 프로젝트를 닫고 메뉴의 Project > Open Project를 누른다.



Open Project 다이얼로그 창에서 Base 프로젝트 선택.



Ctrl + O 키를 누르면 나오는 다이얼로그 창에서 Utils.em을 선택한다.



아래 코드를 추가하고 저장한다.


macro DoNothing()
{
}


메뉴의 Options > Key Assignmens 항목을 선택한다.



Macro: DoNothing 항목을 찾아서 선택 뒤 Assign New Key 버튼을 누른다. 'Shift + 한/영' 키를 눌러서 키를 할당하거나 이게 안 먹히면 'Shift + 한/영 + 알파벳 아무거나' 키를 눌러 보면 먹히는게 있다. 할당이 되면 Shift + ?라고 표시가 된다. 여기까지 모든 설정은 끝났다. 이제 base 프로젝트를 닫고 작업중인 프로젝트를 열어서 한글 입력을 해보자.




원리

한글 입력이 깨진 코드 파일을 울트라 에디터나 그외 헥사 에디터로 열어서 보면 0xe5 때문에 한글이 깨어짐을 알 수 있다. 0xe5는 VK_PROCESSKEY란 버추얼키코드(virtual key code)이다. 참고로 가상키코드는 키보드 종류에 상관 없이 키 값을 입력받기 위해서 만든 범용 코드이다. 그런데 가상키코드가 어떻게 들어간 걸까?


이해를 돕기위해 IME(Input Method Editor, 입력기 혹은 입력 방식 편집기)에 대해 알아보자. 하나의 자판이 모든 나라의 글자를 조합해 줄 수 있을까? 당연히 안 된다. 그래서 IME가 만들어졌다. 이것은 자판의 글쇠 보다 더 많은 문자를 계산 혹은 조합하여 입력해 주는 시스템 소프트웨어이다. 즉 입력과정을 수행하는 DLL이다. 키보드에서 키값을 보내면 IME는 해당 가상키코드를 필요한 응용프로그램에 보내게 된다.


결국 IME에서 VK_PROCESSKEY란 녀석이 소스인사이트에 온 것인데 소스인사이트 프로그램에서는 이 것이 문자값이 아니므로 에디터에서 처리하지 않아야 한다. 하지만 할 필요가 없음에도 들어가서 문제가 되는 것이다. 그래서 해결한 방법은 한/영 키를 누를 때 마다 이상 하게 붙어버리는 가상키코드 값을 없애 버린 것이다. 어떻게? 한/영 키를 매크로 핫키에 할당함으로써 문자 입력이 아닌 매크로 핫키 입력으로 설정해버렸다. 당연히 매크로는 아무것도 하지 않는다. 키를 가로채는데 목적이 있으므로. 


어떻게 해결방법 보다 사족이 더 길다... 흠...


VK_PROCESSKEY

The VK_PROCESSKEY message is sent to an application as the wParam of a WM_KEYDOWN or WM_KEYUP message. When this virtual key is generated, the real virtual key is saved in the input context, if the messages generated by the IME are stored in the input context. The system restores the real virtual key or posts the messages that are stored in the message buffer of the input context.