2011년 3월 25일 금요일

[Emacs] 유용한 ERC 설정 몇 가지

ERC는 Emacs에서 구동되는 IRC 클라이언트 모듈입니다. Emacs 23 버전부터 Emacs 기본 lisp 꾸러미에 포함되어 있기 때문에 다운로드하거나 설치하는 과정 없이 설정만 몇 가지 변경해주면 Emacs에서도 쉽게 IRC 채팅을 할 수 있습니다. 대부분의 ERC 관련 설정은 Customize Group을 통해 변경이 가능합니다.

M-x customize-group RET erc RET

그리고, 기본적인 설정 외에 제가 사용하는 것 중 유용하다고 생각되는 몇 가지를 정리해보았습니다.

서버 별 접속 함수 만들기

주로 IRC 네트워크 단 한 곳만 찾는 사람이라면 그냥 ERC 기본 설정에 서버와 닉을 지정해놓으면 되지만, 둘 이상의 네트워크에 접속할 일이 잦다면 각 네트워크 별로 접속 함수를 만들어두는 편이 더 편리합니다. 아래는 Freenode, HanIRC, 오징어 IRC 세 곳에 대한 코드 예입니다. (주의: Freenode는 NickServ가 있으므로 :password 필드에 닉 인증용 암호를 줄 수 있지만, HanIRC와 오징어 IRC는 다른 방법을 사용해야 합니다. 그 부분은 다음 단락에 다시 설명합니다.)

;; Freenode Network
;; NickServ: /msg NickServ identify PASSWD
;; ChanServ: /msg ChanServ help
(defun irc-connect-freenode ()
  "connect to freenode IRC server"
  (interactive)
  (erc-tls :server "irc.freenode.net"
           :port 7000
           :nick "MyNick"
           :password "MyPassword"
           :full-name "My Full Name"))

;; HanIRC Network
;; NickServ: /msg ^^ login NICK PASSWD
;; ChanServ: /msg ChanServ help
(defun irc-connect-hanirc ()
  "connect to HanIRC server"
  (interactive)
  (erc :server "irc.hanirc.org"
       :port 6667
       :nick "MyNick"
       :full-name "My Full Name"))

;; Ozinger Network
;; NickServ: /msg 오징오징어 identify PASSWD
;; ChanServ: /msg ㅇㅈㅇ help
(defun irc-connect-ozinger ()
  "connect to Ozinger IRC server"
  (interactive)
  (erc :server "irc.ozinger.org"
       :port 6667
       :nick "MyNick"
       :full-name "My Full Name"))

HanIRC와 오징어 IRC 닉(nick) 자동 인증

HanIRC와 오징어 IRC는 닉 인증을 위해 NickServ 대신 다른 방식을 사용하기 때문에 기본 설정만으로는 닉 자동 인증을 할 수 없습니다. 대신, erc-after-connect hook을 사용하여 닉 인증이 자동으로 되도록 설정해줄 수 있습니다.

(add-hook 'erc-after-connect
          '(lambda (SERVER NICK)
             (cond
              ;; hanirc
              ((string-match "hanirc\\.org" SERVER)
               (erc-message "PRIVMSG"
                            (concat "^^ login "
                                    "MyHanIRCNick" " "
                                    "MyHanIRCPassword")))
              ;; ozinger
              ((string-match "ozinger\\.org" SERVER)
               (erc-message "PRIVMSG"
                            (concat "오징오징어 identify "
                                    "MyOzingerPassword")))
              )))

알림(notice) 메시지 관련 설정

알림 메시지가 왔을 때 미니 버퍼에 보여주고, 현재 활성화되어 있는 채널 버퍼에도 그 내용을 보여주도록 설정합니다. 알림 메시지를 놓치지 않도록 도와주는 매우 유용한 설정입니다.

(setq erc-echo-notices-in-minibuffers-flag t)
(add-hook 'erc-echo-notice-hook 'erc-echo-notice-in-active-buffer)

mIRC 색상(color) 보여주기

메시지에 포함된 색상 코드를 해석해서 그 색상과 스타일을 표시해줍니다.

(setq erc-interpret-mirc-color t)

채널(channel) 자동 입장(join)

서버에 접속할 때마다 자동으로 특정 채널에 입장하도록 설정해줄 수 있습니다. 이 설정은 erc-modules list 내에 autojoin이 포함되어 있어야 작동합니다. 즉, autojoin 모듈을 활성화해두어야 합니다. -- 이 글 처음에 언급했던 Customize Group ERC 파트에서 활성화 모듈을 선택할 수 있습니다.

(setq erc-autojoin-channels-alist
      (quote (
        ("freenode.net" "#abc"
                        "#def")
        ("hanirc.org" "#channel1"
                      "#channel2")
        ("ozinger.org" "#chn1"
                       "#chn2")
        )))

닉(nick)마다 고유 색상 부여하기

닉에 고유한 색상을 부여해서 닉 별 대화 내용을 쉽게 구분할 수 있도록 도와주는 기능입니다. 이 기능을 사용하기 위해서는 erc-highlight-nicknames.el 파일이 필요한데, 아래 주소에서 받을 수 있습니다. 물론 자세한 설명도 함께 제공됩니다.

LINK: EmacsWiki: ErcHighlightNicknames

위 주소에서 erc-highlight-nicknames.el 파일을 받아 site-lisp과 같이 load-path에 포함된 적절한 폴더에 복사해넣습니다. 또는 load-path에 이 파일이 위치한 경로를 추가해도 됩니다. 그런 다음 아래 코드를 설정에 추가하면 됩니다.

(require 'erc-highlight-nicknames)
(and
     (require 'erc-highlight-nicknames)
     (add-to-list 'erc-modules 'highlight-nicknames)
     (erc-update-modules))

오징어 IRC 네트워크 접속 오류

ERC를 통해서 오징어 IRC 네트워크에 접속했는데 'USER: not enough parameters' 오류 메시지를 보여주더니 잠시 후 끊어지더군요. ERC 설정도 바꿔보고 소스도 좀 뒤져보고 해서 겨우 이유를 알아낸 다음에는 사실 좀 허탈했습니다.

일단 해결 방법은 erc-anonymous-login 값을 nil로 설정해주는 것입니다. (이 값을 nil로 설정하면 IRC 서버 연결됐을 때 닉 인증에 사용할 패스워드를 물어보는 프롬프트가 미니 버퍼 영역에 뜨는데, 그냥 엔터 키를 쳐서 넘어가면 됩니다.)

(setq erc-anonymous-login nil)

erc-login 함수 소스를 살펴봤더니 위 설정이 t로 되어 있으면 IRC 서버에 USER 명령을 보낼 때 첫 번째 파라미터로 닉(nick) 대신 이메일(email) 값을 보내도록 되어 있는데, 오징어 IRC 서버에서는 첫 번째 파라미터에 email 값이 주어지면 'USER: not enough parameters' 오류를 내는 것이었습니다.

USER MyNick 0 * My_Full_Name        --> OK
USER abc@def.net 0 * My_Full_Name   --> Error

댓글 없음:

댓글 쓰기