From eab60612820383437ce83ae57cb8578470e0a0f5 Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 6 Sep 2012 22:33:19 +0400 Subject: [PATCH 1/9] fix regression in drawing foldwidgets on wrapped lines --- lib/ace/css/editor.css | 3 +-- lib/ace/layer/gutter.js | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ace/css/editor.css b/lib/ace/css/editor.css index b2117562..9891976a 100644 --- a/lib/ace/css/editor.css +++ b/lib/ace/css/editor.css @@ -262,9 +262,8 @@ margin: 0 -12px 0 1px; display: inline-block; - height: 100%; width: 11px; - vertical-align: bottom; + vertical-align: top; background-image: url("data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAe%8A%B1%0D%000%0C%C2%F2%2CK%96%BC%D0%8F9%81%88H%E9%D0%0E%96%C0%10%92%3E%02%80%5E%82%E4%A9*-%EEsw%C8%CC%11%EE%96w%D8%DC%E9*Eh%0C%151(%00%00%00%00IEND%AEB%60%82"); background-repeat: no-repeat; diff --git a/lib/ace/layer/gutter.js b/lib/ace/layer/gutter.js index 2d7e89d7..be34f3c9 100644 --- a/lib/ace/layer/gutter.js +++ b/lib/ace/layer/gutter.js @@ -131,6 +131,7 @@ var Gutter = function(parentEl) { html.push( "" ); } From c54da935ab98405e376bdacf4a3969dbadc999de Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 6 Sep 2012 22:34:48 +0400 Subject: [PATCH 2/9] create dom elements only for visible cursors --- lib/ace/layer/cursor.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/ace/layer/cursor.js b/lib/ace/layer/cursor.js index c88fdce7..eb36e745 100644 --- a/lib/ace/layer/cursor.js +++ b/lib/ace/layer/cursor.js @@ -148,6 +148,10 @@ var Cursor = function(parentEl) { for (var i = selections.length; i--; ) { sel = selections[i]; var pixelPos = this.getPixelPosition(sel.cursor, true); + if ((pixelPos.top > config.height + config.offset || + pixelPos.top < -config.offset) && i > 1) { + continue; + } var style = (this.cursors[cursorIndex++] || this.addCursor()).style; From 1d04dcf5c98ed029f465fea917a6abe912f2d11a Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 6 Sep 2012 23:04:12 +0400 Subject: [PATCH 3/9] small cleanup --- lib/ace/editor.js | 9 ++------- lib/ace/scrollbar.js | 2 +- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/lib/ace/editor.js b/lib/ace/editor.js index ad86e803..d2e1725f 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -39,7 +39,6 @@ var useragent = require("./lib/useragent"); var TextInput = require("./keyboard/textinput").TextInput; var MouseHandler = require("./mouse/mouse_handler").MouseHandler; var FoldHandler = require("./mouse/fold_handler").FoldHandler; -//var TouchHandler = require("./touch_handler").TouchHandler; var KeyBinding = require("./keyboard/keybinding").KeyBinding; var EditSession = require("./edit_session").EditSession; var Search = require("./search").Search; @@ -74,12 +73,8 @@ var Editor = function(renderer, session) { this.keyBinding = new KeyBinding(this); // TODO detect touch event support - if (useragent.isIPad) { - //this.$mouseHandler = new TouchHandler(this); - } else { - this.$mouseHandler = new MouseHandler(this); - new FoldHandler(this); - } + this.$mouseHandler = new MouseHandler(this); + new FoldHandler(this); this.$blockScrolling = 0; this.$search = new Search().set({ diff --git a/lib/ace/scrollbar.js b/lib/ace/scrollbar.js index 7ee4da6f..edb37ea9 100644 --- a/lib/ace/scrollbar.js +++ b/lib/ace/scrollbar.js @@ -123,7 +123,7 @@ var ScrollBar = function(parent) { * Sets the scroll top of the scroll bar. * **/ - // TODO: on chrome 17+ after for small zoom levels after this function + // TODO: on chrome 17+ for small zoom levels after calling this function // this.element.scrollTop != scrollTop which makes page to scroll up. this.setScrollTop = function(scrollTop) { this.element.scrollTop = scrollTop; From e00da55c9289373b58311147a342d387a38f3537 Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 6 Sep 2012 23:28:07 +0400 Subject: [PATCH 4/9] vim {} motions --- lib/ace/keyboard/vim/maps/motions.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/ace/keyboard/vim/maps/motions.js b/lib/ace/keyboard/vim/maps/motions.js index d082e5ce..b8fb12aa 100644 --- a/lib/ace/keyboard/vim/maps/motions.js +++ b/lib/ace/keyboard/vim/maps/motions.js @@ -27,7 +27,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ***** END LICENSE BLOCK ***** */ - + "use strict" define(function(require, exports, module) { @@ -598,6 +598,25 @@ module.exports = { return match; }), + "{": new Motion(function(ed) { + var session = ed.session; + var row = session.selection.lead.row; + while(row > 0 && !/\S/.test(session.getLine(row))) + row--; + while(/\S/.test(session.getLine(row))) + row--; + return {column: 0, row: row}; + }), + "}": new Motion(function(ed) { + var session = ed.session; + var l = session.getLength(); + var row = session.selection.lead.row; + while(row < l && !/\S/.test(session.getLine(row))) + row++; + while(/\S/.test(session.getLine(row))) + row++; + return {column: 0, row: row}; + }), "ctrl-d": { nav: function(editor, range, count, param) { editor.selection.clearSelection(); From 393e42b439a3762d5d203d6084c51c1c4d611f2f Mon Sep 17 00:00:00 2001 From: nightwing Date: Sat, 8 Sep 2012 16:26:42 +0400 Subject: [PATCH 5/9] emacs recenter-top-bottom --- lib/ace/keyboard/emacs.js | 17 ++++++++++++++++- lib/ace/virtual_renderer.js | 4 +++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/ace/keyboard/emacs.js b/lib/ace/keyboard/emacs.js index 5fa7a315..9e3b5d89 100644 --- a/lib/ace/keyboard/emacs.js +++ b/lib/ace/keyboard/emacs.js @@ -212,7 +212,8 @@ exports.emacsKeys = { "S-C-Home" : "selecttostart", "S-C-End" : "selecttoend", - "C-l|M-s" : "centerselection", + "C-l" : "recenterTopBottom", + "M-s" : "centerselection", "M-g": "gotoline", "C-x C-p": "selectall", @@ -270,6 +271,20 @@ exports.emacsKeys = { exports.handler.bindKeys(exports.emacsKeys); exports.handler.addCommands({ + recenterTopBottom: function(editor) { + var renderer = editor.renderer; + var pos = renderer.$cursorLayer.getPixelPosition(); + var h = renderer.$size.scrollerHeight - renderer.lineHeight; + var scrollTop = renderer.scrollTop; + if (Math.abs(pos.top - scrollTop) < 2) { + scrollTop = pos.top - h; + } else if (Math.abs(pos.top - scrollTop - h * 0.5) < 2) { + scrollTop = pos.top; + } else { + scrollTop = pos.top - h * 0.5; + } + editor.session.setScrollTop(scrollTop); + }, selectRectangularRegion: function(editor) { editor.multiSelect.toggleBlockSelection(); }, diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index a97860d1..5ec1ffc5 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -1038,9 +1038,11 @@ var VirtualRenderer = function(container, theme) { cursor = {row: cursor, column: 0}; var pos = this.$cursorLayer.getPixelPosition(cursor); - var offset = pos.top - this.$size.scrollerHeight * (alignment || 0); + var h = this.$size.scrollerHeight - this.lineHeight; + var offset = pos.top - h * (alignment || 0); this.session.setScrollTop(offset); + return offset; }; this.STEPS = 8; From e0318e39c93f7dd09ea291df1fd914ad652c9cdc Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 9 Sep 2012 16:04:23 +0400 Subject: [PATCH 6/9] fix emacs cut command --- lib/ace/commands/command_manager.js | 2 +- lib/ace/keyboard/emacs.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ace/commands/command_manager.js b/lib/ace/commands/command_manager.js index ee7c8561..26863643 100644 --- a/lib/ace/commands/command_manager.js +++ b/lib/ace/commands/command_manager.js @@ -25,7 +25,7 @@ var EventEmitter = require("../lib/event_emitter").EventEmitter; var CommandManager = function(platform, commands) { this.platform = platform; - this.commands = {}; + this.commands = this.byName = {}; this.commmandKeyBinding = {}; this.addCommands(commands); diff --git a/lib/ace/keyboard/emacs.js b/lib/ace/keyboard/emacs.js index 9e3b5d89..4c6173e9 100644 --- a/lib/ace/keyboard/emacs.js +++ b/lib/ace/keyboard/emacs.js @@ -338,7 +338,7 @@ exports.handler.addCommands({ }, killRegion: function(editor) { exports.killRing.add(editor.getCopyText()); - editor.cut(); + editor.commands.byName.cut.exec(editor); }, killRingSave: function(editor) { exports.killRing.add(editor.getCopyText()); From e3ead4f3b07448c97f219e1bf53bdec9538df332 Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 9 Sep 2012 16:04:57 +0400 Subject: [PATCH 7/9] workaround for `-` key bug on firefox --- lib/ace/lib/keys.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/ace/lib/keys.js b/lib/ace/lib/keys.js index 8ebfe542..9743ef88 100644 --- a/lib/ace/lib/keys.js +++ b/lib/ace/lib/keys.js @@ -122,6 +122,9 @@ var Keys = (function() { ret.enter = ret["return"]; ret.escape = ret.esc; ret.del = ret["delete"]; + + // workaround for firefox bug + ret[173] = '-'; return ret; })(); From c1f194f8bdfe51431b91be1dca5e67a2b62f7265 Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 9 Sep 2012 13:14:21 +0400 Subject: [PATCH 8/9] cleanup themes --- lib/ace/theme/chrome.css | 11 ++++++----- lib/ace/theme/crimson_editor.css | 4 ++++ lib/ace/theme/dreamweaver.css | 6 +++++- lib/ace/theme/eclipse.css | 4 ++++ lib/ace/theme/github.css | 2 +- lib/ace/theme/monokai.css | 2 +- lib/ace/theme/textmate.css | 21 +++++++++++---------- lib/ace/theme/tomorrow.css | 2 +- lib/ace/theme/tomorrow_night.css | 2 +- lib/ace/theme/tomorrow_night_blue.css | 2 +- lib/ace/theme/tomorrow_night_bright.css | 2 +- lib/ace/theme/tomorrow_night_eighties.css | 2 +- 12 files changed, 37 insertions(+), 23 deletions(-) diff --git a/lib/ace/theme/chrome.css b/lib/ace/theme/chrome.css index 000c4e53..12e14c58 100644 --- a/lib/ace/theme/chrome.css +++ b/lib/ace/theme/chrome.css @@ -17,7 +17,8 @@ background: #e8e8e8; } -.ace-chrome .ace_text-layer { +.ace-chrome .ace_scroller { + background-color: #FFFFFF; } .ace-chrome .ace_cursor { @@ -68,7 +69,7 @@ .ace-chrome .ace_variable.ace_parameter { font-style:italic; -color:#FD971F; + color:#FD971F; } .ace-chrome .ace_line .ace_keyword.ace_operator { color: rgb(104, 118, 135); @@ -102,7 +103,7 @@ color:#FD971F; color: #0000A2; } -.ace-chrome .ace_markup.ace_markupine { +.ace-chrome .ace_markup.ace_underline { text-decoration:underline; } @@ -154,11 +155,11 @@ color:#FD971F; color: rgb(255, 0, 0) } -.ace-chrome .ace_line .ace_string{ +.ace-chrome .ace_line .ace_string { color: #1A1AA6; } -.ace-chrome .ace_entity.ace_other.ace_attribute-name{ +.ace-chrome .ace_entity.ace_other.ace_attribute-name { color: #994409; } diff --git a/lib/ace/theme/crimson_editor.css b/lib/ace/theme/crimson_editor.css index 433ed071..ab8300de 100644 --- a/lib/ace/theme/crimson_editor.css +++ b/lib/ace/theme/crimson_editor.css @@ -22,6 +22,10 @@ background: #e8e8e8; } +.ace-crimson-editor .ace_scroller { + background-color: #FFFFFF; +} + .ace-crimson-editor .ace_text-layer { color: rgb(64, 64, 64); } diff --git a/lib/ace/theme/dreamweaver.css b/lib/ace/theme/dreamweaver.css index 428b587a..ab845390 100644 --- a/lib/ace/theme/dreamweaver.css +++ b/lib/ace/theme/dreamweaver.css @@ -16,6 +16,10 @@ background: #e8e8e8; } +.ace-dreamweaver .ace_scroller { + background-color: #FFFFFF; +} + .ace-dreamweaver .ace_fold { background-color: #757AD8; } @@ -111,7 +115,7 @@ color: #00F; } -.ace-dreamweaver .ace_markup.ace_markupine { +.ace-dreamweaver .ace_markup.ace_underline { text-decoration:underline; } diff --git a/lib/ace/theme/eclipse.css b/lib/ace/theme/eclipse.css index af613b34..27b9a001 100644 --- a/lib/ace/theme/eclipse.css +++ b/lib/ace/theme/eclipse.css @@ -17,6 +17,10 @@ background: #ebebeb; } +.ace-eclipse .ace_scroller { + background-color: #FFFFFF; +} + .ace-eclipse .ace_fold { background-color: rgb(60, 76, 114); } diff --git a/lib/ace/theme/github.css b/lib/ace/theme/github.css index ac4f29ac..6233b427 100644 --- a/lib/ace/theme/github.css +++ b/lib/ace/theme/github.css @@ -117,7 +117,7 @@ border: 1px solid rgb(192, 192, 192); } -.ace-github .ace_gutter_active_line{ +.ace-github .ace_gutter_active_line { background-color : rgba(0, 0, 0, 0.07); } diff --git a/lib/ace/theme/monokai.css b/lib/ace/theme/monokai.css index 02d4fa9d..e28dfb36 100644 --- a/lib/ace/theme/monokai.css +++ b/lib/ace/theme/monokai.css @@ -110,7 +110,7 @@ background-color:#AE81FF; color:#F92672; } -.ace-monokai .ace_storage.ace_type, .ace-monokai .ace_support.ace_type{ +.ace-monokai .ace_storage.ace_type, .ace-monokai .ace_support.ace_type { font-style:italic; color:#66D9EF; } diff --git a/lib/ace/theme/textmate.css b/lib/ace/theme/textmate.css index 7f9f5538..80b9ae1d 100644 --- a/lib/ace/theme/textmate.css +++ b/lib/ace/theme/textmate.css @@ -20,7 +20,8 @@ background-color: #6B72E6; } -.ace-tm .ace_text-layer { +.ace-tm .ace_scroller { + background-color: #FFFFFF; } .ace-tm .ace_cursor { @@ -111,7 +112,7 @@ color: #0000A2; } -.ace-tm .ace_markup.ace_markupine { +.ace-tm .ace_markup.ace_underline { text-decoration:underline; } @@ -123,6 +124,14 @@ color:rgb(185, 6, 144); } +.ace-tm .ace_meta.ace_tag { + color:rgb(0, 22, 142); +} + +.ace-tm .ace_string.ace_regex { + color: rgb(255, 0, 0) +} + .ace-tm .ace_marker-layer .ace_selection { background: rgb(181, 213, 255); } @@ -156,14 +165,6 @@ border: 1px solid rgb(200, 200, 250); } -.ace-tm .ace_meta.ace_tag { - color:rgb(0, 22, 142); -} - -.ace-tm .ace_string.ace_regex { - color: rgb(255, 0, 0) -} - .ace-tm .ace_indent-guide { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y; } diff --git a/lib/ace/theme/tomorrow.css b/lib/ace/theme/tomorrow.css index a9c04182..817795a2 100644 --- a/lib/ace/theme/tomorrow.css +++ b/lib/ace/theme/tomorrow.css @@ -115,7 +115,7 @@ background-color:#8959A8; color:#8959A8; } -.ace-tomorrow .ace_storage.ace_type, .ace-tomorrow .ace_support.ace_type{ +.ace-tomorrow .ace_storage.ace_type, .ace-tomorrow .ace_support.ace_type { color:#8959A8; } diff --git a/lib/ace/theme/tomorrow_night.css b/lib/ace/theme/tomorrow_night.css index 137e35d8..dd836c6d 100644 --- a/lib/ace/theme/tomorrow_night.css +++ b/lib/ace/theme/tomorrow_night.css @@ -115,7 +115,7 @@ background-color:#B798BF; color:#B294BB; } -.ace-tomorrow-night .ace_storage.ace_type, .ace-tomorrow-night .ace_support.ace_type{ +.ace-tomorrow-night .ace_storage.ace_type, .ace-tomorrow-night .ace_support.ace_type { color:#B294BB; } diff --git a/lib/ace/theme/tomorrow_night_blue.css b/lib/ace/theme/tomorrow_night_blue.css index 7a8354bb..a571f673 100644 --- a/lib/ace/theme/tomorrow_night_blue.css +++ b/lib/ace/theme/tomorrow_night_blue.css @@ -115,7 +115,7 @@ background-color:#EBBBFF; color:#EBBBFF; } -.ace-tomorrow-night-blue .ace_storage.ace_type, .ace-tomorrow-night-blue .ace_support.ace_type{ +.ace-tomorrow-night-blue .ace_storage.ace_type, .ace-tomorrow-night-blue .ace_support.ace_type { color:#EBBBFF; } diff --git a/lib/ace/theme/tomorrow_night_bright.css b/lib/ace/theme/tomorrow_night_bright.css index 44d944a5..641bd29a 100644 --- a/lib/ace/theme/tomorrow_night_bright.css +++ b/lib/ace/theme/tomorrow_night_bright.css @@ -115,7 +115,7 @@ background-color:#B798BF; color:#C397D8; } -.ace-tomorrow-night-bright .ace_storage.ace_type, .ace-tomorrow-night-bright .ace_support.ace_type{ +.ace-tomorrow-night-bright .ace_storage.ace_type, .ace-tomorrow-night-bright .ace_support.ace_type { color:#C397D8; } diff --git a/lib/ace/theme/tomorrow_night_eighties.css b/lib/ace/theme/tomorrow_night_eighties.css index 1dfd9ead..ab2659c1 100644 --- a/lib/ace/theme/tomorrow_night_eighties.css +++ b/lib/ace/theme/tomorrow_night_eighties.css @@ -115,7 +115,7 @@ background-color:#CC99CC; color:#CC99CC; } -.ace-tomorrow-night-eighties .ace_storage.ace_type, .ace-tomorrow-night-eighties .ace_support.ace_type{ +.ace-tomorrow-night-eighties .ace_storage.ace_type, .ace-tomorrow-night-eighties .ace_support.ace_type { color:#CC99CC; } From b9c26bcd786b28223f3b848274f8a742274e2a69 Mon Sep 17 00:00:00 2001 From: nightwing Date: Tue, 11 Sep 2012 10:03:32 +0400 Subject: [PATCH 9/9] vim ctrl-[ should behave exactly as esc --- lib/ace/keyboard/vim.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/ace/keyboard/vim.js b/lib/ace/keyboard/vim.js index 0e358c86..5313e44c 100644 --- a/lib/ace/keyboard/vim.js +++ b/lib/ace/keyboard/vim.js @@ -88,7 +88,9 @@ exports.handler = { if (hashId == 1) key = "ctrl-" + key; - if (data.state == "start") { + if ((key == "esc" && hashId == 0) || key == "ctrl-[") { + return {command: coreCommands.stop}; + } else if (data.state == "start") { if (useragent.isMac && this.handleMacRepeat(data, hashId, key)) { hashId = -1; key = data.inputChar; @@ -109,10 +111,7 @@ exports.handler = { return {command: coreCommands.stop}; } } else { - if (key == "esc" || key == "ctrl-[") { - data.state = "start"; - return {command: coreCommands.stop}; - } else if (key == "ctrl-w") { + if (key == "ctrl-w") { return {command: "removewordleft"}; } }