komodokomodoedit

Select text between two bookmarks in Komodo Edit


Let's say I have the following (example) code in combined.js:

/* jQuery, Moment.js, Bootstrap, etc. */

Child.prototype.doSchool = function(data) { // Bookmarked
    var essay = data.essay || {};

    if (essay) {
        var spelling = checkSpelling(essay, EN_US_GRADE_7);

        return spelling.grade();
    }
}

/* Extensive and Turing-complete code base */

var burt = new Child();
if (burt.doSchool({essay: "i like trains"}) < .65) burt.comfort(); // Bookmarked

/* jQuery extensions, Fallout 4, etc. */

The file is bookmarked in Komodo Edit 9.3.x in the locations marked by // inline comments.

Any /* block comments */ indicate thousands of lines of code.

The source between the bookmarks exists in another file, school.inc.js. I want to know if there is an easy way to select all the text between the bookmarks, so that combined.js can be easily updated by pasting the contents of school.inc.js over it without having to use a combining utility.


Solution

  • There is no built in way to do this but you could possible do it by writing a Userscript.

    You'll want to use the Komodo Editor SDK.

    // This assumes you're running the Userscript starting at the first bookmark
    var editor = require("ko/editor");
    var startSelect;
    var endSelect;
    var done = false;
    
    function selectBookmarkRegion(){
        if(editor.bookmarkExists()) { // check if bookmark is set on current line
            startSelect = { // save it's line start
                    line: editor.getLineNumber(),
                    ch: 0
                }; 
        } else {
            alert("Start me on a line with a Bookmark");
        }
    
        editor.goLineDown();
        while(!done){
            if(editor.bookmarkExists())
            {
                endSelect = {
                    line: editor.getLineNumber(),
                    ch: editor.getLineSize()
                };// Save line end
                done = true;
            }
            editor.goLineDown();
            // found a bug as I was writing this.  Will be fixed in the next releases
            if (editor.getLineNumber() + 1 == editor.lineCount())
            {
                done = true;
            }
        }
        editor.setSelection(startSelect, endSelect); // Wrap the selection
    }
    
    selectBookmarkRegion();