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 으로 저장하겠군요.  


 
Ubuntu natty (11.4) 에 오라클을 설치하는 방법입니다. 

만약 설치할려는 서버의 메모리가 1기가 보다 적을 때는 포기하기로 하자 

$ sudo dd if=/dev/zero of=/swpfs1 bs=1M count=1000
$ sudo mkswap /swpfs1
$ sudo swapon /swpfs1


를 입력해서 스왑을 지정해 줍니다. 그리고 다음과 같이 입력해서 
  

$ sudo emacs /etc/apt/sources.list


를 열어서 제일 아래쪽에 

deb http://oss.oracle.com/debian unstable main non-free


이걸 추가해 주고 , 그리고 GPG Key 값을 추가해 줍니다. 

$ wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle -O- | sudo apt-key add -


소스 리스트에 오라클 배포 사이트를 추가해주고 , 키를 등록해 줬으니 이제 소스리스트를 업데이트 해줄 시간입니다.

$ sudo apt-get update


자 이제 어떤 것이 있는지 조사해 볼까요?  

$ apt-cache search oracle


를 입력하면 가장 아래쪽에 
 
   oracle-xe - Oracle Database 10g Express Western European Edition
   oracle-xe-client - Oracle Client 10g Express Edition
   oracle-xe-universal - Oracle Database 10g Express Universal Edition
 
이 세가지가 눈에 띄는군요. oracle-xe 는 유럽 버젼인 듯 하니 oracle-xe-universal 을 깔아줘야 하겠죠?

$ sudo apt-get install oracle-xe-universal 


실수로 oracle-xe 를 설치할 뻔 했는데 universal 버젼이 대략 50메가 정도 용량이 더 크더군요.  다 설치됐으면 설명에 따라서 다음과 같이 설정을 해줍니다. 

$ sudo /etc/init.d/oracle-xe configure 

 

Specify the HTTP port that will be used for Oracle Application Express [8080]:


 오라클 데이타베이스 홈페이지에 접속할 포트 번호를 물어보는 것입니다. 그냥 디폴트로 설정해 줍니다. Enter 

 Specify a port that will be used for the database listener [1521]:


   유명한 오라클의 포트 번호지요? Enter 눌러서 설정해줍니다. 
   

   Specify a password to be used for database accounts.  Note that the same
   password will be used for SYS and SYSTEM.  Oracle recommends the use of 
   different passwords for each database account.  This can be done after 
   initial configuration:
   Confirm the password:


SYS 나 SYSTEM 의 비밀번호 설정에 관한 질문입니다. 걍 기억하기 편하게 , root 라고 입력하죠 한번 더 입력하는 부분이 있으니 똑같이 root 로 입력해 주죠.

 Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]:


시작할 때 오라클 데이타베이스를 띄울 것인가에 관한 질문입니다. y 를 입력해줍니다. 

매우 쉽게 오라클 설정이 끝났습니다. 역시 진리의 우분투(Ubuntu) 입니다. 
잘 설치되었는지 확인을 해 줘야 겠지요? 

웹브라우져를 열고 "http://127.0.0.1:8080/apex" 를 입력해 줍니다. 잘 나오시나요? 

만약 안나오신다면 

 $ sudo /etc/init.d/oracle-xe force-reload 

 
한번 실행시켜주시면 됩니다. 

또 다른 이슈? 만약 톰캣 하고 충돌이 일어난다면 

 
 저는 이러한 그림이 뜨는군요. 톰캣이 8080 포트를 점유하고 있어서 그렇습니다. 
   
 /etc/tomcat6/server.xml 파일을 열어줍니다. 그리고 다음과 같은 부분을 찾아줍니다. 

<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               URIEncoding="UTF-8"
               redirectPort="8443" />


그리고 8080 을 다른 값으로 바꿔줍니다. 8008 이 괜찮겠군요. 수정했으면 저장하고 빠져나와서 톰캣을 재시작 해줍니다. 

 $ sudo /etc/init.d/tomcat6 restart


톰캣을 재시작 해주고 

 

 $ sudo /etc/init.d/oracle-xe force-reload 


를 실행시켜주시면 됩니다.
 

 
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))




이번에 카본 이맥스로 바꾸면서 이맥스가 독자적으로 쓰고 있는 한글 변환 체계를 못 쓰게 되더군요. 쉽게 말하자면 한글을 쓰고 싶어서 OS 상에서 한글로 바꾸면 카본 이맥스도 따라서 바뀌게 되어 있습니다. 그래서 기존의 한/영 전환을 위해서 설정해 둔 사항들을 꺼 줄 필요가 있습니다. 

기존 .emacs 에 쓰여져 있는 한글 관련 내용들을 다음과 같이 전부 주석처리 해줍니다.  

;;  (set-language-environment "Korean")
  
;;  (setq default-input-method "korean-hangul390")
;;  (setq default-korean-keyboard "3")

;;  (global-set-key [?\S- ] 'toggle-input-method)

 

위처럼 바꾸어 주고 저번 포스팅 에서 설정해준 Shift+Space 로 한영전환하게 해주면 , 이맥스상에서도 Shift+Space 로 한/영 전환이 이루어 집니다. 

 

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



요즘들어서 아쿠아맥스(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



원문 링크: 클릭


 

 
 
항상 빌어먹을 맥이라고 부르지만, 맥북이 편한 것 중에 한가지는 개발 환경 세팅하는 것이 편하다는 장점일 듯합니다. 물론 리눅스(우분투) 만큼 편하지는 않지만, 각기의 장점이 있습니다. 

우부투는 설치가 편합니다. 항상 마법의 커맨드인 apt-get 을 이용해서 설치 할 수가 있습니다. 반면에 맥북계열은 이미 설치가 되어 있는 경우가 많습니다. 이번에 알아볼 php 도 역시 설치가 미리 되어 있습니다.

아파치를 구동시켰다는 가정하에

/etc/apache2/httpd.conf

파일을 오픈해서

#LoadModule php5_module        libexec/apache2/libphp5.so 



이부분을 찾아서 앞의 # 부분을 제거해주고 아파치를 리스타트 해주면 됩니다.

sudo /usr/sbin/apachectl restart



일반적인 리눅스(우분투) 와 조금 다르지요?

(sudo /etc/init.d/apache2 restart ) <--  이게 리눅스 방식입니다. 

이렇게만 해주면 바로 php 프로그래밍이 가능해집니다.

조금 추가를 하자면 MYSQL 설정을 해줘야 합니다. 기본적으로 OSX 에서는 리눅스와는 달리 mysql 소켓을 다른걸 쓰기 때문입니다. 

cd /etc
sudo cp php.ini.default php.ini
sudo chmod 666 php.ini
php.ini 를 쓸 수 있게 바꾸어 줍니다. 

그리고 php.ini 파일을 열어서 다음과 같이 수정해 줍니다. 

pdo_mysql.default_socket=/tmp/mysql.sock
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock
  /var/mysql/mysql.sock 으로 되어 있는 부분을 지우고 /tmp/mysql.sock 으로 바꾸어 주면 됩니다. 

그리고 당연히 아파치는 리스타트 해주셔야 합니다.

 

sudo /usr/sbin/apachectl restart




쉘 프로그래밍을 하다보면 종종 발생하는 경우가 윈도에서 작성한 파일을 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+ 입니다) \#& 는 \& 와 # 을 합친 것 인데요. \& 는 찾은 정규표현식 전체를 의미하고 # 은 찾은 문자열을 숫자로 변환하라는 뜻입니다. 


 

+ Recent posts