Переключить bool с False на True при нажатии клавиши?
Я хотел бы позволить логической переменной переключаться, когда я нажимаю клавишу на клавиатуре.
Например, я пишу
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, чтобы сфокусировать его.
Ответы
Использование 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 г.)»