From 627046c02e4d7989ee329c40046336da33abf85e Mon Sep 17 00:00:00 2001 From: Eric Arnold Date: Thu, 24 Apr 2014 09:44:29 -0700 Subject: [PATCH 1/5] TEMP testing --- Ace.sublime-workspace | 450 +++++++++++++++++++++++++++ lib/ace/css/editor.css | 4 + lib/ace/lib/event_emitter.js | 3 + lib/ace/snippets/jack.js | 7 + lib/ace/snippets/jack.snippets | 0 lib/ace/snippets/mel.js | 7 + lib/ace/snippets/mel.snippets | 0 lib/ace/snippets/plain_text.js | 7 + lib/ace/snippets/plain_text.snippets | 0 lib/ace/snippets/protobuf.snippets | 0 lib/ace/snippets/space.js | 7 + lib/ace/snippets/space.snippets | 0 lib/ace/undomanager.js | 1 + 13 files changed, 486 insertions(+) create mode 100644 Ace.sublime-workspace create mode 100644 lib/ace/snippets/jack.js create mode 100644 lib/ace/snippets/jack.snippets create mode 100644 lib/ace/snippets/mel.js create mode 100644 lib/ace/snippets/mel.snippets create mode 100644 lib/ace/snippets/plain_text.js create mode 100644 lib/ace/snippets/plain_text.snippets create mode 100644 lib/ace/snippets/protobuf.snippets create mode 100644 lib/ace/snippets/space.js create mode 100644 lib/ace/snippets/space.snippets diff --git a/Ace.sublime-workspace b/Ace.sublime-workspace new file mode 100644 index 00000000000..ad07a39ff06 --- /dev/null +++ b/Ace.sublime-workspace @@ -0,0 +1,450 @@ +{ + "auto_complete": + { + "selected_items": + [ + [ + "for", + "for for (…) {…}" + ], + [ + "backg", + "background_backup" + ], + [ + "mou", + "mount_point" + ] + ] + }, + "buffers": + [ + ], + "build_system": "", + "command_palette": + { + "height": 27.0, + "selected_items": + [ + [ + "Snippet: ", + "Snippet: My Fancy Snippet" + ], + [ + "key", + "Preferences: Key Bindings - Default" + ] + ], + "width": 467.0 + }, + "console": + { + "height": 439.0, + "history": + [ + "view.run_command('prefixr')", + "view.run_command('example')", + "view.run_command()", + "view.run_command('example')", + "import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())" + ] + }, + "distraction_free": + { + "menu_visible": true, + "show_minimap": false, + "show_open_files": false, + "show_tabs": false, + "side_bar_visible": false, + "status_bar_visible": false + }, + "file_history": + [ + "/Users/ericarnold/Sites/ace/lib/ace/layer/text.js", + "/Users/ericarnold/Sites/ace/lib/ace/css/editor.css", + "/Users/ericarnold/Sites/ace/lib/ace/tokenizer.js", + "/Users/ericarnold/Sites/ace/lib/ace/edit_session/fold_line.js", + "/Users/ericarnold/Sites/ace/lib/ace/token_iterator.js", + "/Users/ericarnold/Sites/ace/lib/ace/commands/default_commands.js", + "/Users/ericarnold/Sites/ace/lib/ace/mouse/default_gutter_handler.js", + "/Users/ericarnold/Sites/ace/lib/ace/keyboard/vim/commands.js", + "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/Trace/Trace.py", + "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/Label/Label.py", + "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/Default (OSX).sublime-keymap", + "/Users/ericarnold/Sites/ace/lib/ace/line_widgets.js", + "/Users/ericarnold/Sites/ace/lib/ace/ext/error_marker.js", + "/Users/ericarnold/Sites/ace/lib/ace/edit_session/fold.js", + "/Users/ericarnold/Sites/ace/lib/ace/edit_session/folding.js", + "/Users/ericarnold/Sites/ace/lib/ace/document.js", + "/Users/ericarnold/Sites/ace/lib/ace/editor.js", + "/Users/ericarnold/Documents/projects/Spark/Ace.sublime-workspace", + "/Users/ericarnold/Sites/ace/lib/ace/edit_session.js", + "/Users/ericarnold/Sites/ace/api/token_iterator.html", + "/Users/ericarnold/Sites/ace/lib/ace/tokenizer_test.js", + "/Users/ericarnold/Sites/ace/api/tokenizer.html", + "/Users/ericarnold/Sites/ace/stationary_tooltip_option.patch", + "/Users/ericarnold/Sites/ace/lib/ace/mode/_test/text_xml.txt", + "/Users/ericarnold/Sites/ace/lib/ace/mode/_test/tokens_ejs.json", + "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/traceLabel.js.sublime-macro", + "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/temp.sublime-macro", + "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/Prefixr/Prefixr.py", + "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/Default/Default (OSX).sublime-keymap", + "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/traceLabel.sublime-snippet", + "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/traceLabel.py", + "/Users/ericarnold/src/ace/lib/ace/mouse/default_gutter_handler.js", + "/Users/ericarnold/src/ace/lib/ace/mouse/mouse_handler.js", + "/Users/ericarnold/src/ace/kitchen-sink.html", + "/Users/ericarnold/src/ace/lib/ace/editor.js", + "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/Trace Label", + "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/Preferences.sublime-settings", + "/Users/ericarnold/Sites/ace/lib/ace/css/codefolding-fold-button-states.png", + "/Users/ericarnold/Sites/ace/demo/kitchen-sink/demo.js", + "/Users/ericarnold/src/spark/ide/app/packages/ace/src/js/ace.js", + "/Users/ericarnold/src/BUILD_BAK", + "/Users/ericarnold/bin/scripts/setup_local_g3", + "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/shell.function.sublime-snippet", + "/Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini", + "/Users/ericarnold/bin/setup commands", + "/Users/ericarnold/.profile", + "/Users/ericarnold/bin/scripts/events/onEclipseSave", + "/Users/ericarnold/bin/test_failing", + "/usr/local/google/home/ericarnold/g3/dart/google3/third_party/dart_lang/trunk/BUILD", + "/Users/ericarnold/Documents/projects/local.sublime-project", + "/usr/local/google/home/ericarnold/g3/dart/workspaces/Dart Grok Workspace/.metadata/.log", + "/Users/ericarnold/src/google3_baks/bak_1379709893.patch", + "/Users/ericarnold/src/google3_baks/git_1379599559.patch", + "/Users/ericarnold/ls", + "/Users/ericarnold/bin/scripts/tests/trap_test", + "/Users/ericarnold/bin/scripts/backup", + "/usr/local/google/home/ericarnold/g3/dart/dart/test/testdart.dart", + "/usr/local/google/home/ericarnold/g3/dart/dart/test/Abc.dart", + "/Volumes/Personal/ericarnold/Documents/clients/GOOG/Admin/GOOG May .. July 2013 trips" + ], + "find": + { + "height": 35.0 + }, + "find_in_files": + { + "height": 93.0, + "where_history": + [ + "*.js", + "*.css", + "*.js", + "", + "*.js", + "", + "*.dart", + "" + ] + }, + "find_state": + { + "case_sensitive": false, + "find_history": + [ + "project", + "value: .*placeholder", + "token\\.value =", + "token.value =.*placeholder", + "placeholder =", + "placeholder", + "ace_fold", + "updateLines", + "renderLine", + "callback", + "\",\"", + "\" + \",", + "\" +", + "callback", + "fold", + "function Fold", + ".walk", + "fold\"", + "\"fold\"", + "walk", + "getFoldLineTokens", + "fold", + "placeholder", + ".value", + "token", + "token.value", + "new Token", + "fold", + "renderToken", + "value", + "token", + "renderToken", + "replaceFunc", + "\"fold\"", + "fold", + "golf", + "\"fold\"", + "renderToken", + "foldData", + "updateFoldWidgets", + "foldWidgets", + "foldwidg", + "addLineWidget", + "changeFold", + "alt+t", + "foldLines", + "removeFold", + "addFold", + "console", + "placeholder", + "size", + "command", + "tab", + "console", + "`", + ".py", + "gutterElement", + "Tooltip", + "scope", + "-F1", + "\\bwidget", + "\\bWidget", + "\\bFoldWidget", + "FoldWidget", + "ace_fold", + "expand", + "expand-marker", + "codefolding-fold-button-states", + "placeholder", + "addFold", + "foldwidget", + "onFoldWidgetClick", + "widget", + "addFold", + "placeholder", + "addFold", + "fold", + "widget", + "toggleFold", + "-F1", + "-F2", + "F2", + "FoldWidget", + "fold", + "foldselection", + "fold selection", + "F1", + "foldwidget", + "fold", + "folding", + "setShowFoldWidgets", + "Widget", + "character", + "select", + "cursor", + "require", + "moveToo", + "moveTool", + "mousewheel", + "follow", + "mouseHandler", + "follows", + "hideTooltip", + "focusTimout", + "highlightGutterLine", + "setHighlightGutterLine", + "tGutter", + "gutter", + "showInvisib", + "defineOptions", + "^var [A-Z][a-zA-Z]* = function\\(", + "var [A-Z][a-zA-Z]* = function\\(", + "highlightActiveLi", + "config", + "exports", + "\\bace\\.", + "\\bace.", + "ace.", + "ACE_NAMESPACE", + "exportAce", + "ace", + "editSession", + "export", + "&& )", + "rect", + "moveTooltip", + "annotation", + "showTooltip" + ], + "highlight": true, + "in_selection": false, + "preserve_case": false, + "regex": true, + "replace_history": + [ + "", + " " + ], + "reverse": false, + "show_context": true, + "use_buffer2": false, + "whole_word": false, + "wrap": true + }, + "groups": + [ + { + "sheets": + [ + ] + } + ], + "incremental_find": + { + "height": 34.0 + }, + "input": + { + "height": 31.0 + }, + "layout": + { + "cells": + [ + [ + 0, + 0, + 1, + 1 + ] + ], + "cols": + [ + 0.0, + 1.0 + ], + "rows": + [ + 0.0, + 1.0 + ] + }, + "menu_visible": true, + "output.find_results": + { + "height": 485.0 + }, + "project": "Ace.sublime-project", + "replace": + { + "height": 64.0 + }, + "save_all_on_build": true, + "select_file": + { + "height": 0.0, + "selected_items": + [ + [ + "tokeniterator", + "lib/ace/token_iterator.js" + ], + [ + "text.", + "lib/ace/layer/text.js" + ], + [ + "default_gutter", + "lib/ace/mouse/default_gutter_handler.js" + ], + [ + "docu", + "lib/ace/document.js" + ], + [ + "test_", + "🏠/bin/test_failing" + ], + [ + "test", + "🏠/bin/test_failing" + ], + [ + "fail", + "🏠/bin/test_failing" + ], + [ + "", + "🏠/bin/test_failing" + ], + [ + "onecl", + "🏠/bin/scripts/events/onEclipseSave" + ], + [ + "test_fa", + "🏠/bin/test_failing" + ], + [ + "onec", + "🏠/bin/scripts/events/onEclipseSave" + ], + [ + "eclip", + "eclipse.ini/eclipse.ini" + ], + [ + "on", + "🏠/bin/scripts/events/onEclipseSave" + ], + [ + "keymap", + "Sublime.../User/Default (OSX).sublime-keymap" + ], + [ + "onecli", + "🏠/bin/scripts/events/onEclipseSave" + ], + [ + "setup", + "scripts/setup_local_g3" + ] + ], + "width": 0.0 + }, + "select_project": + { + "height": 500.0, + "selected_items": + [ + ], + "width": 380.0 + }, + "select_symbol": + { + "height": 27.0, + "selected_items": + [ + ], + "width": 392.0 + }, + "settings": + { + "last_automatic_layout": + [ + [ + 0, + 0, + 1, + 1 + ] + ] + }, + "show_minimap": true, + "show_open_files": false, + "show_tabs": true, + "side_bar_visible": true, + "side_bar_width": 290.0, + "status_bar_visible": true, + "template_settings": + { + "max_columns": 2 + } +} diff --git a/lib/ace/css/editor.css b/lib/ace/css/editor.css index b3a137f357e..e148d86e011 100644 --- a/lib/ace/css/editor.css +++ b/lib/ace/css/editor.css @@ -1,3 +1,7 @@ +.ace_identifier { + color: blue; +} + .ace_editor { position: relative; overflow: hidden; diff --git a/lib/ace/lib/event_emitter.js b/lib/ace/lib/event_emitter.js index b98601450a0..1ea4f9086b2 100644 --- a/lib/ace/lib/event_emitter.js +++ b/lib/ace/lib/event_emitter.js @@ -55,7 +55,10 @@ EventEmitter._dispatchEvent = function(eventName, e) { if (!e.preventDefault) e.preventDefault = preventDefault; + listeners = listeners.slice(); + console.log(listeners.length); + for (var i=0; i Date: Mon, 28 Apr 2014 22:08:46 -0700 Subject: [PATCH 2/5] Linking class getting events from mousemove and mousedown --- demo/kitchen-sink/layout.js | 2 + lib/ace/lib/event_emitter.js | 4 + lib/ace/linking.js | 154 +++++++++++++++++++++++++++++++ lib/ace/mouse/linking_handler.js | 89 ++++++++++++++++++ 4 files changed, 249 insertions(+) create mode 100644 lib/ace/linking.js create mode 100644 lib/ace/mouse/linking_handler.js diff --git a/demo/kitchen-sink/layout.js b/demo/kitchen-sink/layout.js index e43915bb8c8..1defcb938f5 100644 --- a/demo/kitchen-sink/layout.js +++ b/demo/kitchen-sink/layout.js @@ -10,6 +10,7 @@ var UndoManager = require("ace/undomanager").UndoManager; var Renderer = require("ace/virtual_renderer").VirtualRenderer; var Editor = require("ace/editor").Editor; var MultiSelect = require("ace/multi_select").MultiSelect; +var Linking = require("ace/linking").Linking; dom.importCssString("\ splitter {\ @@ -117,6 +118,7 @@ exports.singleLineEditor = function(el) { renderer.setStyle("ace_one-line"); var editor = new Editor(renderer); new MultiSelect(editor); + new Linking(editor); editor.session.setUndoManager(new UndoManager()); editor.setShowPrintMargin(false); diff --git a/lib/ace/lib/event_emitter.js b/lib/ace/lib/event_emitter.js index 1ea4f9086b2..1f685f22c64 100644 --- a/lib/ace/lib/event_emitter.js +++ b/lib/ace/lib/event_emitter.js @@ -124,6 +124,10 @@ EventEmitter.removeDefaultHandler = function(eventName, callback) { EventEmitter.on = EventEmitter.addEventListener = function(eventName, callback, capturing) { + if (eventName == "mousedown") { + console.log("Listening to click"); + } + console.log("Listening to: " + eventName); this._eventRegistry = this._eventRegistry || {}; var listeners = this._eventRegistry[eventName]; diff --git a/lib/ace/linking.js b/lib/ace/linking.js new file mode 100644 index 00000000000..f17ff519c9d --- /dev/null +++ b/lib/ace/linking.js @@ -0,0 +1,154 @@ +/* ***** 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) { + +// var RangeList = require("./range_list").RangeList; +// var Range = require("./range").Range; +// var Selection = require("./selection").Selection; +var oop = require("./lib/oop"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var onMouseDown = require("./mouse/linking_handler").onMouseDown; +var onMouseMove = require("./mouse/linking_handler").onMouseMove; +var event = require("./lib/event"); +var lang = require("./lib/lang"); + +// Todo: session.find or editor.findVolatile that returns range +var Search = require("./search").Search; +var search = new Search(); + +// extend EditSession +var EditSession = require("./edit_session").EditSession; +(function() { + // this.getSelectionMarkers = function() { + // return this.$selectionMarkers; + // }; +}).call(EditSession.prototype); + +// extend Editor +var Editor = require("./editor").Editor; +(function() { + + this.$onLink = function(e) { + /*%*/ console.log("onLink!"); /*%*/ + }; + +}).call(Editor.prototype); + +// patch +// adds linking support to a session +// exports.onSessionChange = function(e) { +// var session = e.session; +// if (!session.linking) { +// session.linking = new Linking(); +// } + +// var oldSession = e.oldSession; +// if (oldSession) { +// oldSession.linking.removeEventListener("link", this.$onLink); +// } + +// session.linking.on("link", this.$onLink); +// }; + +// Linking(editor) +// adds linking support to the editor +// (note: should be called only once for each editor instance) +function Linking(editor) { + /*%*/ console.log("Linking!"); /*%*/ + // if (editor.$linkingOnSessionChange) + // return; + // editor.$linkingOnSessionChange = exports.onSessionChange.bind(editor); + + // editor.$linkingOnSessionChange(editor); + // editor.on("changeSession", editor.$linkingOnSessionChange); + + editor.on("mousedown", onMouseDown); + editor.on("mousemove", onMouseMove); + // editor.commands.addCommands(commands.defaultCommands); + + addAltCursorListeners(editor); +} + +function addAltCursorListeners(editor){ + var el = editor.textInput.getElement(); + var altCursor = false; + event.addListener(el, "mousemove", function(e) { + /*%*/ console.log("addListener(el!"); /*%*/ + if (e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey)) { + if (!altCursor) { + editor.renderer.setMouseCursor("crosshair"); + altCursor = true; + } + } else if (altCursor) { + reset(); + } + }); + + event.addListener(el, "keyup", reset); + event.addListener(el, "blur", reset); + function reset(e) { + if (altCursor) { + editor.renderer.setMouseCursor(""); + altCursor = false; + // TODO disable menu poping up + // e && e.preventDefault() + } + } +} + +(function() { + oop.implement(this, EventEmitter); +}).call(Linking.prototype); + +exports.Linking = Linking; + + +require("./config").defineOptions(Editor.prototype, "editor", { + enableLinking: { + set: function(val) { + Linking(this); + if (val) { + this.on("changeSession", this.$linkingOnSessionChange); + this.on("mousedown", onMouseDown); + this.on("mousemove", onMouseMove); + } else { + this.off("changeSession", this.$linkingOnSessionChange); + this.off("mousedown", onMouseDown); + this.off("mousemove", onMouseMove); + } + }, + value: true + } +}) + + + +}); diff --git a/lib/ace/mouse/linking_handler.js b/lib/ace/mouse/linking_handler.js new file mode 100644 index 00000000000..e207ec59b39 --- /dev/null +++ b/lib/ace/mouse/linking_handler.js @@ -0,0 +1,89 @@ +/* ***** 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) { + +var event = require("../lib/event"); + + +// mouse +function isSamePoint(p1, p2) { + return p1.row == p2.row && p1.column == p2.column; +} + +function onMouseMove(e) { + /*%*/ console.log("onMouseMove!"); /*%*/ +} + +function onMouseDown(e) { + /*%*/ console.log("onMouseDown!"); /*%*/ + var ev = e.domEvent; + var alt = ev.altKey; + var shift = ev.shiftKey; + var ctrl = e.getAccelKey(); + var button = e.getButton(); + + if (!ctrl || alt || shift) { + return + } + + var editor = e.editor; + var selection = editor.selection; + var pos = e.getDocumentPosition(); + var cursor = selection.getCursor(); + var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor)); + + var mouseX = e.x, mouseY = e.y; + var onMouseSelection = function(e) { + mouseX = e.clientX; + mouseY = e.clientY; + }; + + var blockSelect = function() { + /*%*/ console.log("blockSelect!"); /*%*/ + }; + + var session = editor.session; + var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); + var screenCursor = screenAnchor; + + + + if (ctrl && !shift && !alt && button == 0) { + /*%*/ console.log("ctrl && !shift && !alt && button == 0!"); /*%*/ + return e.preventDefault(); + } +} + + +exports.onMouseMove = onMouseMove; +exports.onMouseDown = onMouseDown; + +}); From 1c48f2a8248431a14e71e5aacdff8b341380aab8 Mon Sep 17 00:00:00 2001 From: Eric Arnold Date: Mon, 28 Apr 2014 23:38:09 -0700 Subject: [PATCH 3/5] Cleaned up. --- lib/ace/linking.js | 85 -------------------------------- lib/ace/mouse/linking_handler.js | 50 +++++-------------- 2 files changed, 13 insertions(+), 122 deletions(-) diff --git a/lib/ace/linking.js b/lib/ace/linking.js index f17ff519c9d..5e95fc9b5a3 100644 --- a/lib/ace/linking.js +++ b/lib/ace/linking.js @@ -30,98 +30,18 @@ define(function(require, exports, module) { -// var RangeList = require("./range_list").RangeList; -// var Range = require("./range").Range; -// var Selection = require("./selection").Selection; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var onMouseDown = require("./mouse/linking_handler").onMouseDown; var onMouseMove = require("./mouse/linking_handler").onMouseMove; -var event = require("./lib/event"); -var lang = require("./lib/lang"); - -// Todo: session.find or editor.findVolatile that returns range -var Search = require("./search").Search; -var search = new Search(); - -// extend EditSession -var EditSession = require("./edit_session").EditSession; -(function() { - // this.getSelectionMarkers = function() { - // return this.$selectionMarkers; - // }; -}).call(EditSession.prototype); - -// extend Editor var Editor = require("./editor").Editor; -(function() { - - this.$onLink = function(e) { - /*%*/ console.log("onLink!"); /*%*/ - }; - -}).call(Editor.prototype); - -// patch -// adds linking support to a session -// exports.onSessionChange = function(e) { -// var session = e.session; -// if (!session.linking) { -// session.linking = new Linking(); -// } - -// var oldSession = e.oldSession; -// if (oldSession) { -// oldSession.linking.removeEventListener("link", this.$onLink); -// } - -// session.linking.on("link", this.$onLink); -// }; // Linking(editor) // adds linking support to the editor // (note: should be called only once for each editor instance) function Linking(editor) { - /*%*/ console.log("Linking!"); /*%*/ - // if (editor.$linkingOnSessionChange) - // return; - // editor.$linkingOnSessionChange = exports.onSessionChange.bind(editor); - - // editor.$linkingOnSessionChange(editor); - // editor.on("changeSession", editor.$linkingOnSessionChange); - editor.on("mousedown", onMouseDown); editor.on("mousemove", onMouseMove); - // editor.commands.addCommands(commands.defaultCommands); - - addAltCursorListeners(editor); -} - -function addAltCursorListeners(editor){ - var el = editor.textInput.getElement(); - var altCursor = false; - event.addListener(el, "mousemove", function(e) { - /*%*/ console.log("addListener(el!"); /*%*/ - if (e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey)) { - if (!altCursor) { - editor.renderer.setMouseCursor("crosshair"); - altCursor = true; - } - } else if (altCursor) { - reset(); - } - }); - - event.addListener(el, "keyup", reset); - event.addListener(el, "blur", reset); - function reset(e) { - if (altCursor) { - editor.renderer.setMouseCursor(""); - altCursor = false; - // TODO disable menu poping up - // e && e.preventDefault() - } - } } (function() { @@ -130,17 +50,14 @@ function addAltCursorListeners(editor){ exports.Linking = Linking; - require("./config").defineOptions(Editor.prototype, "editor", { enableLinking: { set: function(val) { Linking(this); if (val) { - this.on("changeSession", this.$linkingOnSessionChange); this.on("mousedown", onMouseDown); this.on("mousemove", onMouseMove); } else { - this.off("changeSession", this.$linkingOnSessionChange); this.off("mousedown", onMouseDown); this.off("mousemove", onMouseMove); } @@ -149,6 +66,4 @@ require("./config").defineOptions(Editor.prototype, "editor", { } }) - - }); diff --git a/lib/ace/mouse/linking_handler.js b/lib/ace/mouse/linking_handler.js index e207ec59b39..e71a036a772 100644 --- a/lib/ace/mouse/linking_handler.js +++ b/lib/ace/mouse/linking_handler.js @@ -32,57 +32,33 @@ define(function(require, exports, module) { var event = require("../lib/event"); - -// mouse -function isSamePoint(p1, p2) { - return p1.row == p2.row && p1.column == p2.column; -} - function onMouseMove(e) { - /*%*/ console.log("onMouseMove!"); /*%*/ + var editor = e.editor; + var ev = e.domEvent; + var alt = ev.altKey; + var shift = ev.shiftKey; + var ctrl = e.getAccelKey(); + + if (!ctrl || alt || shift) return; } function onMouseDown(e) { - /*%*/ console.log("onMouseDown!"); /*%*/ var ev = e.domEvent; var alt = ev.altKey; var shift = ev.shiftKey; var ctrl = e.getAccelKey(); var button = e.getButton(); - if (!ctrl || alt || shift) { - return - } - - var editor = e.editor; - var selection = editor.selection; - var pos = e.getDocumentPosition(); - var cursor = selection.getCursor(); - var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor)); - - var mouseX = e.x, mouseY = e.y; - var onMouseSelection = function(e) { - mouseX = e.clientX; - mouseY = e.clientY; - }; - - var blockSelect = function() { - /*%*/ console.log("blockSelect!"); /*%*/ - }; - - var session = editor.session; - var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); - var screenCursor = screenAnchor; + if (button == 0 && ctrl && !alt && !shift) { + var editor = e.editor; + var docPos = e.getDocumentPosition(); + var session = editor.session; + var token = session.getTokenAt(docPos.row, docPos.column); - - - if (ctrl && !shift && !alt && button == 0) { - /*%*/ console.log("ctrl && !shift && !alt && button == 0!"); /*%*/ - return e.preventDefault(); + editor._emit("linked", {position: docPos, token: token}); } } - exports.onMouseMove = onMouseMove; exports.onMouseDown = onMouseDown; From 20d50f2c0b938411cc5dab6fab4c1da7992bcfa8 Mon Sep 17 00:00:00 2001 From: Eric Arnold Date: Tue, 29 Apr 2014 12:51:59 -0700 Subject: [PATCH 4/5] Cleaned up old work and added Linking to ace.js --- Ace.sublime-workspace | 450 ----------------------------------- demo/kitchen-sink/layout.js | 2 - lib/ace/ace.js | 2 + lib/ace/css/editor.css | 4 - lib/ace/lib/event_emitter.js | 7 - lib/ace/undomanager.js | 1 - 6 files changed, 2 insertions(+), 464 deletions(-) delete mode 100644 Ace.sublime-workspace diff --git a/Ace.sublime-workspace b/Ace.sublime-workspace deleted file mode 100644 index ad07a39ff06..00000000000 --- a/Ace.sublime-workspace +++ /dev/null @@ -1,450 +0,0 @@ -{ - "auto_complete": - { - "selected_items": - [ - [ - "for", - "for for (…) {…}" - ], - [ - "backg", - "background_backup" - ], - [ - "mou", - "mount_point" - ] - ] - }, - "buffers": - [ - ], - "build_system": "", - "command_palette": - { - "height": 27.0, - "selected_items": - [ - [ - "Snippet: ", - "Snippet: My Fancy Snippet" - ], - [ - "key", - "Preferences: Key Bindings - Default" - ] - ], - "width": 467.0 - }, - "console": - { - "height": 439.0, - "history": - [ - "view.run_command('prefixr')", - "view.run_command('example')", - "view.run_command()", - "view.run_command('example')", - "import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())" - ] - }, - "distraction_free": - { - "menu_visible": true, - "show_minimap": false, - "show_open_files": false, - "show_tabs": false, - "side_bar_visible": false, - "status_bar_visible": false - }, - "file_history": - [ - "/Users/ericarnold/Sites/ace/lib/ace/layer/text.js", - "/Users/ericarnold/Sites/ace/lib/ace/css/editor.css", - "/Users/ericarnold/Sites/ace/lib/ace/tokenizer.js", - "/Users/ericarnold/Sites/ace/lib/ace/edit_session/fold_line.js", - "/Users/ericarnold/Sites/ace/lib/ace/token_iterator.js", - "/Users/ericarnold/Sites/ace/lib/ace/commands/default_commands.js", - "/Users/ericarnold/Sites/ace/lib/ace/mouse/default_gutter_handler.js", - "/Users/ericarnold/Sites/ace/lib/ace/keyboard/vim/commands.js", - "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/Trace/Trace.py", - "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/Label/Label.py", - "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/Default (OSX).sublime-keymap", - "/Users/ericarnold/Sites/ace/lib/ace/line_widgets.js", - "/Users/ericarnold/Sites/ace/lib/ace/ext/error_marker.js", - "/Users/ericarnold/Sites/ace/lib/ace/edit_session/fold.js", - "/Users/ericarnold/Sites/ace/lib/ace/edit_session/folding.js", - "/Users/ericarnold/Sites/ace/lib/ace/document.js", - "/Users/ericarnold/Sites/ace/lib/ace/editor.js", - "/Users/ericarnold/Documents/projects/Spark/Ace.sublime-workspace", - "/Users/ericarnold/Sites/ace/lib/ace/edit_session.js", - "/Users/ericarnold/Sites/ace/api/token_iterator.html", - "/Users/ericarnold/Sites/ace/lib/ace/tokenizer_test.js", - "/Users/ericarnold/Sites/ace/api/tokenizer.html", - "/Users/ericarnold/Sites/ace/stationary_tooltip_option.patch", - "/Users/ericarnold/Sites/ace/lib/ace/mode/_test/text_xml.txt", - "/Users/ericarnold/Sites/ace/lib/ace/mode/_test/tokens_ejs.json", - "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/traceLabel.js.sublime-macro", - "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/temp.sublime-macro", - "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/Prefixr/Prefixr.py", - "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/Default/Default (OSX).sublime-keymap", - "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/traceLabel.sublime-snippet", - "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/traceLabel.py", - "/Users/ericarnold/src/ace/lib/ace/mouse/default_gutter_handler.js", - "/Users/ericarnold/src/ace/lib/ace/mouse/mouse_handler.js", - "/Users/ericarnold/src/ace/kitchen-sink.html", - "/Users/ericarnold/src/ace/lib/ace/editor.js", - "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/Trace Label", - "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/Preferences.sublime-settings", - "/Users/ericarnold/Sites/ace/lib/ace/css/codefolding-fold-button-states.png", - "/Users/ericarnold/Sites/ace/demo/kitchen-sink/demo.js", - "/Users/ericarnold/src/spark/ide/app/packages/ace/src/js/ace.js", - "/Users/ericarnold/src/BUILD_BAK", - "/Users/ericarnold/bin/scripts/setup_local_g3", - "/Users/ericarnold/Library/Application Support/Sublime Text 3/Packages/User/shell.function.sublime-snippet", - "/Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini", - "/Users/ericarnold/bin/setup commands", - "/Users/ericarnold/.profile", - "/Users/ericarnold/bin/scripts/events/onEclipseSave", - "/Users/ericarnold/bin/test_failing", - "/usr/local/google/home/ericarnold/g3/dart/google3/third_party/dart_lang/trunk/BUILD", - "/Users/ericarnold/Documents/projects/local.sublime-project", - "/usr/local/google/home/ericarnold/g3/dart/workspaces/Dart Grok Workspace/.metadata/.log", - "/Users/ericarnold/src/google3_baks/bak_1379709893.patch", - "/Users/ericarnold/src/google3_baks/git_1379599559.patch", - "/Users/ericarnold/ls", - "/Users/ericarnold/bin/scripts/tests/trap_test", - "/Users/ericarnold/bin/scripts/backup", - "/usr/local/google/home/ericarnold/g3/dart/dart/test/testdart.dart", - "/usr/local/google/home/ericarnold/g3/dart/dart/test/Abc.dart", - "/Volumes/Personal/ericarnold/Documents/clients/GOOG/Admin/GOOG May .. July 2013 trips" - ], - "find": - { - "height": 35.0 - }, - "find_in_files": - { - "height": 93.0, - "where_history": - [ - "*.js", - "*.css", - "*.js", - "", - "*.js", - "", - "*.dart", - "" - ] - }, - "find_state": - { - "case_sensitive": false, - "find_history": - [ - "project", - "value: .*placeholder", - "token\\.value =", - "token.value =.*placeholder", - "placeholder =", - "placeholder", - "ace_fold", - "updateLines", - "renderLine", - "callback", - "\",\"", - "\" + \",", - "\" +", - "callback", - "fold", - "function Fold", - ".walk", - "fold\"", - "\"fold\"", - "walk", - "getFoldLineTokens", - "fold", - "placeholder", - ".value", - "token", - "token.value", - "new Token", - "fold", - "renderToken", - "value", - "token", - "renderToken", - "replaceFunc", - "\"fold\"", - "fold", - "golf", - "\"fold\"", - "renderToken", - "foldData", - "updateFoldWidgets", - "foldWidgets", - "foldwidg", - "addLineWidget", - "changeFold", - "alt+t", - "foldLines", - "removeFold", - "addFold", - "console", - "placeholder", - "size", - "command", - "tab", - "console", - "`", - ".py", - "gutterElement", - "Tooltip", - "scope", - "-F1", - "\\bwidget", - "\\bWidget", - "\\bFoldWidget", - "FoldWidget", - "ace_fold", - "expand", - "expand-marker", - "codefolding-fold-button-states", - "placeholder", - "addFold", - "foldwidget", - "onFoldWidgetClick", - "widget", - "addFold", - "placeholder", - "addFold", - "fold", - "widget", - "toggleFold", - "-F1", - "-F2", - "F2", - "FoldWidget", - "fold", - "foldselection", - "fold selection", - "F1", - "foldwidget", - "fold", - "folding", - "setShowFoldWidgets", - "Widget", - "character", - "select", - "cursor", - "require", - "moveToo", - "moveTool", - "mousewheel", - "follow", - "mouseHandler", - "follows", - "hideTooltip", - "focusTimout", - "highlightGutterLine", - "setHighlightGutterLine", - "tGutter", - "gutter", - "showInvisib", - "defineOptions", - "^var [A-Z][a-zA-Z]* = function\\(", - "var [A-Z][a-zA-Z]* = function\\(", - "highlightActiveLi", - "config", - "exports", - "\\bace\\.", - "\\bace.", - "ace.", - "ACE_NAMESPACE", - "exportAce", - "ace", - "editSession", - "export", - "&& )", - "rect", - "moveTooltip", - "annotation", - "showTooltip" - ], - "highlight": true, - "in_selection": false, - "preserve_case": false, - "regex": true, - "replace_history": - [ - "", - " " - ], - "reverse": false, - "show_context": true, - "use_buffer2": false, - "whole_word": false, - "wrap": true - }, - "groups": - [ - { - "sheets": - [ - ] - } - ], - "incremental_find": - { - "height": 34.0 - }, - "input": - { - "height": 31.0 - }, - "layout": - { - "cells": - [ - [ - 0, - 0, - 1, - 1 - ] - ], - "cols": - [ - 0.0, - 1.0 - ], - "rows": - [ - 0.0, - 1.0 - ] - }, - "menu_visible": true, - "output.find_results": - { - "height": 485.0 - }, - "project": "Ace.sublime-project", - "replace": - { - "height": 64.0 - }, - "save_all_on_build": true, - "select_file": - { - "height": 0.0, - "selected_items": - [ - [ - "tokeniterator", - "lib/ace/token_iterator.js" - ], - [ - "text.", - "lib/ace/layer/text.js" - ], - [ - "default_gutter", - "lib/ace/mouse/default_gutter_handler.js" - ], - [ - "docu", - "lib/ace/document.js" - ], - [ - "test_", - "🏠/bin/test_failing" - ], - [ - "test", - "🏠/bin/test_failing" - ], - [ - "fail", - "🏠/bin/test_failing" - ], - [ - "", - "🏠/bin/test_failing" - ], - [ - "onecl", - "🏠/bin/scripts/events/onEclipseSave" - ], - [ - "test_fa", - "🏠/bin/test_failing" - ], - [ - "onec", - "🏠/bin/scripts/events/onEclipseSave" - ], - [ - "eclip", - "eclipse.ini/eclipse.ini" - ], - [ - "on", - "🏠/bin/scripts/events/onEclipseSave" - ], - [ - "keymap", - "Sublime.../User/Default (OSX).sublime-keymap" - ], - [ - "onecli", - "🏠/bin/scripts/events/onEclipseSave" - ], - [ - "setup", - "scripts/setup_local_g3" - ] - ], - "width": 0.0 - }, - "select_project": - { - "height": 500.0, - "selected_items": - [ - ], - "width": 380.0 - }, - "select_symbol": - { - "height": 27.0, - "selected_items": - [ - ], - "width": 392.0 - }, - "settings": - { - "last_automatic_layout": - [ - [ - 0, - 0, - 1, - 1 - ] - ] - }, - "show_minimap": true, - "show_open_files": false, - "show_tabs": true, - "side_bar_visible": true, - "side_bar_width": 290.0, - "status_bar_visible": true, - "template_settings": - { - "max_columns": 2 - } -} diff --git a/demo/kitchen-sink/layout.js b/demo/kitchen-sink/layout.js index 1defcb938f5..e43915bb8c8 100644 --- a/demo/kitchen-sink/layout.js +++ b/demo/kitchen-sink/layout.js @@ -10,7 +10,6 @@ var UndoManager = require("ace/undomanager").UndoManager; var Renderer = require("ace/virtual_renderer").VirtualRenderer; var Editor = require("ace/editor").Editor; var MultiSelect = require("ace/multi_select").MultiSelect; -var Linking = require("ace/linking").Linking; dom.importCssString("\ splitter {\ @@ -118,7 +117,6 @@ exports.singleLineEditor = function(el) { renderer.setStyle("ace_one-line"); var editor = new Editor(renderer); new MultiSelect(editor); - new Linking(editor); editor.session.setUndoManager(new UndoManager()); editor.setShowPrintMargin(false); diff --git a/lib/ace/ace.js b/lib/ace/ace.js index a2261355c35..850f44f6454 100644 --- a/lib/ace/ace.js +++ b/lib/ace/ace.js @@ -47,6 +47,7 @@ var EditSession = require("./edit_session").EditSession; var UndoManager = require("./undomanager").UndoManager; var Renderer = require("./virtual_renderer").VirtualRenderer; var MultiSelect = require("./multi_select").MultiSelect; +var Linking = require("ace/linking").Linking; // The following require()s are for inclusion in the built ace file require("./worker/worker_client"); @@ -87,6 +88,7 @@ exports.edit = function(el) { var editor = new Editor(new Renderer(el)); new MultiSelect(editor); + new Linking(editor); editor.setSession(doc); var env = { diff --git a/lib/ace/css/editor.css b/lib/ace/css/editor.css index 2bcda45cb1f..a2b7475ecfb 100644 --- a/lib/ace/css/editor.css +++ b/lib/ace/css/editor.css @@ -1,7 +1,3 @@ -.ace_identifier { - color: blue; -} - .ace_editor { position: relative; overflow: hidden; diff --git a/lib/ace/lib/event_emitter.js b/lib/ace/lib/event_emitter.js index 1f685f22c64..b98601450a0 100644 --- a/lib/ace/lib/event_emitter.js +++ b/lib/ace/lib/event_emitter.js @@ -55,10 +55,7 @@ EventEmitter._dispatchEvent = function(eventName, e) { if (!e.preventDefault) e.preventDefault = preventDefault; - listeners = listeners.slice(); - console.log(listeners.length); - for (var i=0; i Date: Tue, 29 Apr 2014 16:55:25 -0700 Subject: [PATCH 5/5] Link even if alt or shift is down. Changed name of event to "link" --- lib/ace/mouse/linking_handler.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/ace/mouse/linking_handler.js b/lib/ace/mouse/linking_handler.js index e71a036a772..b139393e909 100644 --- a/lib/ace/mouse/linking_handler.js +++ b/lib/ace/mouse/linking_handler.js @@ -39,7 +39,14 @@ function onMouseMove(e) { var shift = ev.shiftKey; var ctrl = e.getAccelKey(); - if (!ctrl || alt || shift) return; + if (ctrl) { + var editor = e.editor; + var docPos = e.getDocumentPosition(); + var session = editor.session; + var token = session.getTokenAt(docPos.row, docPos.column); + + editor._emit("link_hover", {position: docPos, token: token}); + } } function onMouseDown(e) { @@ -49,13 +56,13 @@ function onMouseDown(e) { var ctrl = e.getAccelKey(); var button = e.getButton(); - if (button == 0 && ctrl && !alt && !shift) { + if (button == 0 && ctrl) { var editor = e.editor; var docPos = e.getDocumentPosition(); var session = editor.session; var token = session.getTokenAt(docPos.row, docPos.column); - editor._emit("linked", {position: docPos, token: token}); + editor._emit("link", {position: docPos, token: token}); } }