在我的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是否被按下。
我没有成功让这个组合起作用。
我是榆树的新人,所以欢迎任何解释。 非常感谢!
答案 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 ]