2011. 8. 6. 02:39
Visual C++ 10은 기본적으로 ASCII 인코딩으로 파일을 만든다. (VC#은 기본적으로 유니코드 파일로 생성된다는거 같다)

근데 이게 git와 함께 쓰이면 gitweb 등에서 한글이 깨져보이는 현상이 발생하는데 이는 gitweb이 UTF-8 인코딩을 기본 인코딩으로 보여주기때문이다.

이를 위해 소스파일들의 인코딩을 변경해줘야되는데 메뉴의 File -> Advanced Save Options에서 Encoding을 UTF-8로 변경해야하는 번거로움을 감수해야한다.

그만좀 보고싶다.


프로그래머의 힘은 자동화다. 언제까지 이 노가다를 할텐가?
자동화 방법은 다음과 같다.

매크로 에디터에 들어가 EnviromentEvents에서 코드 맨 윗부분의 Module들을 Imports 하는 부분에
Option Strict Off
Option Explicit Off
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics '여기까지 기존 모듈
Imports System.IO 
위와 같이 System.IO 모듈을 포함시키고 Automatically generated code, do not modify 다음에 다음 코드를 붙여넣고 저장한다.

Sub MakeUTF8File(ByVal path As String)
    Dim input As New FileStream(path, FileMode.Open)

    'Check BOM
    Dim isUTF8 As Boolean = (input.ReadByte = &HEF And input.ReadByte = &HBB And input.ReadByte = &HBF)
    input.Close()

    If (Not isUTF8) Then
        Dim s As String
        s = File.ReadAllText(path, System.Text.Encoding.Default)
        File.WriteAllText(path, s, System.Text.Encoding.UTF8)
    End If
End Sub

Public Sub DocumentEvents_DocumentSaved(ByVal Document As EnvDTE.Document) Handles DocumentEvents.DocumentSaved
    Dim path As String = Document.FullName
    MakeUTF8File(path)
End Sub

'이 핸들러는 왠만하면 빼는게 좋다. 라이브러리 파일들을 디버깅 차원에서 열때 자동으로 바꿔버리면 조금 곤란할듯
Public Sub DocumentEvents_DocumentOpening(ByVal path As String, ByVal flag As Boolean) Handles DocumentEvents.DocumentOpening
    MakeUTF8File(path)
End Sub 
이제 다음과 같은 상황에서 파일이 UTF-8 인코딩으로 자동변환이 된다.

1. 파일을 열때
2. 파일을 생성 (생성할때 자동으로 열리니까)
3. 파일을 저장할때

이제 UTF-8 BOM과 함께하는(?) 코딩을 하면 된다.

추가내용1: 
@waan26
님이 알려주신 새파일 생성시 UTF-8을 적용하는 좀 더 좋은 방법이 있다. (C++ Class 생성에는 안먹힌다)
위 방법을 사용시 새 파일을 생성하면 파일 변환이 변환됬다는 메세지 박스가 무조건 뜨게 되는데 (파일 로딩 후에 변환을 시도하는거 같다)
새 파일 생성시 무조건 UTF-8 파일을 생성하는 좀 더 깔끔한 해법으로 다음과 같은 방법이 있다.

1. Visual Studio 설치된 위치(보통 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcprojectitems)에 간다.
2. hfile.h, newc++file.cpp 과 같은 템플릿 파일의 인코딩을 UTF-8로 변경한다
3. 그 뒤로는 항상 UTF-8 파일이 생성된다.

추가내용2:  클래스 템플릿을 따로 만드는 방법도 있다. 이건 좀 있다가 해보고 적어야지 [...]

P.S. 그건 그렇고 코드를 이쁘게 보여줘야되는데.. ( --) 
Posted by envi
2010. 4. 2. 10:24

지켜주지 못해 미안해 Emacs


Visual Studio 2010 에는 Emacs emulation 제공되지 않을수도 있다는 을 봤다.
이유인즉 WPF 로 재작성되면서 해당 기능에 대한 구현되지 않았다는건데...
평소 emacs key binding을 애용해오던 나에겐 거짓말이라고 믿고싶은 상황이다. (다른 곳엔 emacs key emulation을 살려달라는(?) 투표도 진행되고 있다. (투표가 맞긴하나?))

아무튼 사람들의 불평에 대한 MS의 답변을 보면 3rd party에게 구현을 맡길 수 있도록 할수도 있덴다. 왜 지들이 구현 안하고...
뭐.. 한편으론 이 상황이 좀 반갑기도한데 왜냐면 기존 emacs emulation은 매우 드럽기때문이다. -_-;;
기존 기능은 이건 emacs 같기도하고 visual studio 같기도한 애매한 emulation이라 상당수의 기능이 원래 동작과는 다르게 동작한다.
그래서 viemu(vi emulation) 처럼 3rd party 쪽에서 구현하면 좀더 완성도가 높게 나오지 않을까 싶기도하고..

어쨌거나 저 소식을 듣고 emacs key binding을 버리고 기본 키보드 세팅으로 돌아가려고 시도를 해봤는데.. 이미 늦은거 같다. emacs는 마약이다 orz (사실 vim은 viemu 같은 것도 있고 VS2010 도 지원해준다고하니 vim에 적응해서 넘어가보려고 시도중에 있긴한데 -_-; 아무래도 글렀다.) ※1

MS가 구현할 생각이 없다면 재빨리 다른 3rd party에서 add-on을 만들어줬으면 좋겠다... 아니.. 제발, 반드시, 빨리 만들어줘-_- 비싸도 사줄테니까말야. 화이팅.



※1. 기본 키보드 세팅을 사용하지 않는 이유로는 키보드에서 손을 많이 움직이는걸 싫어한다. emacs 키배치에 맛들리니 코딩할때 화살표키나 PageUp, PageDown 누르러 손을 이동하는 것도 귀찮..
Posted by envi