Cut Current Paragraph
Shared by @jpburt
The current paragraph (closest to the cursor) is cut to the clipboard.
Script
var drafts = {
getText: function () {
return editor.getText(); //1W
},
setText: function (strText) {
editor.setText(strText); //1W
return true;
},
getSelectedText: function () {
return editor.getSelectedText(); //1W
},
setSelectedText: function (strText) {
editor.replaceSelection(strText); //1W
return true;
},
getTextInRange: function (iStart, iLength) {
return editor.getText().substring(iStart, iStart + iLength);
},
setTextInRange: function (iStart, iLength, strText) {
editor.replaceTextInRange(iStart, iStart + iLength, strText); // 1W
return true;
},
getSelectedLineRange: function () {
var lstStartEnd = editor.getSelectedLineRange(), // 1W
iStart = lstStartEnd[0];
return [iStart, lstStartEnd[1]-iStart];
},
getSelectedRange: function () {
var lstStartEnd = editor.getSelectedRange(), // 1W
iStart = lstStartEnd[0];
return [iStart, lstStartEnd[1]-iStart];
},
setSelectedRange: function (iStart, iLength) {
editor.setSelectedRange(iStart, iStart + iLength); // 1W
return true;
},
getClipboard: function () {
return app.getClipboard(); // 1W
},
setClipboard: function (strText) {
app.setClipboard(strText); // 1w
return true;
}
}
function overlap(lstA, lstB) {
// NOT IF THIS ENDS BEFORE THAT STARTS,
// OR STARTS AFTER THAT ENDS
return !(lstA[1] < lstB[0] || lstA[0] > lstB[1]);
}
{
var rgxGap = /(\n{2,})/,
lstParts = drafts.getText().split(rgxGap),
lstSeln = drafts.getSelectedLineRange(),
iSelnStart = lstSeln[0],
iSelnEnd = iSelnStart + lstSeln[1],
lstBlocks = [],
strBlock, strGap,
iFrom = 0,
iTo, lngBlock, lngGap;
// Find first overlap with a selection edge
for (var i = 0, lng = lstParts.length; i < lng; i += 2) {
strBlock = lstParts[i];
strGap = lstParts[i + 1] || '';
lngBlock = strBlock.length;
lngGap = strGap.length;
iTo = iFrom + lngBlock;
if (overlap([iSelnStart, iSelnEnd], [iFrom, iTo]))
lstBlocks.push({
txt: strBlock,
start: iFrom,
end: iFrom + lngBlock
});
iFrom = iTo + lngGap;
if (iFrom > iSelnEnd) break;
}
// extend selection to just after last gap
// and just before next gap
// iSelnStart = lstBlocks[0].start;
// drafts.setSelectedRange(iSelnStart, lstBlocks[lstBlocks.length - 1].end - iSelnStart);
// return true;
//return lstParts.toString();
}
drafts.setClipboard(drafts.getTextInRange(iSelnStart, lstBlocks[lstBlocks.length - 1].end - iSelnStart));
drafts.setTextInRange(iSelnStart, lstBlocks[lstBlocks.length - 1].end - iSelnStart, null);