2015-12-29 2 views
2

В моей программе Elm я хотел бы иметь несколько быстрых клавиш. Теперь у меня есть ярлык 'd', который делает то, что я хочу, но я хочу, чтобы комбинация клавиш была alt + d.Elm keyboard cominating shortcut

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 сигнал, отраженный сигнал Bool, чтобы проверить, если альт нажата или нет.

Мне не удалось допустить, чтобы комбинация работала.

Я новичок в Elm, поэтому любое объяснение приветствуется. Спасибо большое!

ответ

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: Я расширил этот пример, чтобы показать сопоставление этого исходного логического сигнала с одним из ваших действий. –

Смежные вопросы