ace.define("ace/keyboard/vscode", ["require", "exports", "module", "ace/keyboard/hash_handler", "ace/config"], function (require, exports, module) {
  "use strict";

  var HashHandler = require("../keyboard/hash_handler").HashHandler;

  var config = require("../config");

  exports.handler = new HashHandler();
  exports.handler.$id = "ace/keyboard/vscode";
  exports.handler.addCommands([{
    name: "toggleWordWrap",
    exec: function exec(editor) {
      var wrapUsed = editor.session.getUseWrapMode();
      editor.session.setUseWrapMode(!wrapUsed);
    },
    readOnly: true
  }, {
    name: "navigateToLastEditLocation",
    exec: function exec(editor) {
      var lastDelta = editor.session.getUndoManager().$lastDelta;
      var range = lastDelta.action == "remove" ? lastDelta.start : lastDelta.end;
      editor.moveCursorTo(range.row, range.column);
      editor.clearSelection();
    }
  }, {
    name: "replaceAll",
    exec: function exec(editor) {
      if (!editor.searchBox) {
        config.loadModule("ace/ext/searchbox", function (e) {
          e.Search(editor, true);
        });
      } else {
        if (editor.searchBox.active === true && editor.searchBox.replaceOption.checked === true) {
          editor.searchBox.replaceAll();
        }
      }
    }
  }, {
    name: "replaceOne",
    exec: function exec(editor) {
      if (!editor.searchBox) {
        config.loadModule("ace/ext/searchbox", function (e) {
          e.Search(editor, true);
        });
      } else {
        if (editor.searchBox.active === true && editor.searchBox.replaceOption.checked === true) {
          editor.searchBox.replace();
        }
      }
    }
  }, {
    name: "selectAllMatches",
    exec: function exec(editor) {
      if (!editor.searchBox) {
        config.loadModule("ace/ext/searchbox", function (e) {
          e.Search(editor, false);
        });
      } else {
        if (editor.searchBox.active === true) {
          editor.searchBox.findAll();
        }
      }
    }
  }, {
    name: "toggleFindCaseSensitive",
    exec: function exec(editor) {
      config.loadModule("ace/ext/searchbox", function (e) {
        e.Search(editor, false);
        var sb = editor.searchBox;
        sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;
        sb.$syncOptions();
      });
    }
  }, {
    name: "toggleFindInSelection",
    exec: function exec(editor) {
      config.loadModule("ace/ext/searchbox", function (e) {
        e.Search(editor, false);
        var sb = editor.searchBox;
        sb.searchOption.checked = !sb.searchRange;
        sb.setSearchRange(sb.searchOption.checked && sb.editor.getSelectionRange());
        sb.$syncOptions();
      });
    }
  }, {
    name: "toggleFindRegex",
    exec: function exec(editor) {
      config.loadModule("ace/ext/searchbox", function (e) {
        e.Search(editor, false);
        var sb = editor.searchBox;
        sb.regExpOption.checked = !sb.regExpOption.checked;
        sb.$syncOptions();
      });
    }
  }, {
    name: "toggleFindWholeWord",
    exec: function exec(editor) {
      config.loadModule("ace/ext/searchbox", function (e) {
        e.Search(editor, false);
        var sb = editor.searchBox;
        sb.wholeWordOption.checked = !sb.wholeWordOption.checked;
        sb.$syncOptions();
      });
    }
  }, {
    name: "removeSecondaryCursors",
    exec: function exec(editor) {
      var ranges = editor.selection.ranges;
      if (ranges && ranges.length > 1) editor.selection.toSingleRange(ranges[ranges.length - 1]);else editor.selection.clearSelection();
    }
  }]);
  [{
    bindKey: {
      mac: "Ctrl-G",
      win: "Ctrl-G"
    },
    name: "gotoline"
  }, {
    bindKey: {
      mac: "Command-Shift-L|Command-F2",
      win: "Ctrl-Shift-L|Ctrl-F2"
    },
    name: "findAll"
  }, {
    bindKey: {
      mac: "Shift-F8|Shift-Option-F8",
      win: "Shift-F8|Shift-Alt-F8"
    },
    name: "goToPreviousError"
  }, {
    bindKey: {
      mac: "F8|Option-F8",
      win: "F8|Alt-F8"
    },
    name: "goToNextError"
  }, {
    bindKey: {
      mac: "Command-Shift-P|F1",
      win: "Ctrl-Shift-P|F1"
    },
    name: "openCommandPallete"
  }, {
    bindKey: {
      mac: "Command-K|Command-S",
      win: "Ctrl-K|Ctrl-S"
    },
    name: "showKeyboardShortcuts"
  }, {
    bindKey: {
      mac: "Shift-Option-Up",
      win: "Alt-Shift-Up"
    },
    name: "copylinesup"
  }, {
    bindKey: {
      mac: "Shift-Option-Down",
      win: "Alt-Shift-Down"
    },
    name: "copylinesdown"
  }, {
    bindKey: {
      mac: "Command-Shift-K",
      win: "Ctrl-Shift-K"
    },
    name: "removeline"
  }, {
    bindKey: {
      mac: "Command-Enter",
      win: "Ctrl-Enter"
    },
    name: "addLineAfter"
  }, {
    bindKey: {
      mac: "Command-Shift-Enter",
      win: "Ctrl-Shift-Enter"
    },
    name: "addLineBefore"
  }, {
    bindKey: {
      mac: "Command-Shift-\\",
      win: "Ctrl-Shift-\\"
    },
    name: "jumptomatching"
  }, {
    bindKey: {
      mac: "Command-]",
      win: "Ctrl-]"
    },
    name: "blockindent"
  }, {
    bindKey: {
      mac: "Command-[",
      win: "Ctrl-["
    },
    name: "blockoutdent"
  }, {
    bindKey: {
      mac: "Ctrl-PageDown",
      win: "Alt-PageDown"
    },
    name: "pagedown"
  }, {
    bindKey: {
      mac: "Ctrl-PageUp",
      win: "Alt-PageUp"
    },
    name: "pageup"
  }, {
    bindKey: {
      mac: "Shift-Option-A",
      win: "Shift-Alt-A"
    },
    name: "toggleBlockComment"
  }, {
    bindKey: {
      mac: "Option-Z",
      win: "Alt-Z"
    },
    name: "toggleWordWrap"
  }, {
    bindKey: {
      mac: "Command-G",
      win: "F3|Ctrl-K Ctrl-D"
    },
    name: "findnext"
  }, {
    bindKey: {
      mac: "Command-Shift-G",
      win: "Shift-F3"
    },
    name: "findprevious"
  }, {
    bindKey: {
      mac: "Option-Enter",
      win: "Alt-Enter"
    },
    name: "selectAllMatches"
  }, {
    bindKey: {
      mac: "Command-D",
      win: "Ctrl-D"
    },
    name: "selectMoreAfter"
  }, {
    bindKey: {
      mac: "Command-K Command-D",
      win: "Ctrl-K Ctrl-D"
    },
    name: "selectOrFindNext"
  }, {
    bindKey: {
      mac: "Shift-Option-I",
      win: "Shift-Alt-I"
    },
    name: "splitSelectionIntoLines"
  }, {
    bindKey: {
      mac: "Command-K M",
      win: "Ctrl-K M"
    },
    name: "modeSelect"
  }, {
    bindKey: {
      mac: "Command-Option-[",
      win: "Ctrl-Shift-["
    },
    name: "toggleFoldWidget"
  }, {
    bindKey: {
      mac: "Command-Option-]",
      win: "Ctrl-Shift-]"
    },
    name: "toggleFoldWidget"
  }, {
    bindKey: {
      mac: "Command-K Command-0",
      win: "Ctrl-K Ctrl-0"
    },
    name: "foldall"
  }, {
    bindKey: {
      mac: "Command-K Command-J",
      win: "Ctrl-K Ctrl-J"
    },
    name: "unfoldall"
  }, {
    bindKey: {
      mac: "Command-K Command-1",
      win: "Ctrl-K Ctrl-1"
    },
    name: "foldOther"
  }, {
    bindKey: {
      mac: "Command-K Command-Q",
      win: "Ctrl-K Ctrl-Q"
    },
    name: "navigateToLastEditLocation"
  }, {
    bindKey: {
      mac: "Command-K Command-R|Command-K Command-S",
      win: "Ctrl-K Ctrl-R|Ctrl-K Ctrl-S"
    },
    name: "showKeyboardShortcuts"
  }, {
    bindKey: {
      mac: "Command-K Command-X",
      win: "Ctrl-K Ctrl-X"
    },
    name: "trimTrailingSpace"
  }, {
    bindKey: {
      mac: "Shift-Down|Command-Shift-Down",
      win: "Shift-Down|Ctrl-Shift-Down"
    },
    name: "selectdown"
  }, {
    bindKey: {
      mac: "Shift-Up|Command-Shift-Up",
      win: "Shift-Up|Ctrl-Shift-Up"
    },
    name: "selectup"
  }, {
    bindKey: {
      mac: "Command-Alt-Enter",
      win: "Ctrl-Alt-Enter"
    },
    name: "replaceAll"
  }, {
    bindKey: {
      mac: "Command-Shift-1",
      win: "Ctrl-Shift-1"
    },
    name: "replaceOne"
  }, {
    bindKey: {
      mac: "Option-C",
      win: "Alt-C"
    },
    name: "toggleFindCaseSensitive"
  }, {
    bindKey: {
      mac: "Option-L",
      win: "Alt-L"
    },
    name: "toggleFindInSelection"
  }, {
    bindKey: {
      mac: "Option-R",
      win: "Alt-R"
    },
    name: "toggleFindRegex"
  }, {
    bindKey: {
      mac: "Option-W",
      win: "Alt-W"
    },
    name: "toggleFindWholeWord"
  }, {
    bindKey: {
      mac: "Command-L",
      win: "Ctrl-L"
    },
    name: "expandtoline"
  }, {
    bindKey: {
      mac: "Shift-Esc",
      win: "Shift-Esc"
    },
    name: "removeSecondaryCursors"
  }].forEach(function (binding) {
    var command = exports.handler.commands[binding.name];
    if (command) command.bindKey = binding.bindKey;
    exports.handler.bindKey(binding.bindKey, command || binding.name);
  });
});

(function () {
  ace.require(["ace/keyboard/vscode"], function (m) {
    if (typeof module == "object" && typeof exports == "object" && module) {
      module.exports = m;
    }
  });
})();