Using Scripts to Expand Opus Functionality


Directory Opus 11 introduced a scripting interface that allows users to make Opus do new things by writing scripts in a variety of languages. At first, it could seem that this feature would only be useful to programmers. But it is not so. Soon after the launch of DO11, talented coders started posting a variety of useful scripts on the forum's scripting page. If you invest a few minutes to learn how to install a script, you will gain access to a treasure trove of new features.

Before DO11, Opus allowed users to create renaming scripts (in the advanced rename panel) and script functions (inside buttons). This page is mainly concerned with the new kinds of scripts introduced in Directory Opus 11: script add-ins, which are installed in the new Scripting panel under Preferences. Rather than give you an abstract list of a script add-in's capabilities, I'll let you browse through the scripts presented below.

This page does not aim to teach you how to write scripts for Opus. Instead, it aims to:

✽ explain how to install scripts.
✽ present a number of scripts I have found useful
✽ point to resources for those who wish to code their own scripts.

On a dedicated page, my own contribution is the "file name database" scripts that let you define file naming conventions to add metadata to your files (such as movies and comics) and see that data in columns.


(direct link)

Installing Opus Scripts

Installing a script add-in is usually a two-step process:

Step 1. First, you download the script file (usually a js or js.txt file) to your machine. You then install the script itself by going to Prefs / Toolbars / Scripts and dragging the file from the lister to the right pane of the Preferences panel.

Directory Opus scripts

