Emacs 상에서 파일의 인코딩을 (주로 Euc-kr 과 Utf-8 사이의 변경) 변경하는 방법에 관한 이야기 입니다. 

언젠가는 정리해야지 마음만 먹고 있다가 결국 정리하게 되는군요.

File Dired 모드 (C-xC-f 를 누르고 미니버퍼에 디렉토리에 보이는 상태에서 C-d 누르면 됨) 에서 다음에 불러들일 커맨드를 그 파일이 저장되어 있는 인코딩으로 지정해준다. (만약 파일이 euc-kr 로 저장되어 있다면)
 

 C-x RET c <RET> euc-kr 



이렇게 입력하고 다음에 불러들일 파일을 <RET> 을 입력해서 불러들이면 위에 지정한 인코딩(Euc-kr) 으로 파일을 불러들입니다. 

 

        C-x RET f <RET> utf-8 


이렇게 입력하면 지금 불려져 있는 파일을 인코딩을 변경하여 저장하라는 명령입니다. 현재 euc-kr 로 불러들인 파일을 utf-8 으로 저장하겠군요.  


 
MMM-mode 사용시 버그가 있습니다. 저는 php-mode 와 혼용시 발생했는데요. 일본분이 픽스해주셨는데. 성함까지는 기억이 안나는군요. 웹브라우저를 실수로 꺼버려서.. 

mmm-mode-0.4.8/mmm-utils.el 을 열어서 

(defun mmm-format-string (string arg-pairs)
  "Format STRING by replacing arguments as specified by ARG-PAIRS.
Each element of ARG-PAIRS is \(REGEXP . STR) where each STR is to be
substituted for the corresponding REGEXP wherever it matches."
  (let ((case-fold-search nil))
    (save-match-data
      (dolist (pair arg-pairs)
        (while (string-match (car pair) string)
;;          (setq string (replace-match (cdr pair) t t string))))))
 (setq string (replace-match (format-mode-line (cdr pair)) t t string))))))
  string)



다음 부분을 찾아서 위와 똑같이 처리해 주면 됩니다. 기존 코드   

(setq string (replace-match (cdr pair) t t string))))))



에 주석처리를 해주고 

 (setq string (replace-match (format-mode-line (cdr pair)) t t string))))))

 
이 부분을 대신 넣어줍니다.


 
Emacs 로 PHP 프로그래밍을 하다 보면 일반적인 통합 GUI 에서 제공하는 php 파일에서 HTML 태그에 관한 기능이 부러울 때가 있습니다. 


이러한 사진처럼 말이죠. 이것은 php 파일을 열었을 때 보이는 것인데요. 쉽게 말해서 php-mode 와 html-mode 가 섞여 있는 것입니다. 

이것을 가능하게 해 주는 것이 MMM-mode 라는 것입니다. 그리고 PHP-mode 도 받아서 설치해 줍니다. 

설정하는 방법이 그리 쉽지는 않았는데요. 간단하게 정리해서 올립니다. 

php-mode.el (위에서 링크한 곳에서 받아서 압축을 풀면 나오는 파일 입니다) 은 ~/.emacs.d 에 설치해 줬습니다. 그리고 mmm-mode-0.4.8 또한 ~/.emacs.d 에 설치해 줬습니다. 

.emacs 파일에 다음과 같이 설정해 주면 됩니다. 

