Compare commits

...

4 Commits

5 changed files with 21 additions and 16 deletions

View File

@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to the
[Haskell Package Versioning Policy](https://pvp.haskell.org/).
## Unreleased
## [Unreleased]
## 0.1.0.0 - YYYY-MM-DD
## [0.1.0.1] - 2024-08-17
### Added
- added Emacs-style keybindings for cursor movement

View File

@ -67,8 +67,8 @@ effects:
### Edit Mode
- ESC: Return to display mode.
- Up/K: Move the cursor up.
- Down/J: Move the cursor down.
- Left/H: Move the cursor left.
- Right/L: Move the cursor right.
- Up/K/CTRL-P: Move the cursor up.
- Down/J/CTRL-N: Move the cursor down.
- Left/H/CTRL-B: Move the cursor left.
- Right/L/CTRL-F: Move the cursor right.
- F: Flip the bit under the cursor (1 becomes 0; 0 becomes 1).

View File

@ -5,9 +5,9 @@ cabal-version: 2.2
-- see: https://github.com/sol/hpack
name: hamming
version: 0.1.0
version: 0.1.0.1
synopsis: game/utility for teaching about Hamming codes
description: Please see the README on GitHub at <https://github.com/githubuser/hamming#readme>
description: Please see the README
category: Games
author: Jonathan Lamothe
maintainer: jonathan@jlamothe.net

View File

@ -1,5 +1,5 @@
name: hamming
version: 0.1.0
version: 0.1.0.1
license: AGPL-3.0-or-later
author: "Jonathan Lamothe"
maintainer: "jonathan@jlamothe.net"
@ -16,7 +16,7 @@ category: Games
# To avoid duplicated efforts in documentation and dealing with the
# complications of embedding Haddock markup inside cabal files, it is
# common to point users to the README.md file.
description: Please see the README on GitHub at <https://github.com/githubuser/hamming#readme>
description: Please see the README
dependencies:
- base >= 4.7 && < 5

View File

@ -24,7 +24,7 @@ License along with this program. If not, see
|-}
{-# LANGUAGE LambdaCase, OverloadedStrings #-}
{-# LANGUAGE OverloadedStrings #-}
module Hamming.App.Events (
eventHandler,
@ -47,7 +47,7 @@ import Brick.Keybindings
, onEvent
)
import Control.Monad (void)
import Control.Monad.State.Class (get, gets, modify, put)
import Control.Monad.State.Class (gets, modify, put)
import Data.Either (fromRight)
import Graphics.Vty.Input.Events
( Event (EvKey)
@ -95,10 +95,7 @@ keyEventHandlers =
, onEvent CheckBitsEvent "Set Check Bits" $
hammingCode %= setCheckBits
, onEvent FixCodeEvent "Attempt to Correct Errors" $
zoom hammingCode $ get >>= \case
Nothing -> return ()
Just c -> put c
. correctErrors
zoom hammingCode $ gets correctErrors >>= mapM_ put
, onEvent ResetEvent "Reset Code" $
hammingCode .= 0
]
@ -153,21 +150,25 @@ keyBindingsFor m = coreBindings ++ case m of
, ( UpEvent
, [ bind KUp
, bind 'k'
, ctrl 'p'
]
)
, ( DownEvent
, [ bind KDown
, bind 'j'
, ctrl 'n'
]
)
, ( LeftEvent
, [ bind KLeft
, bind 'h'
, ctrl 'b'
]
)
, ( RightEvent
, [ bind KRight
, bind 'l'
, ctrl 'f'
]
)
, ( FlipBitEvent