code: function duplicateText(editor) {
          editor = editor || EditorManager.getFocusedEditor();
          if (!editor) {
              return;
          }
  
          var selections = editor.getSelections(),
              delimiter = "",
              edits = [],
              rangeSels = [],
              cursorSels = [],
              doc = editor.document;
  
          // When there are multiple selections, we want to handle all the cursors first (duplicating
          // their lines), then all the ranges (duplicating the ranges).
          _.each(selections, function (sel) {
              if (CodeMirror.cmpPos(sel.start, sel.end) === 0) {
                  cursorSels.push(sel);
              } else {
                  rangeSels.push(sel);
              }
          });
  
          var cursorLineSels = editor.convertToLineSelections(cursorSels);
          _.each(cursorLineSels, function (lineSel, index) {
              var sel = lineSel.selectionForEdit;
              if (sel.end.line === editor.lineCount()) {
                  delimiter = "\n";
              }
              // Don't need to explicitly track selections since we are doing the edits in such a way that
              // the existing selections will get appropriately updated.
              edits.push({edit: {text: doc.getRange(sel.start, sel.end) + delimiter, start: sel.start }});
          });
          _.each(rangeSels, function (sel) {
              edits.push({edit: {text: doc.getRange(sel.start, sel.end), start: sel.start }});
          });
  
          doc.doMultipleEdits(edits);
      }
docs: Duplicates the selected text, or current line if no selection. The cursor/selection is left
  on the second copy.