My solution to prevent new lines (its for a custom search query input field):
cm.on("beforeChange", function(cm, changeObj) {
var typedNewLine = changeObj.origin == '+input' && typeof changeObj.text == "object" && changeObj.text.join("") == "";
if (typedNewLine) {
return changeObj.cancel();
}
var pastedNewLine = changeObj.origin == 'paste' && typeof changeObj.text == "object" && changeObj.text.length > 1;
if (pastedNewLine) {
var newText = changeObj.text.join(" ");
// trim
//newText = $.trim(newText);
return changeObj.update(null, null, [newText]);
}
return null;
});