SelectNext (Select the next n items)

SelectNext selects a number of items (files and folders) that come after the current selection. It works like Select NEXT, but can select more than one item. I often use it when I want to launch several .url files but need to be gentle with web servers that don't like to get hammered with too many calls at a time.

The command understands two arguments:

NUMITEMS: determines the number of items to select. If omitted, a default of 15 will be used. Given a negative number, the command will work backward, like Select PREV.

NODESELECT: The current selection will be kept. It's the equivalent of pressing Ctrl when selecting items with the mouse.

I use the commands as hotkeys, but of course, they can be put anywhere you want. Here's my setup:

Hotkey as XML
<?xml version="1.0"?>
<button backcol="none" display="label" textcol="none">
	<label>Select Prev 15</label>
	<hotkeys>
		<key>alt+J</key>
		<key>ctrl+alt+J</key>
	</hotkeys>
	<function type="normal">
		<instruction>@keydown:alt</instruction>
		<instruction>SelectNext NUMITEMS=-15</instruction>
		<instruction />
		<instruction>@keydown:ctrlalt</instruction>
		<instruction>SelectNext NUMITEMS=-15 NODESELECT</instruction>
	</function>
</button>

Hotkey as XML
<?xml version="1.0"?>
<button backcol="none" display="label" textcol="none">
	<label>Select Prev 15</label>
	<hotkeys>
		<key>alt+J</key>
		<key>ctrl+alt+J</key>
	</hotkeys>
	<function type="normal">
		<instruction>@keydown:alt</instruction>
		<instruction>SelectNext NUMITEMS=-15</instruction>
		<instruction />
		<instruction>@keydown:ctrlalt</instruction>
		<instruction>SelectNext NUMITEMS=-15 NODESELECT</instruction>
	</function>
</button>

To add the keys, copy the XML code and paste like this

2023-03-02 - 19.18.53


function OnInit(initData) {
    initData.name = 'SelectNext';
    initData.version = '2023-03-02';
    initData.url = 'https://resource.dopus.com/t/selectnext-select-the-next-n-items/43827';
    initData.desc = 'SelectNext';
    initData.default_enable = true;
    initData.min_version = '12.0';
}

function OnAddCommands(addCmdData) {
    var cmd = addCmdData.AddCommand();
    cmd.name = 'SelectNext';
    cmd.method = 'OnSelectNext';
    cmd.desc = 'Select the next n items in the source';
    cmd.label = 'SelectNext';
    cmd.template = 'numitems/n,nodeselect/s';
    cmd.icon = 'script';
    cmd.hide = false;
}

function OnSelectNext(scriptCmdData) {
    var cmd = scriptCmdData.func.command;
    var tab = scriptCmdData.func.sourcetab;
    var args = scriptCmdData.func.args;
    cmd.deselect = false;

    if (tab.all.count == 0) return;

    var k = args.numitems;
    if (typeof k != 'number' || k == 0) k = 15; // argument is missing, not a number, or zero? use default!

    var i = 0;

    cmd.ClearFiles();

    if (k > 0) {
        if (tab.selected.count > 0) {
            var last = tab.selected(tab.selected.count - 1);
            i = tab.all.count - 1;
            while (last.name != tab.all(i).name) i--;
            i++;
        }

        if (i == tab.all.count) i = 0;

        while (i < tab.all.count && k > 0) {
            cmd.AddFile(tab.all(i));
            i++;
            k--;
        }
    } else {
        if (tab.selected.count > 0) {
            var first = tab.selected(0);
            while (first.name != tab.all(i).name) i++;
            i--;
        }

        if (i < 0) i = tab.all.count - 1;

        while (i >= 0 && k < 0) {
            cmd.AddFile(tab.all(i));
            i--;
            k++;
        }
    }

    if (!args.nodeselect) cmd.RunCommand('Select NONE');
    cmd.RunCommand('Select FROMSCRIPT SETFOCUS');
    cmd.RunCommand('Select SHOWFOCUS');
}

Save CommandSelectNext.js.txt to

%appdata%\GPSoftware\Directory Opus\Script AddIns

and add the new command to a button, hotkey, context menu, etc. like any built-in command.


How to use buttons and scripts from this forum

4 Likes