(setq load-path (cons (expand-file-name "~/.emacs.d/") load-path))
(require 'php-mode)

(add-to-list 'load-path (expand-file-name "~/.emacs.d/mmm-mode-0.4.8"))
(require 'mmm-mode)

(setq mmm-global-mode 'maybe)
(mmm-add-mode-ext-class nil "\\.php3?\\'" 'html-php)
(mmm-add-classes
 '((html-php
    :submode php-mode
    :front "<\\?\\(php\\)?"
    :back "\\?>")))
(autoload 'php-mode "php-mode" "PHP editing mode" t)
(add-to-list 'auto-mode-alist '("\\.php3?\\'" . html-mode))




.Emacs 파일에 

(setq mac-option-modifier 'meta)


를 추가해 주면 됩니다.  
 


 

이맥스는 이맥스이어야만 한다. 그 어떤 환경에서라도 말이다.. 



요즘들어서 아쿠아맥스(Aquamacs) 에 대한 불만이 마구 생깁니다. 이쁜것은 정말 맘에 들지만, 진정한 이맥스 같지가 않단 말이죠. 이맥스란 무릇 자신이 원하는 대로 모든 것이 세팅되어야 함을 말하는 데, 아쿠아맥스는 디폴트로 세팅되어 있는 것이 강력할 뿐 아니라, 제 데스크탑에 설치되어 있는 (우분투 머신을 말합니다) GNU 이맥스와도 개발환경이 동일하지 않습니다. 그래서 카본 이맥스로 넘어가 볼까 고민하던 찰나에 해외에서 찾은 정말 멋진 말입니다. (물론 이맥스 유저들에게 한해서 입니다) 문장 중간, 중간의 볼드체로 되어 있는 것이 필자가 정말 강조하고 싶은 것이겠지요. 절절하게 공감이 갑니다.  

그래서 결론은 '카본 이맥스'를 쓰라는 것입니다. 

As a long-time emacs user, I would recommand against "exotic" versions of emacs (aquamacs falls in this catagory, but this "starter kit" thing as well, and let me try to explain why), just for the sake of finger-training and brain-training also.

My argument is that you want to learn emacs once and for all, regardless of the platform (i.e. combination of OS/desktop/hardware/whatever) you'll be using emacs on. Almost every flavour of unix comes with a preinstalled emacs, so the hope is that you'll never have to resort to e.g. vi, even in the most hostile environments (for instance, editing a /etc config file on a remote HP/UX server via ssh). You'll still be able to use the old emacs 19 that sits there, and even if it does not have your config files (that is, your starter kit, your keybindings, and stuff), you'll still have say 70% of your usual editing powers at hand.

And if you find yourself often forced to edit those file on that hostile machine, you will want to mirror your .emacs config on that old emacs as much as possible. Of course, you will lose along the way some stuff that is not supported there, but again, good'ol emacs will always be emacs even if a diminished one.

Of course, if you control perfectly your working environment, e.g. if you only ever work only on your shiny mac laptop, you might want a fancier version of emacs, just because it will be easier to use Cmd-C/Cmd-V than to learn Meta-W/Ctrl-Y. And for the same reason if you develop in one language you might want to actually use a full-blown IDE with super-powers tailored for that language (e.g. Eclipse, Xcode, whatever). But you know that sometime, you will have to edit an unexpected file like a shell script, or a web page, or a Python script, or who knows what kind of text file, and this is why you want to use the omni-powerful One True Editor in the first place.

And this is the reason why I use Carbon Emacs on my shiny mac laptop: I get the exact same (emacs) features on the Ubuntu box I'm forced to use at work, using the exact same config files (handcrafted during my ten years of emacsery), and still I can feel quite confortable on other people's or other machines' emacsen.

...my two cents



원문 링크: 클릭


 

 
 
다소 제목이 길어졌지만 왜 이런 글을 쓰게 됐는지 설명하고자 합니다.

저는 94년도부터 한영 변환은 어떤 OS 에서든지 Shift+Space 를 기본으로 하고 있습니다. 단 하나의 예외가 있다면 빌어먹을 OSX 에서만 Command + Space 를 사용하고 있습니다. (윈도 , 우분투에서는 Shift + Space ) 입니다.

우분투 11.04 에서는 iBus 가 기본 입력기로 사용되고 있습니다. 그래서 한영 변환을 Shift+Space 로 변경해줬습니다. 이러한 상황에서는  Emacs 에서 사용하는 한영 변환하고 겹쳐서 시스템의 한영 변환이 먼저 일어납니다. 그렇다고 기본적으로 사용되는 Ctrl+Space 로 지정해 주자니 , Emacs 에서 영역 지정하고 겹쳐서 사용되지 않습니다.

그래서

sudo mv /usr/bin/emacs /usr/bin/emacs.bak


으로 기존  emacs 를 백업 해 둡니다. 그리고

sudo gedit /usr/bin/emacs


를 실행해서 emacs 파일을 한개 만듭니다.

#!/usr/bin/env bash
XMODIFIERS="" /etc/alternatives/emacs --no-splash $*

이렇게 그 파일 안을 작성해 줍니다.

sudo chmod +x /usr/bin/emacs


로 실행가능하게 만들어주고 실행하면 됩니다. 터미널에서 실행해야 하는 것이 안타깝긴 하지만 그래도 어딥니까? ㅎㅎ







쉘 프로그래밍을 하다보면 종종 발생하는 경우가 윈도에서 작성한 파일을 ftp 로 유닉스 서버에 올려서 실행할려고 하면 발생하는 에러 입니다. 파일 모드가 DOS 타입이냐 UNIX 타입이냐에 따라서 실행여부가 결정되는데요 보통 실행 쉘들은 unix 타입으로 변경해줘야 실행이 됩니다. 


Dos 에서 unix 로 변경

M-x set-buffer-file-coding-system RET undecided-unix
save the file (C-x C-s)

거나 

C-x RET f undecided-unix
C-x C-f

Unix 에서 dos 로 변경

M-x set-buffer-file-coding-system RET undecided-dos
save the file (C-x C-s)

거나

C-x RET f undecided-dos
C-x C-f

 


위에서 C-x RET f 를 입력해서 다음에 실행하는 명령의 인코딩을 정해주고, 그 다음에 파일을 열라는 뜻입니다.  


 
흔히 말해지는 노가다. 파일 열어서 전부 원하는 단어를 찾고 그것을 일일이 변경하는 작업은 누구나가 싫어하는 작업입니다. Emacs 를 이용해서 간단하게 변경하는 작업을 해서 정리해 봤습니다. Windows 버젼에서는 검색까지는 되는데 찾은 파일을 오픈하는데 (Invalid escape) 오류가 발생합니다. 이건 따로 손을 봐야 하는 문제 같더군요. OSX 에서 테스트 해 본것입니다. 

 M-x find-grep-dired

 를 이용해서 찾고자 하는 문자열을 검색합니다. 정규표현식(Regexp)이 먹히기 때문에 원하는 것을 콕 찝어서 검색 가능합니다.

 검색된 파일들이 *Find* 버퍼에 쭈욱 나열되어 있습니다. 이때 t 를 누르면 검색된 파일들이 토글 됩니다. 

 
아래와 같은 형식으로 보이게 됩니다.  이때  Q (shift + q) 를 눌러주면 문자열 치환 식이 나타납니다. 역시 정규 표현식이 먹히기 때문에 편하게 입력하시고 실행 시키시면 치환조건에 맞는 구문을 찾아서 프롬프트가 나타납니다. y , n 를 눌러가면서 변환하시면 됩니다. 일일이 변환하시기 귀찮으면  Y 를 프롬프트상에서 누르시면 나머지 과정은 자동으로 진행됩니다. 

 그러면 변경된 수백개의 파일들을 일일이 저장하면서 끄기는 상당히 귀찮은 일입니다. 

M-x list-buffers 를 실행하여 나온 버퍼들을 s 로 표시해 줍니다. (저장하라는 뜻입니다) 저장할 수백개의 파일들이 선택됐으면 x (실행하라는 뜻) 를 눌러서 전부 저장시켜 줍니다. 



 
Perl 을 모르는 상황에서 Emacs 만큼 강력한 정규표현식 도구가 따로 없습니다. (vim 은 제외 이제 저는 vim 을 마음속에서도 지웠습니다 ㅋㅋ) 

다음과 같은 상황에서 어떻게 이맥스를 이용해서 문자열을 치환하는  지에 관한 예제 입니다. 


1
2
3
4
...

5053
5054  <-- 이게 앞으로 삭제될 예정
5055
..

100000 


이런 상황은 거의 없을 듯 하지만 수동으로 인덱스를 맞춰줄려면 보통의 인내심으로 되는 것이 아닐 것입니다. 이맥스(Emacs) 에서는 정말 간단하게 작업할 수가 있습니다.

5055 ~ 부터 100000 까지 영역(Region) 을 설정해 줍니다. 그리고 



 M-x replace-regexp
  Replace regexp: ^[0-9]+
  Replace regexp with \,(1- \#&)

이 명령을 실행하면 나머지 숫자까지 아름답게 맞춰집니다. 간단히 부연 설명 하자면 \, <-- 다음 나오는 함수를 실행하라는 명령이고요. 1- 는 숫자값을 한개씩 빼라는 이야깁니다. (숫자값을 한개씩 더하는 명령은 1+ 입니다) \#& 는 \& 와 # 을 합친 것 인데요. \& 는 찾은 정규표현식 전체를 의미하고 # 은 찾은 문자열을 숫자로 변환하라는 뜻입니다. 


 
최근 자바 작업을 할 일이 있어서 하다보니 인라인 함수가 없다는 충격적인 소식을 들었습니다. 간단한 작업은 전부 인라인 작업을 즐겨하는 저에게는 청천벽력같은 일!! 그래서 귀찮은 작업들을 정말 간단한 이맥스 함수를 만들어서 해결 하는 방법을 소개할까 합니다. 

 
    
(defun put-iteration (var)

  (interactive "s메시지: ")
  (insert "parse_map.put(\"" var "\" , getTextValue(docEle , \"" var "\"));\n" ))

 (global-set-key "\C-\M-z" 'put-iteration)

 

주어진 var 형태를 소스에 직접 입력하는 방식입니다. 아래에 있는 줄은 단축키를 지정하는 것입니다.
자주 쓸것도 아니고 작업할 때만 몇가지 변경해서 쓰면 좋을 것 같아서 적어 봅니다.


+ Recent posts