From ee76ccad197074bac96df9fd58467581b2980e5a Mon Sep 17 00:00:00 2001 From: Robert Krahn Date: Sun, 26 May 2013 18:52:57 -0700 Subject: [PATCH] emacs: add contents of copy/cut editor events to killring --- lib/ace/keyboard/emacs.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/ace/keyboard/emacs.js b/lib/ace/keyboard/emacs.js index 136ec81b..88e877e7 100644 --- a/lib/ace/keyboard/emacs.js +++ b/lib/ace/keyboard/emacs.js @@ -112,6 +112,8 @@ exports.handler.attach = function(editor) { editor.commands.addCommands(commands); exports.handler.platform = editor.commands.platform; editor.$emacsModeHandler = this; + editor.addEventListener('copy', this.onCopy); + editor.addEventListener('paste', this.onPaste); }; exports.handler.detach = function(editor) { @@ -122,6 +124,8 @@ exports.handler.detach = function(editor) { editor.removeEventListener("changeSession", $kbSessionChange); editor.unsetStyle("emacs-mode"); editor.commands.removeCommands(commands); + editor.removeEventListener('copy', this.onCopy); + editor.removeEventListener('paste', this.onPaste); }; var $kbSessionChange = function(e) { @@ -157,6 +161,13 @@ combinations.forEach(function(c) { eMods[hashId] = c.toLowerCase() + "-"; }); +exports.handler.onCopy = function(e, editor) { + if (editor.$handlesEmacsOnCopy) return; + editor.$handlesEmacsOnCopy = true; + exports.handler.commands.killRingSave.exec(editor); + delete editor.$handlesEmacsOnCopy; +} + exports.handler.bindKey = function(key, command) { if (!key) return;