Вы можете подключить в CodeMirror с помощью крючка, и определить собственное событие, которое срабатывает, когда курсор меняется с помощью мыши на редакторе
CodeMirror.defineInitHook(function (editor) {
editor.cursorDidChange = false;
$(editor.getWrapperElement()).on({
mousedown : function() {
if (editor.cursorDidChange) CodeMirror.signal(editor, 'cursorClick');
},
mouseup : function() {
editor.cursorDidChange = false;
}
});
editor.on('cursorActivity', function(e) {
if (e.isSelection) editor.cursorDidChange = true;
});
editor.on('beforeSelectionChange', function(e, range) {
var start = range.ranges[0].anchor, end = range.ranges[0].head;
e.isSelection = range.origin == '*mouse' && start.line == end.line && start.ch == end.ch;
})
});
Это использует флаг и таймер, чтобы поймать оба события, если они произойдут в течение короткого времени друг от друга, поскольку обработчик клика срабатывает сразу после обработчика cursorActivity.
Вот рабочий пример того, как использовать вновь определенное событие с CodeMirror:
/* Create Hook */
CodeMirror.defineInitHook(function (editor) {
\t editor.cursorDidChange = false;
\t $(editor.getWrapperElement()).on({
\t mousedown : function() {
if (editor.cursorDidChange) CodeMirror.signal(editor, 'cursorClick');
},
mouseup : function() {
editor.cursorDidChange = false;
}
});
editor.on('cursorActivity', function(e) {
\t if (e.isSelection) editor.cursorDidChange = true;
});
editor.on('beforeSelectionChange', function(e, range) {
var start = range.ranges[0].anchor, end = range.ranges[0].head;
e.isSelection = range.origin == '*mouse' && start.line == end.line && start.ch == end.ch;
})
});
/* -------------- */
/* Create an editor to test it */
var $this = $('.code').eq(0),
$code = $this.html(),
$unescaped = $('<div/>').html($code).text();
$this.empty();
var editor = CodeMirror($this.get(0), {
value : $unescaped,
mode : 'javascript',
lineNumbers : true,
readOnly : false
});
/* Lets test out the new event */
editor.on('cursorClick', function() {
\t $('<div />', {text : 'Cursor moved when clicked !'}).appendTo('#result')
.show(1).delay(1000).fadeOut(function() {
\t $(this).remove();
});
});
body {background: #eee;}
.code {margin: 10px 0;}
#result {color: green;}
.CodeMirror {height: auto!important;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://codemirror.net/lib/codemirror.js"></script>
<script src="https://codemirror.net/mode/javascript/javascript.js"></script>
<link href="https://codemirror.net/lib/codemirror.css" rel="stylesheet"/>
<!-- EDITOR -->
<div class="code">test.fn = test.prototype = {
display : function() {}
console.log("Move cursor by clicking");
console.log("Move cursor with keys");
},
\t pushStack: function(elems) {
\t \t // This is just pseudocode to have something to test
\t }
return false;
}</div>
<!-- EDITOR END -->
<div id="result"></div>
'пользователь перемещает курсор в другое место с помощью click' мыши вы можете объяснить эту часть ? –
@ Иванка Тодорова Если из тегов не ясно: это вопрос о [редакторе CodeMirror] (https://codemirror.net/). Под «другим местоположением» я подразумеваю, что пользователь меняет текущее местоположение курсора, щелкая мышью по тексту в редакторе. – Oak
Можете ли вы опубликовать текущую настройку редактора codemirror? –