Step 2. Next, for some scripts, you create a button (or series of buttons) that call the script, possibly passing some parameters. To do so, typically you would Alt-click an empty space on the toolbars to enter Customize mode (assuming you've activated Prefs / Toolbars / Options / Alt-click to edit toolbar buttons), then click inside a menu and choose Insert New / New Button, then paste a command inside the button and possibly assign it a hotkey.

For instance, after installing the Select Random script, you can create one button containing SelectRandom in the Function box to select a random file, and another button containing SelectRandom FILES ITEMCOUNTPERC=50 to randomly select half the files in the lister.

That's it! Your script is ready to go.
Occasionally, you need to configure the script by selecting it in Preferences / Toolbars / Scripts and clicking the Configure button… or even by editing the code of the script itself.

Skipping Step 2
If you are using my toolbars from 15 February 2015 or later, for the scripts on this page you can skip the second step as buttons (which you can tweak) live under Tools / Script Add-Ins.

opus script add-ins


Script-in-a-Button
The button scripts that were available before script add-ins do not require the first step of the installation procedure outlined above: their code is fully contained in a button that you drag to the toolbar or a sub-menu after Alt-clicking to enter Customize mode. That is for instance the case for Leo's Merge Folders and Paste File List scripts.

Updating Script Add-Ins
As bugs are fixed and new features implemented, script authors often post new versions on the forum page corresponding to their script. To keep abreast of updates, you could become a frequent visitor of the Scripts section of the Opus forum, but for many scripts there is a simpler solution. Using the ScriptWizard script, you can update all compatible scripts without leaving Opus.

Under the ScriptWizard button's pull-down menu, select Go Script Addins. This opens the Opus folder where scripts reside. Selecting scripts, you can then select Update or Check for Updates under the same pull-down menu.


(direct link)

A (Very) Incomplete List of Scripts

Any list of scripts necessarily represents the compiler's own bias, itself a result of his perceived needs. I therefore recommend you explore scripts at your leisure in the Scripts section of the Opus forum.

Nevertheless, to give you an idea of the range of functions made available by scripts contributed by the Opus community, this section presents a number of scripts I have found useful. If your script is missing, please don't be upset—I may not have noticed it or found a fit for my particular workflow.

(direct link)
Jumping Points
For easy navigation, here are some jumping points to the scripts on the page:

Go Sibling
Select Random
ScriptWizard
Confirm Multi Open
Close Tab Siblings
Merge Folders
CBX Handler (Comic Book Reader)
Compare Tabs
Hash Compare
Line Counter
FileInfo
Regex Columns
Go Registry
Toggle Thumbnails
Lister Double Click
Paste Empty File & Folder List
Rename from Clipboard
GoExisting
External Compare and Merge


(direct link)
Go Sibling
This terrific script by Leo lets you add buttons that cycle forward or backwards through folders that share the parent of the current folder. Added to my toolbars, under the Go menu.


(direct link)
Select Random
This script by tbone allows you create buttons that select a number of random files—and possibly do something with them. For instance, one button can select half of a folder's files and create a slideshow. Another button can select ten files and send them to your music player. On my toolbars, buttons for this script live under Tools / Script Add-Ins / Select Random.


(direct link)
ScriptWizard
This script by tbone is probably one you should consider installing once you have picked one or two scripts you like. Among other features, it allows you to update scripts you have installed. Another feature I like is that it defines custom columns that you can use in a layout to view information about your scripts, as shown in the picture below.

Custom columns for Opus scripts
On my toolbars, buttons for this script live under Tools / Script Add-Ins / Script Wizard.

(direct link)
Confirm Multi Open
Confirm multi open
This script by jsys asks you to confirm when you try to open a large number of files (you specify the threshold). Have you ever selected a thousand files and pressed Enter by mistake? All these files might spawn a picture viewer or text editor window. This is the kind of situation this script aims to rescue you from. This script does not require a button.


(direct link)
Close Tab Siblings
This script by tbone tries to prevent this:

multiple tabs

All too often, lost in work, some of us tend to navigate to a folder that is already open in another tab. When the script detects this, it closes the original tab for you. Keep it tidy!

When you click on the script on the Prefs page, some options come up. For me, StartIndex had to be set to zero. It also looks like you can make a list of folders the script should ignore.


(direct link)
Merge Folders
This script-in-a-button by Leo allows you to select multiple folders and merge them to a single folder, whose name you specify. You could accomplish the same in Flat view, but that would be more fiddly. On my toolbars, this button lives under Folder / Merge Folders.


(direct link)
CBX Handler (Comic Book Reader)
With this script by steje installed, when you click on a comic book format such as cbz or cbr, the book opens in the standalone image viewer, which lets you browse the pages. (You probably know that these formats are nothing other than a zip or rar file with a renamed extension.) I never got used to ComicRack, so I love this script. There are a number of configuration options, which you can access directly by clicking the script name under Prefs / scripts in DO12.

CBX handler config


(direct link)
Compare Tabs
Compare tabs In a dual lister, this script by aprold selects the files that are missing from the other lister. On my toolbars, a button for this script live under Tools / Script Add-Ins / Compare Tabs.


(direct link)
Hash Compare
compare hash in Opus
This script by steje lets you check if the selected file has the same MD5 or SHA-1 hash as the text in the clipboard. On my toolbars, a button for this script live under Tools / Script Add-Ins / Hash Compare.


(direct link)
Line Counter
Opus line counter
This script by aussieboykie lets you select one or multiple files and count the lines of text in the files it contains. On my toolbars, a button for this script live under Tools / Script Add-Ins / Line Counter.


(direct link)
FileInfo
This script by tbone adds several columns with information about the selected text files: number of lines, encoding (e.g. UTF-8), style of line endings (e.g. \r\n for Windows, \n for Unix). After installing, you can add the desired columns in the usual way: right-click / Script / ColumnFile:FileInfo

FileInfo script


(direct link)
Regex Columns
Regex columns
This script by wowbagger was the inspiration for my "file name database" scripts. It lets you define custom columns based on the file name using regex, a tool dear to my heart. On the image, you can see how the two custom columns hero and score have been defined to extract the hero's name and the number from the file name.

At the moment, the configuration process for the script is a little heavier than for some other scripts. The script is provided as an osp file. Assuming you haven't set a handler for osp files, rename the extension to zip, and extract the contained archive, which is a js file. (Alternately, add "osp;" in Prefs / Zip & other archives / Zip Files / Zip Extensions.) Then edit the file, which contains the column names and definitions, for which you'll need to know a little regex. (If you're new to regex, I suggest you visit my regex site.)

In my view this feature is immensely valuable because it lets you create complex file-naming conventions containing file metadata. For instance, you could name your movie files according to a convention such as rating-title-year-director. Using regex columns, you can now sort movies not only by regular file attributes such as file name and size, but also by their rating, title, year and director. On my "file name database" page, you can see examples of this for movies and comics.

I made a small modification to this script support capture groups (the post has an attached script you can install alongside the original).




(direct link)
Go Registry
This script by tbone opens Regedit and makes it jump to the registry key in the clipboard—saving you a lot of navigation time.

Try it for instance by copying HKEY_CURRENT_USER\Control Panel\Desktop
On my toolbars, a button for this script live under Tools / Script Add-Ins / Go Registry.


(direct link)
Toggle Thumbnails
This button and script package by tbone allows you to switch between Details and Thumbnails mode while keeping the same files selected. I like it so much I've assigned it to Ctrl + S. On my toolbars, a button for this script live under Tools / Script Add-Ins / Toggle Thumbnails.


(direct link)
Lister Double Click
This script by tbone extends the actions Opus takes when you double-click on an empty space in a lister. As you may recall, clicking an empty space on the lister goes up to the parent folder (as does pressing the back button). Now, in addition,

✽ Shift-double-clicking an empty space copies the path of the current folder to the clipboard, saving me the F4 / Ctrl + C combination I seemed to be doing ten times a day;
✽ Ctrl-double-clicking an empty space navigates to the path currently present in the clipboard, saving me the F4 / Ctrl + V combination I seemed to be doing just as frequently.

This script does not require a button.


(direct link)
Paste Empty File & Folder List
This script-in-a-button by Leo allows you to copy a list of file names from a file or a web page and to paste them in a lister, which creates empty files bearing these names. File names that terminate with a \ are pasted as folders. On my toolbars, this button lives under Copy / Paste File & Folder List.


(direct link)
Rename from Clipboard
This script by tbone allows you to copy a list of desirable file names, select an equal number of files, and click a button to rename all the files with the names in the clipboard. On my toolbars, a button for this script live under Tools / Script Add-Ins / Rename from Clipboard.


(direct link)
GoExisting
This script by jon creates the GoExisting command that opens a tab with the specified path. If that path already appears on a tab on either side of a lister, that tab is focused. Usage: GoExisting somepath
On my toolbars, this script is used in the shortcuts to go to the desktop (Shift + Home), go to the recycling bin (Alt + Del) and empty the recycling bin (Ctrl + Shift + Del).


(direct link)
External Compare and Merge
wowbagger wrote a well-regarded script that allows you to use a variety of external tools (such as BeyondComoare) to compare and merge folders. I do not use these tools so I haven't had a chance to try it.


(direct link)

Resources for Coders

This section is not a scripting manual. Rather, it aims to present basic information and collect resources to get you started fast.

Choice of Language
The first thing you need to know is that most Opus scripts are written in JScript, Microsoft's flavor of JavaScript. Even if you're not a JavaScript coder, this may affect your choice of language because it means that you will find more working examples and help from the community if you work in JScript.

You can actually use any active scripting language to write Opus scripts, but since Windows doesn't ship with ActivePython and ActivePerl (PerlScript) installed, the reach of your scripts will be reduced if you use these languages. On the other hand, JScript and VBScript are supported out of the box.

If I were writing a script for myself, the only reason that would make me choose ActivePython or PerlScript would be if I needed the script to give me advanced regex functionality. Indeed, to my mind JavaScript has the worst regex support of any of the major languages, so much so that its regex flavor is intensely distasteful to me. On the other hand, Python (with Matthew Barnett's alternate regex module) and Perl have some of the best regex engines.

Getting Started Writing a Script
There are various kinds of Opus scripts, and you create them in various places. Although the focus of this page is script add-ins, it's worth mentioning the other kinds of Opus scripts.

✽ Rename scripts. To create a Rename script, open the Advanced Rename panel and check the Script Mode box.
✽ Script-in-a-button. When you enter Customize mode to edit a button, press Advanced at the bottom of the box and select Script Function from the Function pull-down menu.
✽ Script add-ins. Under Prefs / Toolbars / Scripts, the File menu at the top left of the window has a Create New Script item that lets you create a stub. You will find this stub in the /dopusdata/Script AddIns folder (I'd suggest adding this folder to your favorites).

Resources
Here are some Opus scripting that seem useful to me. If you know some particularly useful posts, please send them along in the comments section.

✽ Your first stops should be the Manual's scripting section, then the example scripts and scripting reference.

✽ tbone wrote an article on Script Initialization using Script.config items.

✽ tbone wrote a ConfigHelper class you can paste in your scripts to help create configuration items.

✽ MrC wrote a post explaining how to set up ActivePerl for DO11 scripting.

✽ Leo explained why scripting Opus with ActivePython may not be the best idea even though it is supported. It seems to me that his points largely extend to ActivePerl.


next
 Master your Opus preferences





Be the First to Leave a Comment






All comments are moderated.
Link spammers, this won't work for you.

Kindly note that I will not reply to general Opus tech support questions (but feel free to ask about issues directly related to my toolbars).


To prevent automatic spam, we require that you type the two words below before you submit your comment.