- notepad2 컴파일 삽질기 1++ : 기본적인 오류 수정(3.1.21.5-rc4 용)
- 컴퓨터야그/notepad2
- 2009. 6. 5. 11:43
Notepad2가 3.1.21.5로 곧 업그레이드 될 예정이다.
현재는 rc4까지 공개되었는데, rc4가 3월 10일에 나왔으니 조만간에 정식버전이 나올 것 같다.
그런데, rc4에서도 IME 입력문제는 해결이 되지 않았기 때문에 한글을 깔끔하게 입력하려면 패치를 해줘야 한다.
(아마도 앞으로도 계속 그럴 것 같다)
notepad2 컴파일 삽질기 1 : 기본적인 오류 수정에서 3.0.20의 소스를 수정하는 방법을 설명했는데, 3.1.21.5에서 환경이 조금 바뀌었다.
3.1.21.5의 소스를 Visual C++ v6.0에서 컴파일할 수 있도록 수정하는 방법을 설명하겠다.
VS2005, VS2008 등의 환경에서 사용할 수 있도록 수정하는 방법들은 notepad2 컴파일 삽질기 1에서 설명했으므로 넘어가겠다.
0. 들어가기 전에
다음과 같은 내용은 모두 준비가 되어있다고 가정하고 설명하겠다.
a. Visual C++ v6.0 및 Service Pack 6 설치
b. Platform SDK 설치 (Windows® Server 2003 R2 Platform SDK ISO Download)
c. Scintilla 1.78 다운로드
d. np2-3.1.21-build_vc6.patch 적용
a. Visual C++ v6.0 및 Service Pack 6 설치
b. Platform SDK 설치 (Windows® Server 2003 R2 Platform SDK ISO Download)
c. Scintilla 1.78 다운로드
d. np2-3.1.21-build_vc6.patch 적용
1. Edit.c 수정(예전 패치 그대로이다)
void EditTitleCase(HWND hwnd) 메쏘드에서
이건 소스 쪽 오타다. ㅠ.ㅠ
if (!IsCharAlphaNumericW(pszTextW[i]) && !StrChr(L"'?,pszTextW[i])) {라는 행을 찾아
if (!IsCharAlphaNumericW(pszTextW[i]) && !StrChr(L"'",pszTextW[i])) {로 바꿔준다.
이건 소스 쪽 오타다. ㅠ.ㅠ
2. Styles.c 수정(이것 역시 예전 패치 그대로다)
Notepad2/Scintilla에는 약간 이상한 버그가 하나 있다.
글꼴을 지정하는 과정에서 charset이 0으로 기록되면 다른 프로그램으로의 복사/붙이기가 정확하게 이루어지지 않는다는 점이다.
(okto님께서 Notepad2 제작자에게 문의를 하셨지만, Scintilla 쪽 버그라 손을 안 대겠단 답을 들었다)
이 문제를 간단히 해결하기 위해 charset이 0인 경우는 기록하지 않도록 수정한다.
BOOL Style_SelectFont(HWND hwnd,LPWSTR lpszStyle,int cchStyle,BOOL bDefaultStyle) 메쏘드의 두 군데를 수정하면 된다.
우선, 아래와 같은 부분을 찾는다.
다음으로 이렇게 생긴 부분을 찾는다.
글꼴을 지정하는 과정에서 charset이 0으로 기록되면 다른 프로그램으로의 복사/붙이기가 정확하게 이루어지지 않는다는 점이다.
(okto님께서 Notepad2 제작자에게 문의를 하셨지만, Scintilla 쪽 버그라 손을 안 대겠단 답을 들었다)
이 문제를 간단히 해결하기 위해 charset이 0인 경우는 기록하지 않도록 수정한다.
BOOL Style_SelectFont(HWND hwnd,LPWSTR lpszStyle,int cchStyle,BOOL bDefaultStyle) 메쏘드의 두 군데를 수정하면 된다.
우선, 아래와 같은 부분을 찾는다.
if (bDefaultStyle &&이곳을 아래와 같이 고쳐준다.
lf.lfCharSet != DEFAULT_CHARSET &&
lf.lfCharSet != iDefaultCharSet) {
lstrcat(szNewStyle,L"; charset:");
wsprintf(tch,L"%i",lf.lfCharSet);
lstrcat(szNewStyle,tch);
}
if (bDefaultStyle &&
lf.lfCharSet != DEFAULT_CHARSET &&
lf.lfCharSet != iDefaultCharSet &&
lf.lfCharSet) {
lstrcat(szNewStyle,L"; charset:");
wsprintf(tch,L"%i",lf.lfCharSet);
lstrcat(szNewStyle,tch);
}
다음으로 이렇게 생긴 부분을 찾는다.
if (Style_StrGetCharSet(lpszStyle,&iValue))이곳은 이렇게 고친다.
{
if (lstrlen(szNewStyle))
lstrcat(szNewStyle,L"; ");
wsprintf(tch,L"charset:%i",iValue);
lstrcat(szNewStyle,tch);
}
if (Style_StrGetCharSet(lpszStyle,&iValue) && iValue)
{
if (lstrlen(szNewStyle))
lstrcat(szNewStyle,L"; ");
wsprintf(tch,L"charset:%i",iValue);
lstrcat(szNewStyle,tch);
}
3. Scintilla 소스에 반영
Scintilla가 최근(4월) 1.78로 업데이트 되면서 PerLine.h, PerLine.cxx라는 파일 2개가 추가되었다.
그런데, 앞에서 언급한 VC6 패치에는 이 두 파일이 포함되어있지 않다.
이 두 파일을 소스에 추가해야 정상적으로 컴파일이 된다.
두 파일을 Scintilla/src 카테고리에 추가한다.
그런데, 앞에서 언급한 VC6 패치에는 이 두 파일이 포함되어있지 않다.
이 두 파일을 소스에 추가해야 정상적으로 컴파일이 된다.
두 파일을 Scintilla/src 카테고리에 추가한다.
바로 여기다. ^^;
4. IME 패치
IME 메시지를 처리하도록 수정 및 undo/redo가 정상동작하도록 수정 (버그패치) 등은 3.1.21.5에도 그대로 적용된다.
그 패치를 적용하면 IME를 정상적으로 이용할 수 있다.
그 패치를 적용하면 IME를 정상적으로 이용할 수 있다.
'컴퓨터야그 > notepad2' 카테고리의 다른 글
Notepad2 3.1.21 정식버전 출시. 그러나... (3) | 2009.06.23 |
---|---|
notepad2 컴파일 삽질기 부록#4 : AutoHotkey 스킴 추가 (2) | 2009.06.08 |
notepad2 버그패치: ASCII Art 수정 (5) | 2009.01.11 |
notepad2 컴파일 삽질기 부록#3 : 메모장 대신 사용 (5) | 2009.01.07 |
notepad2 컴파일 삽질기 부록#2 : context-menu 추가 업그레이드 (5) | 2008.12.30 |
Recent comment