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
Codiqa
@@ -998,6 +1002,25 @@ oop.inherits(FoldMode, BaseFoldMode);
Jetstrap
Jetstrap
+
+ MadEye
+ MadEye
+
+
+
+ RealOJ
+
+
+ (codassium);
+ (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 + '';
+ return previous + '';
}, '');
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;
}