zsh でキョンと長門のチャットを

なんとなく暑さで頭がやられたのか作りたくなった.
全く分からない, zshシェルスクリプトで.
まあ, replore的日記 -どうやら気が触れたらしい.. を見て作りたくなったんだけどw
かなーり汚いソースになっちゃったけど, まあいいや, ブログにのっけてみる.
問題がいっぱいw



これを, .zshrc に書いてやる.
すると, 次から, zsh を起動する度に,
キョン長門のチャット, あの最終回のやつがはじまる.
その後は, M-x nagato で見ることができる.


当然だけど, 自分は, zshスクリプトをよく知らないので, バグが多々あると思う.
気に入らない動作もあるし・・・.
これを試してみようという人は, そこらへん,
何かまずいことがあるかもという了解の元試してみてください.

############################################################
## .zshrc に直接記述して, M-x nagato で起動
############################################################

zle -N nagato
function nagato {
    emulate -L zsh
    if ! zle ; then
        print -u2 "Use M-x nagato RET to watch nagato and kyon's chat."
        return 1
    fi
    clear
    nagato-main
}

function nagato-main {
    # 長門有希のセリフ
    local nagato1="YUKI.N>見えてる?"
    local nagato2_1="YUKI.N>そっちの空間とは"
    local nagato2_2="まだ完全には連結を絶たれていない。"
    local nagato2_3="でも時間の問題。"
    local nagato2_4="そうなれば最後。"
    local nagato3_1="どうにもならない。"
    local nagato3_2="情報統合思念体は失望している。"
    local nagato3_3="これで進化の可能性は失われた。"
    local nagato4_1="涼宮ハルヒは"
    local nagato4_2="何もない所から"
    local nagato4_3="情報を生み出す力を"
    local nagato4_4="持っていた。"
    local nagato4_5="それは情報統合思念体にも"
    local nagato4_6="ない力。"
    local nagato4_7="この情報創造能力を解析すれば"
    local nagato4_8="自律進化への糸口が"
    local nagato4_9="つかめるかもしれないと考えた。"
    local nagato5_1="YUKI.N>あなたに賭ける。"
    local nagato6_1="もう一度こちら回帰することを"
    local nagato6_2="我々は望んでいる。"
    local nagato6_3="涼宮ハルヒは重要な観察対象。"
    local nagato6_4="わたしという個体も"
    local nagato6_5="あなたには戻ってきて欲しいと感じている。"
    local nagato7_1="YUKI.N>また図書館に"
    local nagato8_1="YUKI.N> sleeping beauty"
    # YUKI.N> が頭につかないものの頭に必要な空白
    local nagato_sp="       "
    # キョンのセリフ
    # nagato1  が終了後
    local kyon1="ああ"
    # nagato2_4 が終了後
    local kyon2="どうすりゃいい?"
    # nagato5_1 が終了後
    local kyon3="何をだよ"

    nagato_print ()
    {
        local message=$1
        # set waiting time
        if [[ $message[0] == "Y" ]] then
            local time=0.1
        else
            local time=0.03
            printf $nagato_sp
        fi
        for (( count=1; count<=$#message; count+=1 ))
        do
            # print message
            printf $message[$count]
            sleep $time
            # After “>” is, Japanese. exception exist.
            if [[ $message[$count] == ">" ]] then
                if [[ $message[$count+1] != " " ]] then
                    local time=0.03
                fi
            fi
        done
        # linefeed
        echo ''
    }

    kyon_print ()
    {
        local message=$1
        local time=0.03
        for (( count=1; count<=$#message; count+=1 ))
        do
            # print message
            printf $message[$count]
            sleep $time
        done
        # linefeed
        echo ''
    }

    # 実際に実行. 力技. もっと上手くできたろうに・・・.
    # 画面を綺麗に.
    clear
    nagato_print $nagato1
    kyon_print $kyon1
    nagato_print $nagato2_1
    nagato_print $nagato2_2
    nagato_print $nagato2_3
    nagato_print $nagato2_4
    clear
    sleep 0.5
    kyon_print $kyon2
    clear
    sleep 0.5
    nagato_print $nagato3_1
    nagato_print $nagato3_2
    nagato_print $nagato3_3
    clear
    nagato_print $nagato4_1
    nagato_print $nagato4_2
    nagato_print $nagato4_3
    nagato_print $nagato4_4
    nagato_print $nagato4_5
    nagato_print $nagato4_6
    nagato_print $nagato4_7
    nagato_print $nagato4_8
    nagato_print $nagato4_9
    clear
    sleep 0.5
    nagato_print $nagato5_1
    clear
    sleep 0.5
    kyon_print $kyon3
    clear
    sleep 0.5
    nagato_print $nagato6_1
    nagato_print $nagato6_2
    nagato_print $nagato6_3
    nagato_print $nagato6_4
    nagato_print $nagato6_5
    clear
    sleep 0.5
    nagato_print $nagato7_1
    clear
    sleep 1.5
    nagato_print $nagato8_1
}
nagato-main

ソース汚ねえ.
もっとスマートにまとめられるはず.
でも, 面倒になって放置. 駄目だねえ.
# zsh の記述法を調べるのにいいかげん飽きてきちゃったんだ・・・. 情報でないし, 英語ばっかだし.


やりたいこととか.

  1. M-x nagato で起動するとキー入力をシャットアウトしてる.
    それで, それを zsh 起動時に表示する場合でもしたいんだけど, どうにもできない.
  2. M-x nagato で起動したとき, キー入力シャットアウトが C-c だけ, どうもできない.
    tetris はできてるのに.

本当は, M-x nagato すると, シェルが終了するようにしたかったけど, それがどうにも・・・上手くいかなくてやめた.
まあ, しょうがない.
普通に exit したら大変なことになったしw
# プロンプトがループしたw



どう考えても Ruby とか C で書いた方が楽だったなあw
また, 気が向いたら挑戦してみよう. 少くともソースは綺麗にしたい・・・.

更新時刻

2007年, 8月6日, 3:47