2015-12-29 61 views
2

在我的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 

我注意到,他们是返回信号布尔检查是否按下ALT一个keyboard.alt信号。

我还没有成功让组合工作。

我是新来的榆树,所以任何解释都是值得欢迎的.. 非常感谢!

回答

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') 

现在,我们需要将该信号转换成行动之前,我们可以通过它进入inputs列表。现在

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

,你可以通过chordToActioninputs列表。同样,你可能想要选择一个不会被浏览器首先捕获的键和弦,就像Alt-D一样。

inputs = [ chordToAction ] 
+0

你能告诉我如何使用它吗?我应该把它放在输入数组中吗?我如何在我的forwardKey方法中访问新的布尔值?如果forwardKey方法不需要,我如何确定我的键盘组合的动作?对不起,麻烦...并且谢谢! – Thibault

+0

@Thibault:我已经扩展了该示例以显示从原始布尔信号到您的某个操作的映射。 –