Make tab-search invokable across ac) SRC and DEST panes bc) all lister instances, SRC and DEST cc)

Hi Opus,
without Nurgo Software's AquaSnap window size and position manager,
and their TidyTabs multi-window management product,
I'd drown in the number of windows and tabs I have open.

... I do that to enable easy management of many related parts of a context in
both my work and personal lives.

Therefore, in both the current SRC and DEST panes of Opus, and other Lister instances,
I routinely have dozens to hundreds of Opus tabs open, concurrently.

ac) If the tab search function, were to allow search in both SRC and DEST panes of
the current lister, that would be helpful.

bc) If it were to do so across all open listers, that would be fantastic.

cc) then having a higher-level version, of control-left and control-right arrows,
to navigate between recent tabs, especially across listers,
then that would be the icing on the cake

... related : I do this across files and folders, emails and other data sources, in general, via
- indexing / search programs
... voidtools.everything , MythicSoft.FileLocatorPro, opus file search
- dragging those into Opus collections

How possible would this more powerful opus tab-search be, folks,
as I'd really like to not have to implement this myself, in scripting;
... I'm sure you'd do a better / faster job :wink:

Many thx,
Cheers
Brian

Disclaimer: This is not the exact solution to your request, rather some thoughts (and tools) shared about your Opus tabs organization.

I did (kinda) what you did, having one lister with lots and lots of tabs (not as many as hundreds though :slight_smile: ).
In the end, the issue is the one you're raising: how to find the tab you want at a specific time?

So, I changed route, and did the following:

  • Create listers that regroups folders/tabs that are really related to each other (meaning part of specific workflows)
  • Make layouts out of those, so you can have listers dedicated to specific workflows

Now comes the part where you need to find the lister instead of the tab. It's a bit easier since there are less listers than tabs, but not easy enough.
So I made a script add-in that allows to search for an open lister based on its base layout:

  • When found, brings it to front
  • When not found, create/open it

ActivateOrCreateLister.opusscriptinstall (2.0 KB)

Finally, I had sometimes the need to open quickly just a bunch of tabs in my current lister without necessarily opening the full Layout associated lister.
There comes tab groups, and I made a FAYT script to allow to open (add) a tab group to the current lister, with the ability to close it when things are done.
You can find it here.
Note that, with the new ability to create dynamic buttons, I should release shortly a new version that uses buttons and menus (to replicate the TabGroups configuration structure that has folders to properly organize your groups) in addition to the FAYT feature.

I'm not saying this will better suit you, but for my personnal use, too many tabs in the same lister killed productivity. I spent too much time looking for the proper tab, not remembering if it was up/left or down/right, and so on. Having dedicated listers per type of tasks/activities really helped me being more organized.

1 Like

Many thanks, PassThePeas, those are
a) excellent suggestions that
b) demonstrate the broad and deep options that Opus provides

I'll take a look at your kind suggestions, while still pursuing the original objective.

It's the cross-cutting concerns that most often are the deeply challenging ones,
that you want to embed in many workflows, in different tabs in different listers.

I hope that if Opus implements the tab-search suggestion,
that they
i) return a list that has a lister and tab-type (src/dest) list that allows sorting,
_ and can optionally
ii) allow tabs to be moved / duplicated between listers ... eaiser than ...
iii) be saved to a new type of tab __________________... this one would be challenging

One further tab-enhancement would be to make tabs a bit less singular,
e.g. allowing multi-tab selection so they can be moved in a group,
__ between listers, as well accept as any other tab operations to be
__ performed across multiple tabs in a single action

Cheers,
Brian

@PassThePeas
I installed the ActivateOrCreateLister script and added a button with that command in it.

Nothing happened with either
ActivateOrCreateLister
ActivateOrCreateLister "My Layout"

What should I have done?

The script originally includes some predefined layouts that can be requested with the argument TARGET.
If you want the simplest command, you need to modify the script.

BUT: you can also use the other way ActivateOrCreateLister TARGET=CUSTOM_TARGET CUSTOM_NAME="My Layout"

EDIT:
If you want to simplify the command line to launch the script, here's what needs to be modified in the script.

  • Line 31:
cmd.template = "FORCE_CREATE/S,TARGET/O[SINGLE,SAMPLES_SOFTS,NATIVE_INSTRUMENTS,TOONTRACK_MIDI_ABLETON,MUSIC_BACKUP,LOUPEDECK,CUSTOM_TARGET],CUSTOM_NAME/O";

You will want to change SINGLE, SAMPLES_SOFTS, ... up until CUSTOM_TARGET. CUSTOM_TARGET is to be kept, since it is the one that allows to open/activate any custom layout. Others can be changed to whatever suits your configuration.
They are just arguments, and don't mean anything by themselves.

  • Lines 64 to 82:
	switch (cdf.args.target) {
		case "SINGLE" :
			layoutName = "MyComputer - Simple";
			break;
		case "SAMPLES_SOFTS" :
			layoutName = "Musique\\Music Production Samples & Softs";
			break;
		case "NATIVE_INSTRUMENTS" :
			layoutName = "Musique\\Native Instruments";
			break;
		case "TOONTRACK_MIDI_ABLETON" :
			layoutName = "Musique\\Toontrack MIDI Ableton";
			break;
		case "MUSIC_BACKUP" :
			layoutName = "Musique\\Music Prod Backup Management";
			break;
		case "LOUPEDECK" :
			layoutName = "Loupedeck";
			break;

This is the part of the script where you associate the previously defined values of TARGET to actual layout names.
So, if you change a name in line 31, it has to appear on one of the case "<name of target>" : lines.
And you also need to change accordingly the layoutName = "<name of layout>"; just below the case statement.

For instance, say you have a Layout in "My Most Used Layouts\Download Management".
You can replace on line 31 SINGLE by DOWNLOADS_MGT.
And then on lines 65, 66:

		case "DOWNLOADS_MGT" :
			layoutName = "My Most Used Layouts\\Download Management";

Note: If your layouts are in a tree structure, as the example above, you need to specify the full path, and you have to double every \ in the string declaration for layoutName (as I did here).

Once that is done, you'll be able to place in a button:
ActivateOrCreateLister TARGET=DOWNLOADS_MGT