懶人總是要碰到需求了,才會有所行動與長進。

剛剛在 #happydesigner 上被 whiteg 抱怨看不到我的中文,所以趕緊真的去把 irssi with big5/utf8 recode 設好。

此時 wiki.newzilla.org 掛點中,因此看不到其 HowToIRCMiniHowtoUTF8,因此只好求教咕狗大神,找到這篇:《irssi UTF-8 Big5 中文轉換與設定》。這篇比 MiniHowToUTF8 寫的清楚簡單,應該是因為部份環境我已經具備的的緣故。以下整理重點:


首先,我們不必辛苦地編輯 ~/.irssi/config,irssi 會依據使用時所下的指令,自動更新 config 檔。所以,~/.irssi/config 的格式,我們不需要研究,記好下列指令的用法即可:

設定 IRC 網路與伺服器

IRC 裡,是由許多個 IRC 伺服器 (server) 分散地串在一起,形成 IRC 網路 (network)。一個 IRC 網路裡面,有著許多的頻道 (channel),只要是在同一個 IRC 網路裡的人,就可以在其中的頻道裡,互相聊天。

因此,我們需要設定我們有哪些 IRC 網路。目前常見的 IRC 頻道,多位於 ircnetfreenode 上。因此,我們主要把這兩個 IRC 網路加上去。

/NETWORK ADD -kicks 4 -msgs 1 -modes 4 -whois 1 ircnet
/NETWORK ADD -kicks 4 -msgs 1 -modes 4 -whois 1 freenode

並設定我們要藉由哪些 IRC 伺服器,連上 IRC 網路。使用 -auto 我們可以在一進入 irssi 時,就連上這台 IRC 伺服器。使用 -network 則可以讓 irssi 知道,這台 IRC 伺服器,可以用來連上哪一個 IRC 網路。

/SERVER ADD -auto -network ircnet   irc.seed.net.tw
/SERVER ADD -auto -network freenode asimov.freenode.net

設定 IRC 頻道與聊天記錄

設定好 IRC 網路與伺服器之後,我們就可以設定要加入哪些聊天頻道:

/CHANNEL ADD -auto #bsdchat       ircnet
/CHANNEL ADD -auto #elixus        ircnet
/CHANNEL ADD -auto #tkucs         ircnet
/CHANNEL ADD -auto #coscup        ircnet
/CHANNEL ADD -auto #osdc.tw       freenode
/CHANNEL ADD -auto #happydesigner freenode
/CHANNEL ADD -auto #cpp-tw        freenode
/CHANNEL ADD -auto #boost         freenode
/CHANNEL ADD -auto #svk           freenode
/CHANNEL ADD -auto #svn           freenode

在 IRC 裡,頻道名稱前面會有個井字號,好比說 #bsdchat。指令裡的 -auto 可以讓我們在一開啟 irssi 時,就連上該頻道。在頻道後面的參數,則是說明該頻道要到哪個 IRC 網路上去找。如果我們在 freenode 連 #bsdchat,可是會找不到人的喔。

接著,我們會希望,在 IRC 裡面的聊天內容,可以被 irssi 自動記錄下來。畢竟,通常在裡面可以遇見許多高手,然後獲得許多有用的資訊。

/LOG OPEN -autoopen -targets #bsdchat       ~/logs/irc-bsdchat-%Y%m%d
/LOG OPEN -autoopen -targets #elixus        ~/logs/irc-elixus-%Y%m%d
/LOG OPEN -autoopen -targets #tkucs         ~/logs/irc-tkucs-%Y%m%d
/LOG OPEN -autoopen -targets #coscup        ~/logs/irc-coscup-%Y%m%d
/LOG OPEN -autoopen -targets #osdc.tw       ~/logs/irc-osdc.tw-%Y%m%d
/LOG OPEN -autoopen -targets #happydesigner ~/logs/irc-happydesigner-%Y%m%d
/LOG OPEN -autoopen -targets #cpp-tw        ~/logs/irc-cpp-tw-%Y%m%d
/LOG OPEN -autoopen -targets #boost         ~/logs/irc-boost-%Y%m%d
/LOG OPEN -autoopen -targets #svk           ~/logs/irc-svk-%Y%m%d
/LOG OPEN -autoopen -targets #svn           ~/logs/irc-svn-%Y%m%d

