At the very least, I'd love to see cP make a comeback so that it's possible to send Pattern data from SuperDirt. The old implementation looked like this:
_cP :: (Enumerable a, Parseable a) => [Pattern a] -> String -> Pattern a
_cP ds s = innerJoin $ _cX f ds s
  where f a (VI v) = [Event a a (parseBP_E $ show v)]
        f a (VF v) = [Event a a (parseBP_E $ show v)]
        f a (VS v) = [Event a a (parseBP_E v)]
cP :: (Enumerable a, Parseable a) => Pattern a -> String -> Pattern a
cP d = _cP [d]
cP_ :: (Enumerable a, Parseable a) => String -> Pattern a
cP_ = _cP []
I've been looking at the new implementation of cF and trying to figure out how to port this to modern TidalCycles, but so far no dice.
Once upon a time I used a keyboard, along with the following code, to create arp Patterns and chords in TidalCycles based on the keys that were held down. Would be nice to be able to do that again- it seems my TidalCycle MIDI video is a bit out of date.
	(
		// here's the bit that sends MIDI data from all controllers to TidalCycles via OSC
		MIDIClient.init;
		MIDIIn.connectAll;
		~tidalSocket = NetAddr("127.0.0.1", 6010);
		e.notes=[];
		MIDIFunc.cc({|val, num, chan, src| ~tidalSocket.sendMsg('/ctrl', num, val/127.0);}, nil, nil, nil);
		MIDIFunc.noteOn({|veloc, num, chan, src| e.notes=e.notes.add(num); e.notes=e.notes.sort({|a,b| a>b}).reverse; ~tidalSocket.sendMsg('/ctrl', "notes", format("%", e.notes-60)); e.notes.postln;});
		MIDIFunc.noteOff({|veloc, num, chan, src| e.notes=e.notes.takeThese({|x| x==num}); ~tidalSocket.sendMsg('/ctrl', "notes", format("%", e.notes-60)); e.notes.postln;});
	);
