diff --git a/index.html b/index.html index 49f4634b..a59b9881 100644 --- a/index.html +++ b/index.html @@ -985,10 +985,14 @@ oop.inherits(FoldMode, BaseFoldMode); DocsCamp
  • - Sky Edit + + Mruby-web-irb
  • - WaveMaker + + Sky Edit
  • @@ -998,6 +1002,25 @@ oop.inherits(FoldMode, BaseFoldMode); Jetstrap
  • +
  • + + MadEye +
  • +
  • + + RealOJ +
  • +
  • + + (codassium); +
  • +
  • + Sky Edit +
  • +
  • + WaveMaker +
  • Play My Code
  • diff --git a/lib/ace/ext/emmet.js b/lib/ace/ext/emmet.js index 785dbccd..d5296060 100644 --- a/lib/ace/ext/emmet.js +++ b/lib/ace/ext/emmet.js @@ -318,10 +318,15 @@ function runEmmetCommand(editor) { editorProxy.setupContext(editor); if (editorProxy.getSyntax() == "php") return false; - var actions = emmet.require("actions") + var actions = emmet.require("actions"); + if (this.action == "expand_abbreviation_with_tab") { + if (!editor.selection.isEmpty()) + return false; + } + try { - var result = actions.run(this.name, editorProxy); + var result = actions.run(this.action, editorProxy); } catch(e) { editor._signal("changeStatus", typeof e == "string" ? e : e.message); console.log(e); @@ -331,9 +336,11 @@ function runEmmetCommand(editor) { for (var command in keymap) { exports.commands.addCommand({ - name: command, + name: "emmet:" + command, + action: command, bindKey: keymap[command], - exec: runEmmetCommand + exec: runEmmetCommand, + multiSelectAction: "forEach" }); } diff --git a/lib/ace/ext/keybinding_menu.js b/lib/ace/ext/keybinding_menu.js index 1fa267c6..bf8189a5 100644 --- a/lib/ace/ext/keybinding_menu.js +++ b/lib/ace/ext/keybinding_menu.js @@ -60,8 +60,9 @@ define(function(require, exports, module) { var kb = getEditorKeybordShortcuts(editor); var el = document.createElement('div'); var commands = kb.reduce(function(previous, current) { - return previous + '
    ' + current.command + ' : ' + - current.key + '
    '; + return previous + '
    ' + + current.command + ' : ' + + '' + current.key + '
    '; }, ''); el.id = 'kbshortcutmenu'; diff --git a/lib/ace/ext/menu_tools/get_editor_keyboard_shortcuts.js b/lib/ace/ext/menu_tools/get_editor_keyboard_shortcuts.js index 44a24cd7..e62d931a 100644 --- a/lib/ace/ext/menu_tools/get_editor_keyboard_shortcuts.js +++ b/lib/ace/ext/menu_tools/get_editor_keyboard_shortcuts.js @@ -44,6 +44,8 @@ define(function(require, exports, module) { "use strict"; +var keys = require("../../lib/keys"); + /** * Gets a map of keyboard shortcuts to command names for the current platform. * @author @@ -60,27 +62,39 @@ define(function(require, exports, module) { * // {'command' : aCommand, 'key' : 'Control-d'} * // ] */ -module.exports.getEditorKeybordShortcuts = function getEditorKeybordShortcuts (editor) { - var commands = editor.commands.byName; - var commandName; - var key; - var platform = editor.commands.platform; - var kb = []; - for (commandName in commands) { - try { - key = commands[commandName].bindKey[platform]; - if (key) { - kb.push({ - 'command' : commandName, - 'key' : key - }); +module.exports.getEditorKeybordShortcuts = function(editor) { + var KEY_MODS = keys.KEY_MODS; + var keybindings = []; + var commandMap = {}; + editor.keyBinding.$handlers.forEach(function(handler) { + var ckb = handler.commmandKeyBinding; + for (var i in ckb) { + var modifier = parseInt(i); + if (modifier == -1) { + modifier = ""; + } else if(isNaN(modifier)) { + modifier = i; + } else { + modifier = "" + + (modifier & KEY_MODS.command ? "Cmd-" : "") + + (modifier & KEY_MODS.ctrl ? "Ctrl-" : "") + + (modifier & KEY_MODS.alt ? "Alt-" : "") + + (modifier & KEY_MODS.shift ? "Shift-" : ""); + } + for (var key in ckb[i]) { + var command = ckb[i][key] + if (typeof command != "string") + command = command.name + if (commandMap[command]) { + commandMap[command].key += "|" + modifier + key; + } else { + commandMap[command] = {key: modifier+key, command: command}; + keybindings.push(commandMap[command]); + } } - } catch (e) { - // errors on properties without bindKey we don't want them - // so the errors don't need handling. } - } - return kb; + }); + return keybindings; }; }); \ No newline at end of file diff --git a/lib/ace/ext/menu_tools/settings_menu.css b/lib/ace/ext/menu_tools/settings_menu.css index 8e14a903..f8b761ce 100644 --- a/lib/ace/ext/menu_tools/settings_menu.css +++ b/lib/ace/ext/menu_tools/settings_menu.css @@ -37,4 +37,12 @@ } .ace_closeButton{ background: rgba(245, 146, 146, 0.9); +} +.ace_optionsMenuKey { + color: darkslateblue; + font-weight: bold; +} +.ace_optionsMenuCommand { + color: darkcyan; + font-weight: normal; } \ No newline at end of file diff --git a/lib/ace/lib/event_emitter.js b/lib/ace/lib/event_emitter.js index 39d76f9a..482ae0d4 100644 --- a/lib/ace/lib/event_emitter.js +++ b/lib/ace/lib/event_emitter.js @@ -85,12 +85,37 @@ EventEmitter.once = function(eventName, callback) { EventEmitter.setDefaultHandler = function(eventName, callback) { - this._defaultHandlers = this._defaultHandlers || {}; + var handlers = this._defaultHandlers + if (!handlers) + handlers = this._defaultHandlers = {_disabled_: {}}; - if (this._defaultHandlers[eventName]) - throw new Error("The default handler for '" + eventName + "' is already set"); - - this._defaultHandlers[eventName] = callback; + if (handlers[eventName]) { + var old = handlers[eventName]; + var disabled = handlers._disabled_[eventName]; + if (!disabled) + handlers._disabled_[eventName] = disabled = []; + disabled.push(old); + var i = disabled.indexOf(callback); + if (i != -1) + disabled.splice(i, 1); + } + handlers[eventName] = callback; +}; +EventEmitter.removeDefaultHandler = function(eventName, callback) { + var handlers = this._defaultHandlers + if (!handlers) + return; + var disabled = handlers._disabled_[eventName]; + + if (handlers[eventName] == callback) { + var old = handlers[eventName]; + if (disabled) + this.setDefaultHandler(eventName, disabled.pop()); + } else if (disabled) { + var i = disabled.indexOf(callback); + if (i != -1) + disabled.splice(i, 1); + } }; EventEmitter.on = diff --git a/lib/ace/multi_select.js b/lib/ace/multi_select.js index c54224f6..9d063837 100644 --- a/lib/ace/multi_select.js +++ b/lib/ace/multi_select.js @@ -420,7 +420,7 @@ var Editor = require("./editor").Editor; this.setStyle("ace_multiselect"); this.keyBinding.addKeyboardHandler(commands.keyboardHandler); - this.commands.on("exec", this.$onMultiSelectExec); + this.commands.setDefaultHandler("exec", this.$onMultiSelectExec); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); @@ -434,7 +434,7 @@ var Editor = require("./editor").Editor; this.unsetStyle("ace_multiselect"); this.keyBinding.removeKeyboardHandler(commands.keyboardHandler); - this.commands.removeEventListener("exec", this.$onMultiSelectExec); + this.commands.removeDefaultHandler("exec", this.$onMultiSelectExec); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; @@ -445,20 +445,20 @@ var Editor = require("./editor").Editor; if (!editor.multiSelect) return; if (!command.multiSelectAction) { - command.exec(editor, e.args || {}); + var result = command.exec(editor, e.args || {}); editor.multiSelect.addRange(editor.multiSelect.toOrientedRange()); editor.multiSelect.mergeOverlappingRanges(); } else if (command.multiSelectAction == "forEach") { - editor.forEachSelection(command, e.args); + result = editor.forEachSelection(command, e.args); } else if (command.multiSelectAction == "forEachLine") { - editor.forEachSelection(command, e.args, true); + result = editor.forEachSelection(command, e.args, true); } else if (command.multiSelectAction == "single") { editor.exitMultiSelectMode(); - command.exec(editor, e.args || {}); + result = command.exec(editor, e.args || {}); } else { - command.multiSelectAction(editor, e.args || {}); + result = command.multiSelectAction(editor, e.args || {}); } - e.preventDefault(); + return result; }; /** @@ -474,7 +474,8 @@ var Editor = require("./editor").Editor; var session = this.session; var selection = this.selection; var rangeList = selection.rangeList; - + var result; + var reg = selection._eventRegistry; selection._eventRegistry = {}; @@ -487,7 +488,9 @@ var Editor = require("./editor").Editor; } tmpSel.fromOrientedRange(rangeList.ranges[i]); this.selection = session.selection = tmpSel; - cmd.exec(this, args || {}); + var cmdResult = cmd.exec(this, args || {}); + if (!result == undefined) + result = cmdResult; tmpSel.toOrientedRange(rangeList.ranges[i]); } tmpSel.detach(); @@ -499,6 +502,7 @@ var Editor = require("./editor").Editor; this.onCursorChange(); this.onSelectionChange(); + return result; }; /** diff --git a/lib/ace/snippets.js b/lib/ace/snippets.js index eb2a9153..da9533b1 100644 --- a/lib/ace/snippets.js +++ b/lib/ace/snippets.js @@ -760,8 +760,7 @@ var TabstopManager = function(editor) { "Esc": function(ed) { ed.tabstopManager.detach(); }, - // todo multiselectExec doesn't handle command return values - "!Return": function(ed) { + "Return": function(ed) { //ed.tabstopManager.tabNext(1); return false; }