Finish implementing codemirror events

Jonathan Frederic 12 years ago
parent a2071db309
commit bf65d5837f

@ -233,10 +233,17 @@ var IPython = (function (IPython) {
this.sel.dblclick(function () {
that.pick();
});
this.sel.focus(function () {
that.editor.focus();
});
this._handle_keydown = function (cm, event) {
that.keydown(event);
};
this.editor.on('keydown', this._handle_keydown);
this._handle_keypress = function (cm, event) {
that.keypress(event);
};
this.editor.on('keypress', this._handle_keypress);
}
this.sel.attr('size', Math.min(10, this.raw_result.length));
@ -282,6 +289,10 @@ var IPython = (function (IPython) {
this.editor.off('keydown', this._handle_keydown);
this._handle_keydown = undefined;
}
if (this._handle_keypress) {
this.editor.off('keypress', this._handle_keypress);
this._handle_keypress = undefined;
}
this.visible = false;
};
@ -291,20 +302,16 @@ var IPython = (function (IPython) {
};
Completer.prototype.keydown = function (event) {
console.log(event);
var code = event.keyCode;
var that = this;
if (!this.visible) return;
// Enter
if (code == keycodes.enter) {
event.stopPropagation();
event.codemirrorIgnore = true;
CodeMirror.e_stop(event);
this.pick();
// Escape or backspace
} else if (code == keycodes.esc || code == keycodes.backspace) {
event.stopPropagation();
event.codemirrorIgnore = true;
CodeMirror.e_stop(event);
this.close();
} else if (code == keycodes.tab) {
//all the fastforwarding operation,
@ -316,8 +323,8 @@ var IPython = (function (IPython) {
this.insert(sh);
}
this.close();
event.codemirrorIgnore = true;
event.stopPropagation();
// event.codemirrorIgnore = true;
// event.stopPropagation();
//reinvoke self
setTimeout(function () {
that.carry_on_completion();
@ -325,8 +332,7 @@ var IPython = (function (IPython) {
} else if (code == keycodes.up || code == keycodes.down) {
// need to do that to be able to move the arrow
// when on the first or last line ofo a code cell
event.stopPropagation();
event.codemirrorIgnore = true;
CodeMirror.e_stop(event);
var options = this.sel.find('option');
var index = this.sel[0].selectedIndex;
@ -337,11 +343,44 @@ var IPython = (function (IPython) {
index++;
}
index = Math.min(Math.max(index, 0), options.length-1);
console.log('compl set index', index);
this.sel[0].selectedIndex = index;
} else if (code == keycodes.left || code == keycodes.right) {
this.close();
}
};
Completer.prototype.keypress = function (event) {
// FIXME: This is a band-aid.
// on keypress, trigger insertion of a single character.
// This simulates the old behavior of completion as you type,
// before events were disconnected and CodeMirror stopped
// receiving events while the completer is focused.
var that = this;
var code = event.keyCode;
// don't handle keypress if it's not a character (arrows on FF)
// or ENTER/TAB
if (event.charCode === 0 ||
code == keycodes.tab ||
code == keycodes.enter
) return;
var cur = this.editor.getCursor();
var completion = {
str: String.fromCharCode(event.which),
type: "introspection",
from: cur,
to: cur,
};
// this.insert(completion);
this.close();
this.editor.focus();
setTimeout(function () {
that.carry_on_completion();
}, 50);
};
IPython.Completer = Completer;
return IPython;

Loading…
Cancel
Save