mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
134 lines
4.2 KiB
JavaScript
Executable file
134 lines
4.2 KiB
JavaScript
Executable file
define(function(require, exports, module) {
|
|
var registers = require("../registers");
|
|
|
|
var dom = require("../../../lib/dom");
|
|
dom.importCssString('.insert-mode .ace_cursor{\
|
|
border-left: 2px solid #333333;\
|
|
}\
|
|
.ace_dark.insert-mode .ace_cursor{\
|
|
border-left: 2px solid #eeeeee;\
|
|
}\
|
|
.normal-mode .ace_cursor{\
|
|
border: 0!important;\
|
|
background-color: red;\
|
|
opacity: 0.5;\
|
|
}', 'vimMode');
|
|
|
|
module.exports = {
|
|
onVisualMode: false,
|
|
onVisualLineMode: false,
|
|
currentMode: 'normal',
|
|
noMode: function(editor) {
|
|
editor.unsetStyle('insert-mode');
|
|
editor.unsetStyle('normal-mode');
|
|
if (editor.commands.recording)
|
|
editor.commands.toggleRecording(editor);
|
|
editor.setOverwrite(false);
|
|
},
|
|
insertMode: function(editor) {
|
|
this.currentMode = 'insert';
|
|
// Switch editor to insert mode
|
|
editor.setStyle('insert-mode');
|
|
editor.unsetStyle('normal-mode');
|
|
|
|
editor.setOverwrite(false);
|
|
editor.keyBinding.$data.buffer = "";
|
|
editor.keyBinding.$data.state = "insertMode";
|
|
this.onVisualMode = false;
|
|
this.onVisualLineMode = false;
|
|
if(this.onInsertReplaySequence) {
|
|
// Ok, we're apparently replaying ("."), so let's do it
|
|
editor.commands.macro = this.onInsertReplaySequence;
|
|
editor.commands.replay(editor);
|
|
this.onInsertReplaySequence = null;
|
|
this.normalMode(editor);
|
|
} else {
|
|
editor._emit("changeStatus");
|
|
// Record any movements, insertions in insert mode
|
|
if(!editor.commands.recording)
|
|
editor.commands.toggleRecording(editor);
|
|
}
|
|
},
|
|
normalMode: function(editor) {
|
|
// Switch editor to normal mode
|
|
this.currentMode = 'normal';
|
|
|
|
editor.unsetStyle('insert-mode');
|
|
editor.setStyle('normal-mode');
|
|
editor.clearSelection();
|
|
|
|
var pos;
|
|
if (!editor.getOverwrite()) {
|
|
pos = editor.getCursorPosition();
|
|
if (pos.column > 0)
|
|
editor.navigateLeft();
|
|
}
|
|
|
|
editor.setOverwrite(true);
|
|
editor.keyBinding.$data.buffer = "";
|
|
editor.keyBinding.$data.state = "start";
|
|
this.onVisualMode = false;
|
|
this.onVisualLineMode = false;
|
|
editor._emit("changeStatus");
|
|
// Save recorded keystrokes
|
|
if (editor.commands.recording) {
|
|
editor.commands.toggleRecording(editor);
|
|
return editor.commands.macro;
|
|
}
|
|
else {
|
|
return [];
|
|
}
|
|
},
|
|
visualMode: function(editor, lineMode) {
|
|
if (
|
|
(this.onVisualLineMode && lineMode)
|
|
|| (this.onVisualMode && !lineMode)
|
|
) {
|
|
this.normalMode(editor);
|
|
return;
|
|
}
|
|
|
|
editor.setStyle('insert-mode');
|
|
editor.unsetStyle('normal-mode');
|
|
|
|
editor._emit("changeStatus");
|
|
if (lineMode) {
|
|
this.onVisualLineMode = true;
|
|
} else {
|
|
this.onVisualMode = true;
|
|
this.onVisualLineMode = false;
|
|
}
|
|
},
|
|
getRightNthChar: function(editor, cursor, ch, n) {
|
|
var line = editor.getSession().getLine(cursor.row);
|
|
var matches = line.substr(cursor.column + 1).split(ch);
|
|
|
|
return n < matches.length ? matches.slice(0, n).join(ch).length : null;
|
|
},
|
|
getLeftNthChar: function(editor, cursor, ch, n) {
|
|
var line = editor.getSession().getLine(cursor.row);
|
|
var matches = line.substr(0, cursor.column).split(ch);
|
|
|
|
return n < matches.length ? matches.slice(-1 * n).join(ch).length : null;
|
|
},
|
|
toRealChar: function(ch) {
|
|
if (ch.length === 1)
|
|
return ch;
|
|
|
|
if (/^shift-./.test(ch))
|
|
return ch[ch.length - 1].toUpperCase();
|
|
else
|
|
return "";
|
|
},
|
|
copyLine: function(editor) {
|
|
var pos = editor.getCursorPosition();
|
|
editor.selection.clearSelection();
|
|
editor.moveCursorTo(pos.row, pos.column);
|
|
editor.selection.selectLine();
|
|
registers._default.isLine = true;
|
|
registers._default.text = editor.getCopyText().replace(/\n$/, "");
|
|
editor.selection.clearSelection();
|
|
editor.moveCursorTo(pos.row, pos.column);
|
|
}
|
|
};
|
|
});
|