From 3073bdd97a4e55c3fa8c69ecbabdc18c4dd0b3a7 Mon Sep 17 00:00:00 2001
From: Nicolas Kick <nickasd@users.noreply.github.com>
Date: Thu, 13 Jul 2017 20:14:35 +0200
Subject: [PATCH] [sublime keymap] "Add to selection" bindings
 (Ctrl-Alt-Up/Down on Windows, Cmd-Shift-Up/Down on Mac)

---
 keymap/sublime.js | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/keymap/sublime.js b/keymap/sublime.js
index 0ce895587..98266e44f 100644
--- a/keymap/sublime.js
+++ b/keymap/sublime.js
@@ -165,6 +165,23 @@
       cm.state.sublimeFindFullWord = cm.doc.sel;
   };
 
+  function addCursorToSelection(cm, dir) {
+    var ranges = cm.listSelections(), newRanges = [];
+    for (var i = 0; i < ranges.length; i++) {
+      var range = ranges[i];
+      var newAnchor = cm.findPosV(range.anchor, dir, "line");
+      var newHead = cm.findPosV(range.head, dir, "line");
+      var newRange = {anchor: newAnchor, head: newHead};
+      newRanges.push(range);
+      newRanges.push(newRange);
+    }
+    cm.setSelections(newRanges);
+  }
+
+  var addCursorToLineCombo = mac ? "Shift-Cmd" : 'Alt-Ctrl';
+  cmds[map[addCursorToLineCombo + "Up"] = "addCursorToPrevLine"] = function(cm) { addCursorToSelection(cm, -1); };
+  cmds[map[addCursorToLineCombo + "Down"] = "addCursorToNextLine"] = function(cm) { addCursorToSelection(cm, 1); };
+
   function isSelectedRange(ranges, from, to) {
     for (var i = 0; i < ranges.length; i++)
       if (ranges[i].from() == from && ranges[i].to() == to) return true
-- 
GitLab