# Scripting

If you need to process items in some non-trivial way you can take advantage of the scripting interface the application provides. This is accessible on command line as `copyq eval SCRIPT` or `copyq -e SCRIPT` where `SCRIPT` is string containing commands written in JavaScript-similar scripting language (see Scripting API).

Every command line option is available as function in the scripting interface. Command `copyq help tab` can be written as `copyq eval 'print(help("tab"))'` (note: `print` is needed to print the return value of `help("tab")` function call).

## Searching Items

You can print each item with `copyq read N` where N is item number from 0 to `copyq size` (i.e. number of items in the first tab) and put item to clipboard with `copyq select N`. With these commands it’s possible to search items and copy the right one with a script. E.g. having file `script.js` containing

    var match = "MATCH-THIS";
    var i = 0;
    while (i < size() && str(read(i)).indexOf(match) === -1)
        ++i;
    select(i);

and passing it to CopyQ using `cat script.js | copyq eval -` will put first item containing “MATCH-THIS” string to clipboard.

## Working with Tabs

By default commands and functions work with items in the first tab. Calling `read(0, 1, 2)` will read first three items from the first tab. To access items in other tab you need to switch the current tab with `tab("TAB_NAME")` (or `copyq tab TAB_NAME` on command line) where `TAB_NAME` is name of the tab.

For example to search for an item as in the previous script but in all tabs you’ll have to run:

    var match = "MATCH-THIS";
    var tabs = tab();
    for (var i in tabs) {
        tab(tabs[i]);
        var j = 0;
        while (j < size() && str(read(j)).indexOf(match) === -1)
            ++j;
        if (j < size())
            print("Match in tab \"" + tabs[i] + "\" item number " + j + ".\n");
    }

## Scripting Functions

As mentioned above, all command line options are also available for scripting e.g.: `show()`, `hide()`, `toggle()`, `copy()`, `paste()`.

Reference for available scripting functions and language features can be found at Scripting API.