キーを押したときに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か?

EDIT2:

うまくいくようですが、

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.0forMicrosoft Windows(64ビット)(2018年3月7日)」