Trigger Flat View (or any other command) in configured folders

Overview:

The script lets you configure a list of folders which will trigger a command whenever you enter them.

By default, it runs the command to turn on Flat View - Grouped: Set FLATVIEW=On,Grouped

For Flat View - Mixed, configure the script to run: Set FLATVIEW=On,Mixed

For Flat View - Mixed (No Folders), use: Set FLATVIEW=On,MixedNoFolders

You should also enable Preferences / Folders / Folder Behaviour / Cancel Flat View mode when folder is changed if you want Flat View to turn off again when you go to other folders.

You may also, if you wish, use the script to run a command which has nothing to do with Flat View. For example, you could change the font size or toggle the viewer panel when entering specific folders.

The script could be forked or extended to allow different commands when entering and leaving different sets of folders. I've chosen to keep things simple and easy to understand for now.

Another script, Trigger command in specific layouts, is very similar to this one, except it runs a command when new windows open, or when you change tabs in windows, if the windows come from particular layouts.

Installation:

  • Download: FlatViewAuto.vbs.txt (1.73 KB)
  • Open Preferences / Toolbars / Scripts and drag the file to the list of scripts.
  • Click OK.

Configuration:

Go to Prefences / Toolbars / Scripts, select the Flat-View Auto script, and click Configure; you'll see something like this:

Double-click either line to edit it, and remember to click OK or Apply back in the main Preferences dialog to save the change..

History:

  • v1.0 (16/Sep/2015) - Initial version.

The script itself:

If you just want to use the script, the FlatViewAuto.vbs.txt download above is easier.

The script code is reproduced here so people can find scripting techniques by browsing the forum without having to download & open lots of files.

Option Explicit

Function OnInit(initData)
	initData.name = "Flat-View Auto"
	initData.version = "1.0"
	initData.desc = "Automatically turn on Flat View when entering configured folders"
	initData.copyright = "(c) 2015 Leo Davidson"
	initData.default_enable = true

	Dim vecDefFolders
	Set vecDefFolders = DOpus.Create.Vector
	' Default folders / example config.
	vecDefFolders.push_back("/desktop")
	vecDefFolders.push_back("C:\Program Files\GPSoftware\Directory Opus")

	initData.config.FlatViewCommand = "Set FLATVIEW=On,Grouped"
	initData.config.FlatViewFolders = vecDefFolders

	initData.config_desc = DOpus.Create.Map( _
		"FlatViewCommand", "Command to run when triggered.", _
		"FlatViewFolders", "Folders which trigger the command.")
End Function

' Helper Function
Function IsPathInVector(fsu, path, vecFolders)
	IsPathInVector = False
	' Resolve aliases, libraries, etc. to their real/absolute paths.
	path = fsu.Resolve(path)
	Dim testPath
	For Each testPath in vecFolders
		If (fsu.ComparePath(path, fsu.Resolve(testPath))) Then
			IsPathInVector = True
			Exit Function
		End If
	Next
End Function

Function OnAfterFolderChange(afterFolderChangeData)

	If (Not afterFolderChangeData.result) Then
		Exit Function ' Folder didn't change.
	End If
	
	' Un-comment to make qualifiers (e.g. Alt, Shift, Ctrl) temporarily disable the script.
	' If (afterFolderChangeData.qualifiers <> "none") Then
	'	Exit Function
	' End If

	If (Not IsPathInVector(DOpus.FSUtil, afterFolderChangeData.tab.Path, Script.config.FlatViewFolders)) Then
		Exit Function
	End If
	
	Dim cmd
	Set cmd = DOpus.Create.Command
	cmd.SetSourceTab afterFolderChangeData.tab
	cmd.RunCommand Script.config.FlatViewCommand

End Function
3 Likes

Very interesting idea. I have just installed the script.

Sounds like we can use only one mode a the time. Or is it possible to make it like in this example?

FlatViewCommand | Set FLATVIEW=On,Grouped
FlatViewFolders | /path1; path2

SetViewmode | Set VIEW=power
ViewModeFolders | /path1; path2

You can already set the view mode via folder formats.

Set FLATVIEW=On,Grouped VIEW=power probably works as well.

Hi leo,
could you please add support for wildcard paths to the script? I modified it to show a toolbar with player buttons whenever I enter one of my music album folders. At the moment I need some more vecDefFolders vectors to be able to add all my folders because their capacity is limited. It would be nice if I could use something like F:\Alben*** instead of F:\Alben\Genre\Artist\Album. I fiddled around with FSUtil.NewWild but couldn't get it working.

Thanks for sharing!

1 Like