From 0c08919bfa9baebd69f8979dca876e27d2f9d672 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 18 Aug 2022 16:16:23 +0200 Subject: [PATCH] add codemirror + keyboard shortcuts --- packages/react/examples/nano-repl/src/App.jsx | 57 ++++++++++++++++--- 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/packages/react/examples/nano-repl/src/App.jsx b/packages/react/examples/nano-repl/src/App.jsx index c6cd52a1..7d950d2f 100644 --- a/packages/react/examples/nano-repl/src/App.jsx +++ b/packages/react/examples/nano-repl/src/App.jsx @@ -1,9 +1,12 @@ import controls from '@strudel.cycles/core/controls.mjs'; import { evalScope } from '@strudel.cycles/eval'; -import { webaudioOutput } from '@strudel.cycles/webaudio'; -import { useState } from 'react'; +import { getAudioContext, panic, webaudioOutput } from '@strudel.cycles/webaudio'; +import { useCallback, useState } from 'react'; import useScheduler from '../../../src/hooks/useScheduler'; import useEvaluator from '../../../src/hooks/useEvaluator'; +import useKeydown from '../../../src/hooks/useKeydown.mjs'; +import CodeMirror, { flash } from '../../../src/components/CodeMirror6'; +import './style.css'; // import { prebake } from '../../../../../repl/src/prebake.mjs'; // TODO: only import stuff when play is pressed? @@ -68,15 +71,53 @@ function App() { const [code, setCode] = useState(defaultTune); const { evaluate, pattern, isDirty, error: evaluatorError } = useEvaluator({ code }); const { scheduler, error: schedulerError } = useScheduler(pattern, webaudioOutput); + const [view, setView] = useState(); const error = evaluatorError || schedulerError; + useKeydown( + useCallback( + (e) => { + if (e.ctrlKey || e.altKey) { + if (e.code === 'Enter') { + e.preventDefault(); + flash(view); + evaluate(); + if (e.shiftKey) { + panic(); + scheduler.stop(); + scheduler.start(); + } + if (!scheduler.started) { + scheduler.start(); + } + } else if (e.code === 'Period') { + scheduler.pause(); + panic(); + e.preventDefault(); + } + } + }, + [scheduler, evaluate, view], + ), + ); return (
-