29 September 2021

Directory Opus 12.25

Directory Opus 12.25 is now available as a free update for all Directory Opus 12 users.

New versions are often made available several days before they will be detected by the update checker. You can download Opus using the links below if you don't want to wait.


The following changes were part of the 12.24.1 - 12.24.5 beta updates:

  • New/improved ability to copy info tip text to the clipboard:
    • Text containing markup, such as info tips for images with EXIF metadata, now has the markup removed from the clipboard copy.

    • A new command Clipboard COPYINFOTIP lets you assign the action to any hotkey. (Previously undocumented hardcoded keys: Ctrl+Shift+Alt+C works by default, but is quite hard to type. Ctrl+Alt+C can also work but is overridden by the default toolbars. You can now pick a hotkey yourself instead.)

    • The action now works for both file displays in a dual-display Lister. (Previously, it only worked if the info tip came from the source side.)

  • The Go FOLDERCONTENT command, which generates buttons or menus for items below a specified folder, has new modes which copy the clicked files into the current (copytosource), destination (copytodest), left (copytoleft) or right (copytoleft) file displays.

    This might be useful if you have a folder of template files or folders you need to copy to different places as you move around. To update the list of items, you would just need to add or remove things (or softlinks to them) to the folder.

    Go FOLDERCONTENT=copytosource and similar can use the new COPYARGS argument to specify additional arguments which are passed to each of the generated copy/move buttons.
  • Go FOLDERCONTENT filefilter and dirfilter parameters now support embedded quotes should you need to specify patterns containing commas, which would be parsed as the end of the parameter otherwise.
  • Go FOLDERCONTENT can now limit the number of files and dirs it shows using maxfiles=x and maxdirs=y. With recursive menus, the limit is applied separately to each level.
  • Go FOLDERCONTENT=nodirs now also excludes shortcuts to directories.
  • Added some new filename passing codes that deal with drive letters and labels:
    • "notermdrive" is like "noterm", but also suppresses the backslash at the end of a drive root.
    • "driveletter" returns just the single-character letter of the drive at the start of the path.
    • "drivelabel" returns the label for the drive at the start of the path.

  • You can now use Ctrl+Insert and Shift+Insert as alternative hotkeys for Ctrl+C and Ctrl+V in the file display, without causing problems when trying to use them in places like the Find Files panel.

    New configurations include the alternative hotkeys by default for the Lister and standalone viewer. Existing configurations are unaffected, but you can modify the Edit > Copy and Paste menu items or reset the Menu toolbar to factory defaults to add the alternative hotkeys to old configurations. Ctrl+C and Ctrl+V continue to work as before, of course.
  • Ctrl+Backspace and Ctrl+Delete now work in more places (e.g. the "Clipboard PASTE AS=ask" dialog's filename field).
  • Since Go OPENCONTAINER NEWTAB implicitly acts as if NEWTAB=findexisting was requested, there is now a NEWTAB=nofindexisting to make it always open a new tab, even if one already exists for the folder.
  • Added the FileType FILECONTEXT argument, which lets you create a toolbar button for a file where left-clicking opens/runs the file and right-clicking shows the file's context menu.
  • Added Select SIMILAR=trueext argument; causes the command to ignore multi-part extensions. E.g. file.part1.rar, file.part2.rar and file.part3.rar would all be considered to be .rar files rather than having different extensions.
  • Added Go LIMITPATH (and Prefs LIMITPATH) arguments, which let a Lister be restricted to one or more paths (and any folders under those paths).
    • Go LIMITPATH=current restricts the Lister to all the paths currently shown in all tabs.
    • Go LIMITPATH=reset removes path restrictions for the current Lister.
    • Path restrictions are saved in Lister Layouts (and the Default Lister).
    • New Listers opened from an existing Lister will inherit its path restrictions by default (unless the LIMITPATH argument is used to override).
  • Added help messages to the viewer pane when a PDF or Microsoft Office document fails to load due to missing or broken third-party viewers.
  • Added workarounds to help find a PDF preview handler when one is installed but the file type has been broken by different software fighting over it.
  • For .DOC files which don't start with the MS Word header (e.g. plain-text README.DOC files common on other platforms), the viewer pane will now avoid trying to load them via MS Word (which works if Word is installed, but will now result in an error message if Word isn't installed). The simple text plugin can handle them instead.
  • The advanced wordbreak_char_names and wordbreak_char_paths settings now have default values that include the typical punctuation characters. Previously, edit controls using these settings considered a very minimal set of word-break characters, unless you manually configured additional ones, which was a slight regression from Windows defaults. (If you edited either setting in the past, you may need to reset it now to get the new defaults. If you liked things how they were, set both settings to an empty string.)
  • The advanced wordbreak_char_names setting is now used by more dialogs which prompt for a file name, including Clipboard PASTE AS=ask.
  • If FAYT and Filter Bar Keys has Filter Bar as the default mode, typing to open the filter bar and then pushing Esc will now reset the filter back to what it was before you started typing, rather than to the first character typed.
  • Added support for tools which write EXIF GPS data in an unusual way, where the Minutes and Seconds are both zero and all the information is packed into the Degrees part.
  • The Folder Tree's Favorites branch now ignores label filters, since they could cause problems with FTP sites. (Explicit labels and wildcard labels still work.)
  • Opus now prevents unintentional drag & drop when toolbars turn on or off in response to activating the left or right file display with the mouse.

    (For example, toolbars configured to appear in certain modes or folders can cause the window to rearrange when clicking the inactive side of a dual file display. This can change the mouse position relative to the file display, which looked like a drag & drop if the mouse button was down.)
  • When invoking third-party context menu handlers, the optional menu/mouse position data is now passed through in most contexts.
  • The Treat all virtual folders as real option no longer overrides (forces on) the Native display of the Desktop option, in Preferences / Folders / Virtual Folders.
  • The folder tree lock is now cleared if you save the default Lister when the tree is turned off. Previously, you'd have to turn on the tree, unlock it, save the default Lister, then turn off the tree again and save the default Lister again.
  • Commands which can take a filter name or a wildcard can now be given a string with the wild: prefix to force the rest to be interpreted as a wildcard. For example, if it's a wildcard like ~(xyz) which doesn't include any *, ? or | characters, and where the wildcard characters could also be valid filename characters.
  • Fixed {md5sum} in renames inserting nothing for files larger than max_md5_file_size. There is no size limited again when calculating hashes for renaming.
  • Fixed an issue which sometimes caused a window frame to flash on the screen when opening other windows in the program. Unlikely to have been seen unless window animations were turned off in the OS.
  • Fixed an issue which meant change notifications which arrived with short paths were sometimes incorrectly processed.
  • Fixed problem which stopped NTFS ADS being copied when copying out of a Collection.
  • Fixed thumbnail mode resetting the scroll position if you filtered the display, cleared the filter, scrolled down with the mouse wheel (without giving the display focus), and then clicked a file.
  • If Lister resize grips are on and the Jobs Bar is at the bottom of the window, the grip is now hidden when the Lister is maximized.
  • Copying NTFS ADS out of Collections should work now. Also fixed the same issue when copying out of Libraries.
  • Fixed issue with thumbnails in tooltips showing the wrong size for videos and some other file types, if the tooltip specified a different thumbnail size to the file display.
  • Fixed a potential deadlock if Set VIEWERCMD=delete was followed in a button by another Set VIEWERCMD command, and a script was installed that processed viewer events.
  • Fix for calling IColumnProvider::GetItemData with pwszExt set to the file name instead of just the extension. (Thanks to the Tracker Software / PDF-XChange team for reporting this!)
  • Fixed viewer pane splitter being thinner than other splitters in high DPI.
  • Fix for "not empty" error when attempting a non-recycle-bin delete of a non-empty folder which was flagged as a reparse point but was not a symbolic link or junction.
  • Opus now knows that .jfif files are JPEG images without having to inspect their contents, to work better with images saved by Chrome with incorrect extensions.
  • Fixed bug which resulted in high CPU usage and the Set As Default Lister dialog failing to open if the folder tree was locked and two toolbars with certain elements shared the same line.
  • If you lock the folder tree via the tree header, then hide the header, the tree will now be unlocked until the header is turned back on, even if you had used the Set TREELOCK command at some point in the past. The tree now only stays locked without a header if the lock was created via the command rather than the header.

  • Fixed overlapping transition animations if the standalone viewer opened on a marked picture.


  • Item.display_name is now set to the same value as Item.name when the file or folder has no distinct display name. Previously, display_name would be blank in that situation and scripts required extra logic to make use of it.
  • Fixed Item.display_name not populating when script column handlers were called (and possibly in some other situations).
  • FSUtil.GetTempFile now returns a File object which works for both reading and writing. (Previously, the object was write-only and you'd have to open the file again if you needed to read back what you wrote. Opening the file twice may still be preferable if you need independent read and write positions.)
  • FSUtil.OpenFile now supports reading and writing the same on-disk file from a single object if "rw" mode is specified.
  • FSUtil.OpenFile and FSUtil.GetTempFile both have a new "p" flag which permits deletion of the file by other things while it is open. This also enables files to be opened when they are already flagged for deletion by something else, such as another File object in delete-on-close mode.

    When File.Read fails, it now returns zero and ensures the Blob object is zero length. Previously, you had to check the File.Error value to know if the call failed.

    Documented the fact File.Read and File.Write can process at most 1GB at a time, and must be called more than once to read or write larger amounts.

    Improved documentation of FSUtil.

    DOpus.Create.Date(...) now parses milliseconds if they are included. For example, '20010203 12:34:56.789'.

    Fixed script resources not being found in files with Unix-style line endings.

  • Vector.assign and append methods now work with JScript arrays as documented.

  • Script Control object's label property can now also be accessed via the alternative title name, since both terms are used in different places.

  • Scripts enumerating folders via the Windows Shell -- i.e. FSUtil.ReadDir(path, "s") -- now include Hidden+System files. Previously, Hidden files were included but only if they didn't also have the System attribute.

  • Scripts which enumerate the Desktop recursively would be given the wrong path for items in the public desktop folder. This is now fixed.
  • Fixed problem with script dialog static controls not respecting their background color if text alignment is set to anything other than top.
  • Script dialog group controls now render correctly if you set their titles to an empty string.
  • Fix for script dialog editor not allowing you to drag something away from and then back to its original position without releasing the mouse and dragging it again.
  • Fix for scripting metadata object not providing all types of metadata (e.g. image metadata) if, say, a file's User Comment was edited and the script (rather than file display columns, etc.) was then first thing to request the file's new information.
  • Fixed F1 help not displaying if two script add-ins added custom documentation.
  • Script help pages can now be larger than 32413 bytes.

  • Cleaned up the behavior of DOpus.Create.Vector when given multiple arguments where the first one is a vector. It now adds each argument as a member instead of copying the content of the first argument and ignoring the others.
  • Fixed script dialog drop-down controls with lots of items not having scrollbars.