/SET autolog_path ~/logs/irc-$tag-$0-%Y%m%d

雖然參數名稱不同,和功能和上面一樣,利用 -autoopen 我們可以在一進入 irssi 時,就自動開啟聊天記錄。使用 -targets 可以指定這個聊天記錄要記錄哪些頻道的內容,理論上可以同時設多個頻道,好比說我們可以另外把所有頻道的聊天內容,都記錄在 ~/logs/irc-all 檔裡。最後一個參數,就是聊天記錄的檔名。可以使用 strftime() 的格式參數,讓 irssi 自動依據時間擇定檔名。如設定成 ~/logs/irc-bsdchat-%Y%m%d 的話,在 2006-12-18 這天的聊天記錄的檔名,就會是 ~/logs/irc-bsdchat-20061218

設定 recode 讓 irssi 自動依據頻道,幫我們轉換 Big5/UTF-8

Irssi 可以自動幫我們轉碼,讓我們可以同時存取不同編碼的 IRC 頻道。不過,由於 UTF-8 是 Unicode,可以包容萬物,所以我們還是必須得處於 UTF-8 環境下,才有辦法享受到真正的 Big5/UTF-8 共榮的環境。否則,若是處於 Big5 的環境,無論 irssi 的自動轉碼再怎麼強,我們還是只有可能看到 big5 能夠顯現的字。

幸好,UTF-8 環境差不多已經都沒有什麼問題了,大家可以參考我這篇久未整理的舊文《建構 UTF-8 的 UNIX 環境》所收集到的資料,設定好自己的 UTF-8 環境。不過,如果您沒有完整的 UTF-8 環境,也是沒有關係的。只要您的 terminal 軟體,有支援 UTF-8 的顯示與輸入即可。

在 Windows 上,我們可以用 PuTTY,或其中文加強版 PieTTY,在設定頁面的 Window -> Translation 裡,將 "Received data assumed to be in which character set" 設成 UTF-8 即可。或者,如果您有使用 screen,則請記得把要用來跑 irssi 的那個視窗,切成 utf8 模式

接著,我們用 zh_TW.UTF-8 跑 irssi。如果您有設定好 UTF-8 環境的話,直接跑 irssi 即可。否則,請如下啟動 irssi:

SHELL> env LC_ALL=zh_TW.UTF-8 irssi

如果不是 UTF-8 環境的話,我們可以設 alias 以避免每次都要靠 env 啟動 irssi。請把下面這一行,加入到您的 ~/.cshrc 裡,這樣一來,下次就可以直接用 UTF-8 環境啟動 irssi 了。

alias irssi 'env LC_ALL=zh_TW.UTF-8 irssi'

第一次使用 UTF-8 環境啟動 irssi 之後,我們用以下指令,讓 irssi 知道我們的執行環境,用的是 UTF-8:

/SET term_charset UTF-8 

然後,我們用以下指令,啟動並設定 irssi 的 recode 功能。

/SET recode_transliterate       ON
/SET recode_fallback            Big5
/SET recode_out_default_charset UTF-8

接著,我們就可以用 recode 功能,設定並讓 irssi 記住每一個頻道所使用的編碼為何。在我常上的 IRC 頻道裡,freenode 的頻道大都是使用 UTF-8,而 ircnet 的頻道則多半使用 big5。因此,我們如此下指令:

