Переключить bool с False на True при нажатии клавиши?

Aug 17 2020

Я хотел бы позволить логической переменной переключаться, когда я нажимаю клавишу на клавиатуре.

Например, я пишу

activateE := Block[{}, edown = True;];
SetOptions[EvaluationNotebook[], NotebookEventActions -> {{"KeyDown", "e"} :> activateE}]

а затем попытайтесь отслеживать нажатия клавиш через

edown = False;
Dynamic[edown]

Хотя eтеперь клавиша перестает вводить текст в блокнот, к сожалению, она Dynamicотображается всегда False, независимо от того, как часто я нажимаю клавишу e. Что я делаю не так, или как это сделать правильно?

РЕДАКТИРОВАТЬ:

В качестве альтернативы я пробую CurrentValueфункцию. Например,

Dynamic[CurrentValue["ModifierKeys"]]

правильно показывает, например, когда Ctrlклавиша нажата. Но если я попробую

Dynamic[CurrentValue["EventKey"]]

выход не Noneимеет значения, какую клавишу я нажимаю. Есть ли возможность CurrentValueрегистрировать обычное нажатие клавиши, например буквы e?

РЕДАКТИРОВАТЬ2:

Кажется, что работает

EventHandler[InputField[], {"KeyDown", "e"} :> activateE]

но только если я сначала щелкну InputField, чтобы сфокусировать его.

Ответы

4 kglr Aug 17 2020 at 00:22

Использование NotebookEventActionsс опцией PassEventsUp -> Trueдает желаемое поведение в версии 11.3 (Windows 10 - 64 бит):

ClearAll[activateE]
activateE:=  Block[{}, edown = True;];
SetOptions[EvaluationNotebook[], 
 NotebookEventActions -> {{"KeyDown", "e"} :> activateE, PassEventsUp -> True}]

Вариант: переключение между Falseи Trueпри нажатии eклавиши:

$Version

«11.3.0 для Microsoft Windows (64-разрядная версия) (7 марта 2018 г.)»