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

剛剛在 #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 檔案