Elm keyboard combination shortcut

In my Elm program I would like to have some keyboard shortcuts.

I have a shortcut d which does what I want, however, I want the key combination to be alt+d.

StartApp.start { 
    init = (emptyModel, Effects.none),
    view   = view, 
    update = update,
    inputs = [ Signal.map forwardKey Keyboard.presses]
    }

forwardKey : Int -> Action    
forwardKey keyCode =
  case (Char.fromCode keyCode) of
    'd' -> Add
    _ -> NoOp

I noticed that there is a keyboard.alt signal that returns Signal Bool to check if alt is pressed or not.

How can I apply change the shortcut from d to alt+d by using this signal?


See this answer to the same underlying question.

Note that it's going to be difficult to impossible to capture Alt-D since that's a common key combination used by browsers. For example, Chrome shifts focus to the address bar when you press Alt-D. For this reason, I'll revert to the example above and use Alt-0 as the chord here:

You can use map2 to create a new Boolean signal that tells if your key combination is pressed. We'll create a new signal called chordPressed like so:

chordPressed : Signal Bool
chordPressed =
  Signal.map2 (&&) Keyboard.alt (Keyboard.isDown <| Char.toCode '0')

Now, we need to convert that signal to an Action before we can pass it into the inputs list.

chordToAction : Signal Action
chordToAction =
  let
    toAction b =
      case b of
        True -> Add
        False -> NoOp
  in
    Signal.dropRepeats
      <| Signal.map toAction chordPressed

Now, you can pass chordToAction into the inputs list. Again, you might want to choose a key-chord that isn't going to be first caught by the browser, like Alt-D will.

inputs = [ chordToAction ]