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