| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737 |
- /* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Ajax.org B.V. nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
- define(function(require, exports, module) {
- "use strict";
- var lang = require("../lib/lang");
- var config = require("../config");
- var Range = require("../range").Range;
- function bindKey(win, mac) {
- return {win: win, mac: mac};
- }
- /*
- multiSelectAction: "forEach"|"forEachLine"|function|undefined,
- scrollIntoView: true|"cursor"|"center"|"selectionPart"
- */
- exports.commands = [{
- name: "showSettingsMenu",
- bindKey: bindKey("Ctrl-,", "Command-,"),
- exec: function(editor) {
- config.loadModule("ace/ext/settings_menu", function(module) {
- module.init(editor);
- editor.showSettingsMenu();
- });
- },
- readOnly: true
- }, {
- name: "goToNextError",
- bindKey: bindKey("Alt-E", "Ctrl-E"),
- exec: function(editor) {
- config.loadModule("ace/ext/error_marker", function(module) {
- module.showErrorMarker(editor, 1);
- });
- },
- scrollIntoView: "animate",
- readOnly: true
- }, {
- name: "goToPreviousError",
- bindKey: bindKey("Alt-Shift-E", "Ctrl-Shift-E"),
- exec: function(editor) {
- config.loadModule("ace/ext/error_marker", function(module) {
- module.showErrorMarker(editor, -1);
- });
- },
- scrollIntoView: "animate",
- readOnly: true
- }, {
- name: "selectall",
- bindKey: bindKey("Ctrl-A", "Command-A"),
- exec: function(editor) { editor.selectAll(); },
- readOnly: true
- }, {
- name: "centerselection",
- bindKey: bindKey(null, "Ctrl-L"),
- exec: function(editor) { editor.centerSelection(); },
- readOnly: true
- }, {
- name: "gotoline",
- bindKey: bindKey("Ctrl-L", "Command-L"),
- exec: function(editor) {
- var line = parseInt(prompt("Enter line number:"), 10);
- if (!isNaN(line)) {
- editor.gotoLine(line);
- }
- },
- readOnly: true
- }, {
- name: "fold",
- bindKey: bindKey("Alt-L|Ctrl-F1", "Command-Alt-L|Command-F1"),
- exec: function(editor) { editor.session.toggleFold(false); },
- multiSelectAction: "forEach",
- scrollIntoView: "center",
- readOnly: true
- }, {
- name: "unfold",
- bindKey: bindKey("Alt-Shift-L|Ctrl-Shift-F1", "Command-Alt-Shift-L|Command-Shift-F1"),
- exec: function(editor) { editor.session.toggleFold(true); },
- multiSelectAction: "forEach",
- scrollIntoView: "center",
- readOnly: true
- }, {
- name: "toggleFoldWidget",
- bindKey: bindKey("F2", "F2"),
- exec: function(editor) { editor.session.toggleFoldWidget(); },
- multiSelectAction: "forEach",
- scrollIntoView: "center",
- readOnly: true
- }, {
- name: "toggleParentFoldWidget",
- bindKey: bindKey("Alt-F2", "Alt-F2"),
- exec: function(editor) { editor.session.toggleFoldWidget(true); },
- multiSelectAction: "forEach",
- scrollIntoView: "center",
- readOnly: true
- }, {
- name: "foldall",
- bindKey: bindKey(null, "Ctrl-Command-Option-0"),
- exec: function(editor) { editor.session.foldAll(); },
- scrollIntoView: "center",
- readOnly: true
- }, {
- name: "foldOther",
- bindKey: bindKey("Alt-0", "Command-Option-0"),
- exec: function(editor) {
- editor.session.foldAll();
- editor.session.unfold(editor.selection.getAllRanges());
- },
- scrollIntoView: "center",
- readOnly: true
- }, {
- name: "unfoldall",
- bindKey: bindKey("Alt-Shift-0", "Command-Option-Shift-0"),
- exec: function(editor) { editor.session.unfold(); },
- scrollIntoView: "center",
- readOnly: true
- }, {
- name: "findnext",
- bindKey: bindKey("Ctrl-K", "Command-G"),
- exec: function(editor) { editor.findNext(); },
- multiSelectAction: "forEach",
- scrollIntoView: "center",
- readOnly: true
- }, {
- name: "findprevious",
- bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"),
- exec: function(editor) { editor.findPrevious(); },
- multiSelectAction: "forEach",
- scrollIntoView: "center",
- readOnly: true
- }, {
- name: "selectOrFindNext",
- bindKey: bindKey("Alt-K", "Ctrl-G"),
- exec: function(editor) {
- if (editor.selection.isEmpty())
- editor.selection.selectWord();
- else
- editor.findNext();
- },
- readOnly: true
- }, {
- name: "selectOrFindPrevious",
- bindKey: bindKey("Alt-Shift-K", "Ctrl-Shift-G"),
- exec: function(editor) {
- if (editor.selection.isEmpty())
- editor.selection.selectWord();
- else
- editor.findPrevious();
- },
- readOnly: true
- }, {
- name: "find",
- bindKey: bindKey("Ctrl-F", "Command-F"),
- exec: function(editor) {
- config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor)});
- },
- readOnly: true
- }, {
- name: "overwrite",
- bindKey: "Insert",
- exec: function(editor) { editor.toggleOverwrite(); },
- readOnly: true
- }, {
- name: "selecttostart",
- bindKey: bindKey("Ctrl-Shift-Home", "Command-Shift-Up"),
- exec: function(editor) { editor.getSelection().selectFileStart(); },
- multiSelectAction: "forEach",
- readOnly: true,
- scrollIntoView: "animate",
- aceCommandGroup: "fileJump"
- }, {
- name: "gotostart",
- bindKey: bindKey("Ctrl-Home", "Command-Home|Command-Up"),
- exec: function(editor) { editor.navigateFileStart(); },
- multiSelectAction: "forEach",
- readOnly: true,
- scrollIntoView: "animate",
- aceCommandGroup: "fileJump"
- }, {
- name: "selectup",
- bindKey: bindKey("Shift-Up", "Shift-Up"),
- exec: function(editor) { editor.getSelection().selectUp(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "golineup",
- bindKey: bindKey("Up", "Up|Ctrl-P"),
- exec: function(editor, args) { editor.navigateUp(args.times); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "selecttoend",
- bindKey: bindKey("Ctrl-Shift-End", "Command-Shift-Down"),
- exec: function(editor) { editor.getSelection().selectFileEnd(); },
- multiSelectAction: "forEach",
- readOnly: true,
- scrollIntoView: "animate",
- aceCommandGroup: "fileJump"
- }, {
- name: "gotoend",
- bindKey: bindKey("Ctrl-End", "Command-End|Command-Down"),
- exec: function(editor) { editor.navigateFileEnd(); },
- multiSelectAction: "forEach",
- readOnly: true,
- scrollIntoView: "animate",
- aceCommandGroup: "fileJump"
- }, {
- name: "selectdown",
- bindKey: bindKey("Shift-Down", "Shift-Down"),
- exec: function(editor) { editor.getSelection().selectDown(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "golinedown",
- bindKey: bindKey("Down", "Down|Ctrl-N"),
- exec: function(editor, args) { editor.navigateDown(args.times); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "selectwordleft",
- bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"),
- exec: function(editor) { editor.getSelection().selectWordLeft(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "gotowordleft",
- bindKey: bindKey("Ctrl-Left", "Option-Left"),
- exec: function(editor) { editor.navigateWordLeft(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "selecttolinestart",
- bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left"),
- exec: function(editor) { editor.getSelection().selectLineStart(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "gotolinestart",
- bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"),
- exec: function(editor) { editor.navigateLineStart(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "selectleft",
- bindKey: bindKey("Shift-Left", "Shift-Left"),
- exec: function(editor) { editor.getSelection().selectLeft(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "gotoleft",
- bindKey: bindKey("Left", "Left|Ctrl-B"),
- exec: function(editor, args) { editor.navigateLeft(args.times); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "selectwordright",
- bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"),
- exec: function(editor) { editor.getSelection().selectWordRight(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "gotowordright",
- bindKey: bindKey("Ctrl-Right", "Option-Right"),
- exec: function(editor) { editor.navigateWordRight(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "selecttolineend",
- bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right"),
- exec: function(editor) { editor.getSelection().selectLineEnd(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "gotolineend",
- bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"),
- exec: function(editor) { editor.navigateLineEnd(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "selectright",
- bindKey: bindKey("Shift-Right", "Shift-Right"),
- exec: function(editor) { editor.getSelection().selectRight(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "gotoright",
- bindKey: bindKey("Right", "Right|Ctrl-F"),
- exec: function(editor, args) { editor.navigateRight(args.times); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "selectpagedown",
- bindKey: "Shift-PageDown",
- exec: function(editor) { editor.selectPageDown(); },
- readOnly: true
- }, {
- name: "pagedown",
- bindKey: bindKey(null, "Option-PageDown"),
- exec: function(editor) { editor.scrollPageDown(); },
- readOnly: true
- }, {
- name: "gotopagedown",
- bindKey: bindKey("PageDown", "PageDown|Ctrl-V"),
- exec: function(editor) { editor.gotoPageDown(); },
- readOnly: true
- }, {
- name: "selectpageup",
- bindKey: "Shift-PageUp",
- exec: function(editor) { editor.selectPageUp(); },
- readOnly: true
- }, {
- name: "pageup",
- bindKey: bindKey(null, "Option-PageUp"),
- exec: function(editor) { editor.scrollPageUp(); },
- readOnly: true
- }, {
- name: "gotopageup",
- bindKey: "PageUp",
- exec: function(editor) { editor.gotoPageUp(); },
- readOnly: true
- }, {
- name: "scrollup",
- bindKey: bindKey("Ctrl-Up", null),
- exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },
- readOnly: true
- }, {
- name: "scrolldown",
- bindKey: bindKey("Ctrl-Down", null),
- exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },
- readOnly: true
- }, {
- name: "selectlinestart",
- bindKey: "Shift-Home",
- exec: function(editor) { editor.getSelection().selectLineStart(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "selectlineend",
- bindKey: "Shift-End",
- exec: function(editor) { editor.getSelection().selectLineEnd(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "togglerecording",
- bindKey: bindKey("Ctrl-Alt-E", "Command-Option-E"),
- exec: function(editor) { editor.commands.toggleRecording(editor); },
- readOnly: true
- }, {
- name: "replaymacro",
- bindKey: bindKey("Ctrl-Shift-E", "Command-Shift-E"),
- exec: function(editor) { editor.commands.replay(editor); },
- readOnly: true
- }, {
- name: "jumptomatching",
- bindKey: bindKey("Ctrl-P", "Ctrl-P"),
- exec: function(editor) { editor.jumpToMatching(); },
- multiSelectAction: "forEach",
- scrollIntoView: "animate",
- readOnly: true
- }, {
- name: "selecttomatching",
- bindKey: bindKey("Ctrl-Shift-P", "Ctrl-Shift-P"),
- exec: function(editor) { editor.jumpToMatching(true); },
- multiSelectAction: "forEach",
- scrollIntoView: "animate",
- readOnly: true
- }, {
- name: "expandToMatching",
- bindKey: bindKey("Ctrl-Shift-M", "Ctrl-Shift-M"),
- exec: function(editor) { editor.jumpToMatching(true, true); },
- multiSelectAction: "forEach",
- scrollIntoView: "animate",
- readOnly: true
- }, {
- name: "passKeysToBrowser",
- bindKey: bindKey(null, null),
- exec: function() {},
- passEvent: true,
- readOnly: true
- }, {
- name: "copy",
- exec: function(editor) {
- // placeholder for replay macro
- },
- readOnly: true
- },
- // commands disabled in readOnly mode
- {
- name: "cut",
- exec: function(editor) {
- var range = editor.getSelectionRange();
- editor._emit("cut", range);
- if (!editor.selection.isEmpty()) {
- editor.session.remove(range);
- editor.clearSelection();
- }
- },
- scrollIntoView: "cursor",
- multiSelectAction: "forEach"
- }, {
- name: "paste",
- exec: function(editor, args) {
- editor.$handlePaste(args);
- },
- scrollIntoView: "cursor"
- }, {
- name: "removeline",
- bindKey: bindKey("Ctrl-D", "Command-D"),
- exec: function(editor) { editor.removeLines(); },
- scrollIntoView: "cursor",
- multiSelectAction: "forEachLine"
- }, {
- name: "duplicateSelection",
- bindKey: bindKey("Ctrl-Shift-D", "Command-Shift-D"),
- exec: function(editor) { editor.duplicateSelection(); },
- scrollIntoView: "cursor",
- multiSelectAction: "forEach"
- }, {
- name: "sortlines",
- bindKey: bindKey("Ctrl-Alt-S", "Command-Alt-S"),
- exec: function(editor) { editor.sortLines(); },
- scrollIntoView: "selection",
- multiSelectAction: "forEachLine"
- }, {
- name: "togglecomment",
- bindKey: bindKey("Ctrl-/", "Command-/"),
- exec: function(editor) { editor.toggleCommentLines(); },
- multiSelectAction: "forEachLine",
- scrollIntoView: "selectionPart"
- }, {
- name: "toggleBlockComment",
- bindKey: bindKey("Ctrl-Shift-/", "Command-Shift-/"),
- exec: function(editor) { editor.toggleBlockComment(); },
- multiSelectAction: "forEach",
- scrollIntoView: "selectionPart"
- }, {
- name: "modifyNumberUp",
- bindKey: bindKey("Ctrl-Shift-Up", "Alt-Shift-Up"),
- exec: function(editor) { editor.modifyNumber(1); },
- scrollIntoView: "cursor",
- multiSelectAction: "forEach"
- }, {
- name: "modifyNumberDown",
- bindKey: bindKey("Ctrl-Shift-Down", "Alt-Shift-Down"),
- exec: function(editor) { editor.modifyNumber(-1); },
- scrollIntoView: "cursor",
- multiSelectAction: "forEach"
- }, {
- name: "replace",
- bindKey: bindKey("Ctrl-H", "Command-Option-F"),
- exec: function(editor) {
- config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor, true)});
- }
- }, {
- name: "undo",
- bindKey: bindKey("Ctrl-Z", "Command-Z"),
- exec: function(editor) { editor.undo(); }
- }, {
- name: "redo",
- bindKey: bindKey("Ctrl-Shift-Z|Ctrl-Y", "Command-Shift-Z|Command-Y"),
- exec: function(editor) { editor.redo(); }
- }, {
- name: "copylinesup",
- bindKey: bindKey("Alt-Shift-Up", "Command-Option-Up"),
- exec: function(editor) { editor.copyLinesUp(); },
- scrollIntoView: "cursor"
- }, {
- name: "movelinesup",
- bindKey: bindKey("Alt-Up", "Option-Up"),
- exec: function(editor) { editor.moveLinesUp(); },
- scrollIntoView: "cursor"
- }, {
- name: "copylinesdown",
- bindKey: bindKey("Alt-Shift-Down", "Command-Option-Down"),
- exec: function(editor) { editor.copyLinesDown(); },
- scrollIntoView: "cursor"
- }, {
- name: "movelinesdown",
- bindKey: bindKey("Alt-Down", "Option-Down"),
- exec: function(editor) { editor.moveLinesDown(); },
- scrollIntoView: "cursor"
- }, {
- name: "del",
- bindKey: bindKey("Delete", "Delete|Ctrl-D|Shift-Delete"),
- exec: function(editor) { editor.remove("right"); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor"
- }, {
- name: "backspace",
- bindKey: bindKey(
- "Shift-Backspace|Backspace",
- "Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"
- ),
- exec: function(editor) { editor.remove("left"); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor"
- }, {
- name: "cut_or_delete",
- bindKey: bindKey("Shift-Delete", null),
- exec: function(editor) {
- if (editor.selection.isEmpty()) {
- editor.remove("left");
- } else {
- return false;
- }
- },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor"
- }, {
- name: "removetolinestart",
- bindKey: bindKey("Alt-Backspace", "Command-Backspace"),
- exec: function(editor) { editor.removeToLineStart(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor"
- }, {
- name: "removetolineend",
- bindKey: bindKey("Alt-Delete", "Ctrl-K"),
- exec: function(editor) { editor.removeToLineEnd(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor"
- }, {
- name: "removewordleft",
- bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"),
- exec: function(editor) { editor.removeWordLeft(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor"
- }, {
- name: "removewordright",
- bindKey: bindKey("Ctrl-Delete", "Alt-Delete"),
- exec: function(editor) { editor.removeWordRight(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor"
- }, {
- name: "outdent",
- bindKey: bindKey("Shift-Tab", "Shift-Tab"),
- exec: function(editor) { editor.blockOutdent(); },
- multiSelectAction: "forEach",
- scrollIntoView: "selectionPart"
- }, {
- name: "indent",
- bindKey: bindKey("Tab", "Tab"),
- exec: function(editor) { editor.indent(); },
- multiSelectAction: "forEach",
- scrollIntoView: "selectionPart"
- }, {
- name: "blockoutdent",
- bindKey: bindKey("Ctrl-[", "Ctrl-["),
- exec: function(editor) { editor.blockOutdent(); },
- multiSelectAction: "forEachLine",
- scrollIntoView: "selectionPart"
- }, {
- name: "blockindent",
- bindKey: bindKey("Ctrl-]", "Ctrl-]"),
- exec: function(editor) { editor.blockIndent(); },
- multiSelectAction: "forEachLine",
- scrollIntoView: "selectionPart"
- }, {
- name: "insertstring",
- exec: function(editor, str) { editor.insert(str); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor"
- }, {
- name: "inserttext",
- exec: function(editor, args) {
- editor.insert(lang.stringRepeat(args.text || "", args.times || 1));
- },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor"
- }, {
- name: "splitline",
- bindKey: bindKey(null, "Ctrl-O"),
- exec: function(editor) { editor.splitLine(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor"
- }, {
- name: "transposeletters",
- bindKey: bindKey("Ctrl-T", "Ctrl-T"),
- exec: function(editor) { editor.transposeLetters(); },
- multiSelectAction: function(editor) {editor.transposeSelections(1); },
- scrollIntoView: "cursor"
- }, {
- name: "touppercase",
- bindKey: bindKey("Ctrl-U", "Ctrl-U"),
- exec: function(editor) { editor.toUpperCase(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor"
- }, {
- name: "tolowercase",
- bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"),
- exec: function(editor) { editor.toLowerCase(); },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor"
- }, {
- name: "expandtoline",
- bindKey: bindKey("Ctrl-Shift-L", "Command-Shift-L"),
- exec: function(editor) {
- var range = editor.selection.getRange();
- range.start.column = range.end.column = 0;
- range.end.row++;
- editor.selection.setRange(range, false);
- },
- multiSelectAction: "forEach",
- scrollIntoView: "cursor",
- readOnly: true
- }, {
- name: "joinlines",
- bindKey: bindKey(null, null),
- exec: function(editor) {
- var isBackwards = editor.selection.isBackwards();
- var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();
- var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();
- var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;
- var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());
- var selectedCount = selectedText.replace(/\n\s*/, " ").length;
- var insertLine = editor.session.doc.getLine(selectionStart.row);
- for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {
- var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));
- if (curLine.length !== 0) {
- curLine = " " + curLine;
- }
- insertLine += curLine;
- }
- if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {
- // Don't insert a newline at the end of the document
- insertLine += editor.session.doc.getNewLineCharacter();
- }
- editor.clearSelection();
- editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);
- if (selectedCount > 0) {
- // Select the text that was previously selected
- editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);
- editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);
- } else {
- // If the joined line had something in it, start the cursor at that something
- firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;
- editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);
- }
- },
- multiSelectAction: "forEach",
- readOnly: true
- }, {
- name: "invertSelection",
- bindKey: bindKey(null, null),
- exec: function(editor) {
- var endRow = editor.session.doc.getLength() - 1;
- var endCol = editor.session.doc.getLine(endRow).length;
- var ranges = editor.selection.rangeList.ranges;
- var newRanges = [];
- // If multiple selections don't exist, rangeList will return 0 so replace with single range
- if (ranges.length < 1) {
- ranges = [editor.selection.getRange()];
- }
- for (var i = 0; i < ranges.length; i++) {
- if (i == (ranges.length - 1)) {
- // The last selection must connect to the end of the document, unless it already does
- if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {
- newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));
- }
- }
- if (i === 0) {
- // The first selection must connect to the start of the document, unless it already does
- if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {
- newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));
- }
- } else {
- newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));
- }
- }
- editor.exitMultiSelectMode();
- editor.clearSelection();
- for(var i = 0; i < newRanges.length; i++) {
- editor.selection.addRange(newRanges[i], false);
- }
- },
- readOnly: true,
- scrollIntoView: "none"
- }];
- });
|