榆树键盘命名快捷方式

时间:2015-12-29 17:06:24

标签: keyboard shortcut elm

在我的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信号,返回Signal Bool以检查alt是否被按下。

我没有成功让这个组合起作用。

我是榆树的新人,所以欢迎任何解释。 非常感谢!

1 个答案:

答案 0 :(得分:3)

See this answer to the same underlying question

请注意,捕获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列表中。同样,你可能想要选择一个不会被浏览器首次捕获的键和弦,比如Alt-D会。

inputs = [ chordToAction ]