/RECODE ADD #bsdchat       Big5
/RECODE ADD #elixus        Big5
/RECODE ADD #tkucs         Big5
/RECODE ADD #coscup        Big5
/RECODE ADD #osdc.tw       UTF-8
/RECODE ADD #happydesigner UTF-8
/RECODE ADD #cpp-tw        UTF-8
/RECODE ADD #boost         UTF-8
/RECODE ADD #svk           UTF-8
/RECODE ADD #svn           UTF-8

最後,我們離開 irssi 再重新進入,就可以擁有 Big5/UTF-8 皆無往不利的 IRC 環境。


2006-12-19 更新:高手的指點:

07:44 <@c*> jeffhung: #0 可以記錄 channel name
07:44 <@c*> irc-$0-%Y%m%d
07:44 <@c*> $0, not #0 XD sorry
07:45 <@S*> 可以用 /set autolog_path ~/.irssi/irclog/$tag.$0.%Y.%m
07:46 <@S*> 這樣每個頻道一個月一個 log 檔案


2012-04-29 更新:增加 freenode 設定:

在 freenode 可以註冊以認證並擁有專用的 nickname,步驟如下:

首先,先搶到想用的 nickname 後,向 NickServ 註冊:

/nick jeffhung
/msg -freenode nickserv REGISTER <password> <email>

NickServ 會寄一封確認信給你,信裡面會含一個確認用的暗碼,照著信裡的說明,向 NickServ 發訊息以確認身分:

/msg -freenode nickserv VERIFY REGISTER <nickname> <verify-code>

為了不要讓註冊的 email 被公開,要啟用 hidemail

/msg -freenode nickserv SET hidemail on

設定完畢之後,以後登入 IRC 便可以用下列指令與 NickServ 認證,以證明這個 nickname 真的屬於自己:

/msg -freenode nickserv IDENTIFY <password>

或者設定 IRSSI 在進入 freenode 時自動發送上面的指令:

/NETWORK ADD -kicks 4 -msgs 1 -modes 4 -whois 1 -autosendcmd "/msg nickserv identify <password> ;wait 2000" freenode

以上程序在 irssi 裡會開新視窗 (因為與 NickServ 互傳訊息),內容大致如下:

11:09 -!- Irssi: Starting query in freenode with nickserv
11:09 <jeffhung> register your.password your@email.address
11:09 -NickServ(NickServ@services.)- An email containing nickname activation instructions has been sent to your@email.address.
11:09 -NickServ(NickServ@services.)- If you do not complete registration within one day, your nickname will expire.
11:09 -NickServ(NickServ@services.)- jeffhung is now registered to your@email.address, with the password your.password.
11:09 -NickServ(NickServ@services.)-  
11:09 -NickServ(NickServ@services.)- freenode is a service of Peer-Directed Projects Center, a
11:09 -NickServ(NickServ@services.)- not-for-profit organisation registered in England and Wales.
11:09 -NickServ(NickServ@services.)- For frequently-asked questions about the network, please see the
11:09 -NickServ(NickServ@services.)- FAQ page (http://freenode.net/faq.shtml). Should you wish to
11:09 -NickServ(NickServ@services.)- support the PDPC you can contribute to our current fundraiser at
11:09 -NickServ(NickServ@services.)- http://freenode.net/pdpc_donations.shtml.
11:10 <jeffhung> VERIFY REGISTER jeffhung verify.code
11:10 -NickServ(NickServ@services.)- jeffhung has now been verified.
11:10 -NickServ(NickServ@services.)- Thank you for verifying your e-mail address! You have taken steps in ensuring that your 
          registrations are not exploited.
11:14 <jeffhung> set hidemail on
11:14 -NickServ(NickServ@services.)- The HIDEMAIL flag is already set for account jeffhung.
11:17 <jeffhung> identify your.password
11:18 -NickServ(NickServ@services.)- You are already logged in as jeffhung.

最後,當然要記得叫 irssi 把以上設定存下來,下次再開的時候才會發生作用:

/SAVE