summaryrefslogtreecommitdiffstats
path: root/defaultGetCommand.hs
blob: b82f2cef79c860ead2ae3eced4274b687f036e6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33




defaultGetCommand :: IO Command
defaultGetCommand = do
    c1 <- getChar
    case c1 of
      '\x1b' -> do
        c2 <- getChar
        case c2 of
          '[' -> do
            c3 <- getChar
            case c3 of
              'C' -> return MoveCursorRight
              'D' -> return MoveCursorLeft
              '3' -> do
                c4 <- getChar
                case c4 of
                  '~' -> return KillNextChar
                  _ -> return $ AlertBadInput (c1:c2:c3:c4:[])
              _ -> return $ AlertBadInput (c1:c2:c3:[])
          _ -> return $ AlertBadInput (c1:c2:[])
      _ ->
        if isPrint c1
          then return $ InsertChar c1
          else
            case ord c1 of
              22 -> return InsertNextCharVerbatim
              23 -> return KillLastWord
              10 -> return ExecuteInputBuffer
              127 -> return KillLastChar
              _ -> return $ AlertBadInput (c1:[])