Elm 键盘组合快捷键

Elm keyboard combination shortcut

在我的 Elm 程序中,我想要一些键盘快捷键。

我有一个快捷方式 d 可以满足我的需要,但是,我希望组合键为 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

我注意到有一个 keyboard.alt 信号 returns Signal Bool 检查是否按下了 alt。

如何使用此信号将快捷方式从 d 更改为 alt+d

.

请注意,要捕获 Alt-D 非常困难甚至不可能,因为这是浏览器使用的常见组合键。例如,当您按 Alt-D 时,Chrome 会将焦点转移到地址栏。出于这个原因,我将恢复到上面的示例并在此处使用 Alt-0 作为和弦:

您可以使用 map2 创建一个新的布尔信号,告知您的组合键是否被按下。我们将创建一个名为 chordPressed 的新信号,如下所示:

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

现在,我们需要将该信号转换为 Action,然后才能将其传递到 inputs 列表。

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

现在,您可以将 chordToAction 传递到 inputs 列表中。同样,您可能希望选择不会首先被浏览器捕获的 key-chord,例如 Alt-D 会。

inputs = [ chordToAction ]