Haskell -- brick を使ってみる 5

brick と 私が開發してゐた kdbtl を組み合はせた

kdbtlB

コードは github に載せてゐる

github.com

appEvent のところだけ

appEvent :: BrickEvent Name CustomEvent -> EventM Name St ()
appEvent e =
    case e of
        VtyEvent (V.EvKey V.KEsc []) -> halt
        VtyEvent (V.EvKey V.KEnter []) -> do
          st <- use state
          ed <- use edit
          let con = E.getEditContents ed
              com = unlines con
              s' = exeCom com st
          case s' of
            Nothing -> stlog %= (++"Error!")
            Just js -> state .= js
          cmlog %= (++com)
          edit .= E.editor Edit (Just 1) ""
          vScrollToEnd cmScroll
        AppEvent Logstate -> do
          st <- use state 
          let nst = doWithTime st
          state .= nst 
          if (st/=nst) then stlog %= (++(show nst)++"\n") else return ()
          vScrollToEnd vpScroll
        ev -> zoom edit $ E.handleEditorEvent ev 

なんか よく見ると そのままなので 説明することもないか〜
途中 カーソル位置を動かしたかったのだけど よく分からなかった
エンターキーは かうやって 処理を書くと
もともとの エンターキーの擧動がなくなって 次の行とかに行かなくなる
カーソル位置の取得は E.getCursorPosition で できるんだけど
たぶん それを使ふには
カーソル位置の情報を 状態(St) に追加したり 名前をつけたりして
そんで drawUI のなかで使ふ必要があるのかなーって思った
カーソル処理が分からなかったんで
エンターを押したら エディタを初期化して 書いたコマンドは コマンドログとして
上部に表示させるやうにした
スクロールは前回實現したけど ホント最初は どうやるんだか分からなかったな〜
ひとことで言へば ViewportScrollといふ型の要素をつくって(名前も使って)それに
vScrollToEnd 函數とかを適用すれば 行の最後までスクロールされるやうになる みたいな

ただ この短期間でここまでの世界を見せてくれた brick は すごいと思ふ
なんか twitter で いいねをつけてくれた 開發者さんがゐたみたいだから 書いておかう
Brick Is Great!!! Thank You! I'm still a biginner but with Haskell, someday I'll make an EPIC game!