Sublime Forum

Main Menu Creation > How do you Open more than one default and user file on the left / right?

#1

I’m working on the settings port of my plugin and one thing is annoying - with the default edit_settings you can set a base_file, user_file and default ( and contents for some reason with other default commands ) but you can’t set base or user as a table to load multiple files…

This is problematic because each file extension I support would need its own menu item…

The way I have things set up now I have 3 primary settings files: Definitions ( so I don’t need a definitions python file and so other config files can read keys from this file for certain info ) which may or may not be a good idea, Main Plugin Settings ( for primary / main config of the plugin such as developer mode [ reloads core files if they’ve been edited ], debug mode [ enables / disables all print statements or those attached to a string id provided ] and more ), and Default Mapper Config ( basically the defaults all mapping configurations inherit from although inheritance is allowed all the way through - this is for the mapper or language being mapped name, the mapping class to use and more )

And right now there are 11 language config files + default ( and these, plus the 3 above have a Default / User variant ) for: default ( Which links to the same one above ), ahk, bat, C++, JavaScript, lua, MarkDown, PHP, Python, sublime-settings, TypeScript and Plain Text… Each one of these needs to exist because they need to specify the language name ( default or combined such as Lua because .lua extension supports Lua and Garry’s Mod Lua ), the class to use ( Default is the User class, Default is available which, unless the User class is edited, is the same as User because of pass-through / inheritance - and other project names… For Lua there is my framework, soon to be mappings for DarkRP and more… For JavaScript there is my framework mappings, and for Python there is the plugin mappings for the AccessorFunc Expansion, etc… - These files will be relatively small but can grow in size depending how much of the default config is changed…

Some will be redirects for example .htm will redirect to the .html file… when that’s supported… They also define which languages are used in that extension - PHP has 6 languages: PHP, HTML, CSS, JavaScript, RegEx( PHP Implementation and JavaScript Implementation ), and SQL…

Anyway, they all tie in together - the reason I don’t want them all in 1 file is because I tried that as a design mockup and it was just way too much data and too difficult to read despite laying it out in nested categories, etc… The file size without any real data ended up at about 30kb too…

So, back to the topic - since all of the configurations tie into each other, if they all open in the single window with a single command ( or at least split so with 1 command I can simply call the 3 primaries, then another can be the language files ),

I’m sure this is possible with a custom command ( seems UpperCamelCaseCommand translate to upper_camel_case in the file ) but I haven’t found any clear way to feed it a table…

This is my menu file:

//
// Acecool's Source Code Navigation System - Preferences / Menu system...
//
[	//
	{
		//
		"id": "preferences",

		//
		"children":
		[
			//
			{
				//
				"id": "package-settings",

				//
				"children":
				[
					//
					{
						//
						"caption": "Acecool - Source Code Navigator / Source Code Tree Climber / CodeNode",

						//
						"children":
						[
							{ "caption": "-" },


							//
							// Key Bindings - Opens the XCodeMapper Additional Key-Defaults and the Currently used Windows / OSX / Linux Key-Bindings file the User uses so the user can add the keys to it if they want to change the default keys...
							//
							{
								"caption":					"Plugin Key Bindings",
								"command":					"edit_settings",
								"is_visible":				true,

								//
								"args":
								{
									"base_file":			"${packages}/Acecool_CMS/settings/Default (${platform}).sublime-keymap",
									"user_file":			"${packages}/User/Default (${platform}).sublime-keymap",
									"default":				"//\n// Acecool - Source Code Navigator - Keybinds - User\n//\n[\n\t$0\n]\n",
								},
							},

							//
							// Mapper Settings - This should open the Default XCodeMapper Mapping Settings and EVERY SINGLE LANGUAGE File...
							//
							{ "caption": "-" },

							//
							{
								"caption": "Plugin Settings - Definitions",
								"command": "edit_settings",
								"args":
								{
									"base_file":	"${packages}/Acecool_CMS/settings/Default_PluginDefinitions.sublime-settings",
									"user_file":	"${packages}/User/Acecool_CMS/Default_PluginDefinitions.sublime-settings",
									"default":		"//\n// Acecool - Source Code Navigator Plugin Definitions - User\n//\n{\n\t$0\n}\n",
								},
							},

							//
							{
								"caption": "Plugin Settings - General",
								"command": "edit_settings",
								"args":
								{
									"base_file":	"${packages}/Acecool_CMS/settings/Default_PluginSettings.sublime-settings",
									"user_file":	"${packages}/User/Acecool_CMS/Default_PluginSettings.sublime-settings",
									"default":		"//\n// Acecool - Source Code Navigator Plugin Settings - User\n//\n{\n\t$0\n}\n",
									// "contents": "//\n// Acecool - Source Code Navigator Settings - User\n//\n{\n\t$0\n}\n",
								},
							},

							//
							{ "caption": "-" },

							//
							{
								"caption":			"Plugin Map Settings - Default",
								"command":			"edit_settings",
								"args":
								{
									"base_file":	"${packages}/Acecool_CMS/settings/Default_MapSettings.sublime-settings",
									"user_file":	"${packages}/User/Acecool_CMS/Default_MapSettings.sublime-settings",
									"default":		"//\n// Acecool - Source Code Navigator - Globally Inherited Mapper Default Settings - User\n//\n{\n\t$0\n}\n",
								},
							},

							//
							// Mapper Settings for ALL of the default mappers...
							//
							{
								"caption":					"Plugin Map Settings - File-Type Specific",
								"id":						"xcodemapper_all_mapper_settings",
								"children":
								[
									//
									{ "caption": "-" },

									//
									{
										"caption":			"Plugin Map Settings - Default",
										"command":			"edit_settings",
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/Default_MapSettings.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/Default_MapSettings.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - Globally Inherited Mapper Default Settings - User\n//\n{\n\t$0\n}\n",
										},
									},



									//
									{ "caption": "-" },

									//
									{
										"caption":			"AutoHotkey",
										"command":			"edit_settings",
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_ahk.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_ahk.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - ahk File Extension / AutoHotkey Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"Batch File",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_bat.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_bat.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - bat File Extension / Batch File Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"C++",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_cpp.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_cpp.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - cpp File Extension / C++ Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"JavaScript",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_js.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_jst.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - js File Extension / JavaScript Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"Lua / Garry's Mod Lua",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_lua.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_lua.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - lua File Extension / Lua & Garry's Mod Lua Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"MarkDown",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_md.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_md.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - md File Extension / MarkDown Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"PHP",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_php.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_php.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - php File Extension / PHP ie HypertextPreProcessor Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"Python",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_py.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_py.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - py File Extension / Python Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"Sublime-Settings",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_sublime-settings.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_sublime-settings.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - sublime-settings File Extension / Sublime Text Settings File Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"TypeScript",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_ts.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_ts.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - ts File Extension / TypeScript Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"Plain Text",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_txt.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_txt.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - txt File Extension / Plain Text File Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},
									{ "caption": "-" },
								],
							},


							//
							// Mapper Settings for ALL of the default mappers...
							//
							{
								"caption":					"Plugin Map Settings - Upcoming Supported Types",
								"id":						"xcodemapper_all_mapper_settings",
								"children":
								[
									//
									{ "caption": "-" },

									//
									{
										"caption":			"ASP",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_asp.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_asp.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - asp File Extension / ASP Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"C",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_c.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_c.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - c File Extension / C Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"C#",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_cs.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_cs.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - cs File Extension / C# ie C Sharp Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"h",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_h.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_h.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - h File Extension / Header File Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"html",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_html.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_html.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - htm, and html File Extensions / HT Markup Language Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"htm - redirects to html",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_html.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_html.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - htm, and html File Extensions / HT Markup Language Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"JSON",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_json_JSON.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_json_JSON.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - json File Extension / JSON Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"PIP",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_pip.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_pip.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - pip File Extension / PIP Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"sublime-keymap",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_sublime-keymap.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_sublime-keymap.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - sublime-keymap File Extension / Sublime Text Key Map File Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"sublime-snippet",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_sublime-snippet.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_sublime-snippet.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - sublime-snippet File Extension / Sublime Text Snippet File Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"sublime-syntax",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_sublime-syntax.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_sublime-syntax.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - sublime-syntax File Extension / Sublime Text Syntax File Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"tmLanguage",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_tmLanguage.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_tmLanguage.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - tmLanguage File Extension / tmLanguage Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"XML",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_xml.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_xml.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - xml File Extension / XML Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"YML",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/MapSettings_yml.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/MapSettings_yml.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - yml File Extension / YML Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									},

									//
									{
										"caption":			"... and more!",
										"command":			"edit_settings",

										//
										"args":
										{
											"base_file":	"${packages}/Acecool_CMS/settings/Default_MapSettings.sublime-settings",
											"user_file":	"${packages}/User/Acecool_CMS/Default_MapSettings.sublime-settings",
											"default":		"//\n// Acecool - Source Code Navigator - Globally Inherited Mapper Default Settings - User\n//\n{\n\t$0\n}\n",
										},
									},


								],
							},


							//
							{ "caption": "-" },

							//
							{
								"caption": "Donate",
								"command": "open_url",
								"args":
								{
									"url": "https://paypal.me/Acecool",
								},
							},

							//
							{ "caption": "-" },

							//
							{
								"caption": "Submit an Issue Report",
								"command": "open_url",
								"args":
								{
									"url": "https://bitbucket.org/Acecool/acecooldev_sublimetext3/issues/new",
								},
							},

							//
							{
								"caption": "Download Latest Version - Direct Link",
								"command": "open_url",
								"args":
								{
									"url": "https://bitbucket.org/Acecool/acecooldev_sublimetext3/get/master.zip",
								},
							},

							//
							{ "caption": "-" },

							//
							{
								"caption": "Change Log",
								"command": "open_file",
								"args":
								{
									"file": "${packages}/Acecool_CMS/changelog.md",
								},
							},

							//
							{
								"caption": "Information",
								"command": "open_file",
								"args":
								{
									"file": "${packages}/Acecool_CMS/README.md",
								}
							},

							//
							{ "caption": "-" },

							//
							{ "caption": "-" },






						]
					}
				]
			}
		]
	}
]

Obviously more than needed - but I figure it’ll help those trying to set up custom commands to get the 2 files to launch ( Default and User when User doesn’t exist )… I’ve seen that tactic in about 5 plugins and it’s reinventing the wheel… edit_settings is a useful command but I’d like to extend it…

Going through the current menu system is cumbersome so I’d like to make it as easy and quick as possible - I may even make smaller categories later such as Markup / Stylizing languages ( HTML, MD, CSS, etc… ) and programming languages ( C++, C#, C, Java, etc… ) and I may even go so far as to have a third for higher up scripting languages ( Python, Lua, etc… ) but I’d like to get there first…

I haven’t found much in the way of extending this feature - only examples to recreate edit_settings in an odd way but it wasn’t obvious how the data was being processed…

Any help would be appreciated.

0 Likes

#2

I’m short of time at the moment, but to potentially get you rolling on something, the edit_settings command is implemented in Default/settings.py. If you look there you can get a good sense for how it’s creating the window and populating the panels.

You could pull that command out into y our plugin (with a different name) and extend it to take a dictionary of arguments as required for either side.

2 Likes

#3

This is incredibly helpful, thanks… I’ll submit an EditSettingsPlusCommand or so to this thread later ( and maybe see if they’ll have it merged ) when I add table support for the files…

I’ll either allow user_file, base_file and default to be tables - but the issue with that is some people may have issues lining things up. The alternative is to make a new file_data component / table which takes tables as entries which can have base_file, user_file and default as options… This way each file and the related data stays together… Or I’ll add both…

0 Likes

#4

This is it so far…

TODO: Add res:// support, add Replacement Variable support, Add support for base_file, user_file, default outside of the context of the file_list so they can be a string or a table ( the helper function which adds the files is meant to minimize repeated code )…

Extra functionality may be nice: Add tab linking - ie click on X.sublime-settings in the User / Right pane, and X.default.sublime-settings is focused in the left ( before refocusing on the one you just opened ) and vice versa…

Because I’m launching 10 or so map settings files per pane, plus others in some cases… having the linking functionality will be a HUGE improvement… I will need to add a hotkey to switch between linked files - ie MapSettings_Default.sublime-settings can be used because of inheritance for MapSettings_User.sublime-settings AND all of the file-types so MapSettings_ahk.xxx, MS_bat.xxx, etc… So being able to press a hotkey and switch between default MapSettings_ahk.sublime-settings and MapSettings_Default.sublime-settings, and the others would improve efficiency of this system…

I’ve left the name as edit_settings_plus ( Could also do EditSettingsPlus or EditSettingsPlusCommand and it should still be modified to edit_settings_plus ) for now in this thread… But when I am finished I may change the name to prevent collisions and add it to my Sublime Framework / Definitions files and additional helper functions, classes, etc…

This post is just to show status as of now - which will work for file_list… Remember: Just because it works, doesn’t make it right - Josh ‘Acecool’ Moser 1989 or 90 – so I’ll be improving on it soon - this is to show you what to expect when released ( or submitted as a new default function although I’d need to use SublimeText coding standards for that )

Note: The Is* functions are meant to be in a Library file… They’re included in the main file for now until it’s finished…

##
## This file alters how the '> Preferences > Package Settings > Acecool - Source Code Navigator > ...' settings are displayed and opened / processed..  - Josh 'Acecool' Moser
##
# coding=utf-8
import os
import sublime
import sublime_plugin

##



##
## Declarations for Globals, CONSTants, ENUMeration, etc..
##

## True / False alternative definitions...
true										= True
false										= False
TRUE										= True
FALSE										= False


##
## Data-Type Helpers...
##

## IsSet is just to see whether or not something is None or not...
def IsSet( _data = None ): return _data != None

## A Boolean is a 1 bit data-type representing True / False or as 1 / 0 in most languages.
def IsBoolean( _data = None ): return type( _data ) is bool

## A List is a list created using [ ]s - It can contain a series of values - the index must be whole-numerical
def IsList( _data = None ): return type( _data ) is list

## A Tuple is a list created using ( )s - It is similar to a List but a Tuple is fixed in size once ccreated.
def IsTuple( _data = None ): return type( _data ) is tuple

## A Dict is a list created using { }s - It is a powerful data-type which allows string / etc.. key data-types, paired with a value which can be any Data-Type.
def IsDict( _data = None ): return type( _data ) is dict

## A String is a text object typically contained and / or created within quotes..
def IsString( _data = None ): return type( _data ) is str

## A Complex is a traditional Int as a whole number from 0-255
def IsComplex( _data = None ): return type( _data ) is complex

## An Integer, traditionally is a whole number not exceeding 255 - otherwise it typically has a range of 2.7 or so million... +/-
def IsInteger( _data = None ): return type( _data ) is int

## A long is a number as 123L which can represent octal and hexadecimal values
def IsLong( _data = None ): return type( _data ) is long

## A Float is half-size Double number with decimal support
def IsFloat( _data = None ): return type( _data ) is float

## A Number is an integer, float, double, etc..
def IsNumber( _data = None ): return IsComplex( _data ) or IsInteger( _data ) or IsLong( _data ) or IsFloat( _data )


##
## Data-Type Aliases
##
isset			= IsSet
isboolean		= IsBoolean
IsBool			= IsBoolean
isbool			= IsBoolean
islist			= IsList
istuple			= IsTuple
isdict			= IsDict
isstring		= IsString
iscomplex		= IsComplex
isinteger		= IsInteger
IsInt			= IsInteger
isint			= IsInteger
islong			= IsLong
isfloat			= IsFloat
isnumber		= IsNumber



##
##
##
def plugin_loaded( ):
	print( '>> Acecool_CMS Loaded' )


##
## Substitute for edit_settings - This adds support for base_file, user_file and default to be tables so a single command can open more than just 2 files. Optionally, if the user prefers to keep the data together, a file_list arg can be used with base_file, user_file, and default as entries in a nested table within file_list
##
class edit_settings_plus( sublime_plugin.ApplicationCommand ):
	##
	##
	##
	def OpenWindow( self ):
		pass


	##
	## Helper
	##
	def OpenFile( self ):
		pass


	##
	##
	##
	def GetPlatformName( self ):
		return {
			'osx':		'OSX',
			'windows':	'Windows',
			'linux':	'Linux',
		}[ sublime.platform( ) ]


	##
	##
	##
	def GetVariables( self, platform_name ):
		return {
			'packages':	'${packages}',
			'platform':	platform_name,
		}


	##
	## Determine whether or not to use res://Packages/ or .../Packages/
	##
	def GetFilePrefix( self ):
		pass


	##
	## Creates the new window and all the appropriate options
	##
	def CreateWindow( self ):
		## Create a new window - which automatically pops-up, not under
		sublime.run_command( 'new_window' )

		## meaning we can grab the active_window and know it's the window we just created
		_window = sublime.active_window( )

		## Then we can set up how the data will be shown with 2 columns
		_window.run_command(
			'set_layout',
			{
				'cols': [ 0.0, 0.5, 1.0 ],
				'rows': [ 0.0, 1.0 ],
				'cells':
				[
					[ 0, 0, 1, 1 ],
					[ 1, 0, 2, 1 ]
				],
			}
		)

		## Make sure certain settings are preset
		_window.set_tabs_visible( True )

		## Hide the side-bar
		_window.set_sidebar_visible( False )




		## _view_left = _window.active_view_in_group( 0 )
		## _view_right = _window.active_view_in_group( 1 )

		## _settings_left = _view_left.settings( )
		## _settings_left.set( 'edit_settings_view', 'base' )
		## _settings_left.set( 'edit_settings_other_view_id', _view_right.id( ) )

		## _settings_right = _view_right.settings( )
		## _settings_right.set( 'edit_settings_view', 'user' )
		## _settings_right.set( 'edit_settings_other_view_id', _view_left.id( ) )

		## Return the window so it can be used in the run function...
		## return [ _window, _view_left, _settings_left, _view_right, _settings_right ]
		return _window


	##
	## Just in case files need to exist before the extra settings can be applied...
	##
	## def SetupWindow( self, _window ):
	## 	base_view = _window.active_view_in_group( 0 )
	## 	user_view = _window.active_view_in_group( 1 )

	## 	base_settings = base_view.settings( )
	## 	base_settings.set( 'edit_settings_view', 'base' )
	## 	base_settings.set( 'edit_settings_other_view_id', user_view.id( ) )

	## 	user_settings = user_view.settings( )
	## 	user_settings.set( 'edit_settings_view', 'user' )
	## 	user_settings.set( 'edit_settings_other_view_id', base_view.id( ) )


	##
	## Opens a file in the appropriate panel with the default data, if any...
	##
	def OpenFile( self, _window, _group = 0, **_files_defaults ):
		_window.focus_group( _group )

		pass


	##
	##
	##
	def ProcessFile( self, _window, _view_left, _view_right, _base = None, _user = None, _default = None ):
		##
		if ( IsString( _base ) ):
			## Set Left side as focused so we can open files to it
			_window.focus_group( 0 )

			## Add files to the left
			_window.run_command( 'open_file', { 'file': _base } )

		##
		if ( IsString( _user ) ):
			## Set Right side as focused so we can open files to it
			_window.focus_group( 1 )

			## Add files to the right
			_window.run_command('open_file', { 'file': _user, 'contents': ( '', _default )[ _default != None ] } )

			if not os.path.exists( _user ):
				_view_right.set_scratch( True )

			## if ( IsString( _data ) ):
			## 	_settings_right.set( 'edit_settings_default', _data.replace( '$0', ' ' ) )

		print( '\t> File Base: ' + str( _base ) + ' || User: ' + str( _user ) ) # + ' || Default Content: ' + _contents

	##
	## X
	##
	## :param base_file:
	##		A unicode string of the path to the base settings file. Typically
	##		this will be in the form: "${packages}/PackageName/Package.sublime-settings"
	##
	## :param user_file:
	##		An optional file path to the user's editable version of the settings
	##		file. If not provided, the filename from base_file will be appended
	##		to "${packages}/User/".
	##
	## :param default:
	##		An optional unicode string of the default contents if the user
	##		version of the settings file does not yet exist. Use "$0" to place
	##		the cursor.
	##
	## :param file_list:
	##		An optional tuple of files with args: base_file, user_file, and default
	##		in order to open more than 1 of each per command...
	##
	def run( self, base_file = None, user_file = None, default = None, file_list = None ):
		## If base_file isn't set, and file_list isn't set, then we can't continue...
		if ( not IsSet( base_file ) and not IsSet( file_list ) ):
			raise ValueError( 'No base_file or file_list argument was passed to edit_settings_plus - base_file and user_file can be a Tuple of files, file_list can be a Tuple containing Dict Entries containing base_file, user_file and default args with the latter 2 optional..' )

		## Grabs important data...
		_platform		= self.GetPlatformName( )
		_replacers		= self.GetVariables( _platform )


		## Create the window
		## [ _window, _view_left, _settings_left, _view_right, _settings_right ] = self.CreateWindow( )
		_window = self.CreateWindow( )

		##
		_view_left = _window.active_view_in_group( 0 )
		_view_right = _window.active_view_in_group( 1 )

		##
		_settings_left = _view_left.settings( )
		_settings_right = _view_right.settings( )
		_settings_left.set( 'edit_settings_other_view_id', _view_right.id( ) )
		_settings_right.set( 'edit_settings_other_view_id', _view_left.id( ) )

		##
		## Determine how to proceed - if file_list exists, maybe don't process the others? maybe do?
		## Note: base_file and file_list are independent of one another so both can be used with the original loading first... So it can be a string or list...
		##


		##
		## If base_file is a string, then user_file and default should also be a string...
		##
		if ( IsString( base_file ) ):
			print( ' >> base_file IsString!' )

			## These are optional - This shouldn't be left alone because of the 2 panel system...
			if ( IsString( user_file ) ):
				print( ' >> user_file IsList!' )

			## These are optional - This defaults to an empty string...
			if ( IsString( default ) ):
				print( ' >> default IsList!' )


		##
		## base_file is the next most important arg to look at... If it is a list, then user_file and default should also be lists...
		##
		if ( IsList( base_file ) ):
			print( ' >> base_file IsList!' )

			## If user file is anything other than a list - then we ignore it...
			if ( IsList( user_file ) ):
				print( ' >> user_file IsList!' )

			## If default is a string here then it'll be used for all files...
			if ( IsList( default ) ):
				print( ' >> default IsList!' )


		##
		## If file_list is a list, then we can use it - toss out anything else to do with it...
		##
		if ( IsList( file_list ) ):
			print( ' >> file_list IsList!' )


			## For each entry...
			for _entry in file_list:
				## print( str( _data ) )
				_base = _entry[ "base_file" ]
				_user = _entry[ "user_file" ]
				_data = _entry[ "default" ] or default

				self.ProcessFile( _window, _view_left, _view_right, _base, _user, _data )



		## Apparently needs to be called at the end otherwise the window will be closed...
		_settings_left.set( 'edit_settings_view', 'base' )
		_settings_right.set( 'edit_settings_view', 'user' )



		## base_file = sublime.expand_variables( base_file, _replacers )
		## if user_file is not None:
		## 	user_file = sublime.expand_variables( user_file, _replacers )



		## base_path = base_file.replace( '${packages}', 'res://Packages' )
		## is_resource = base_path.startswith( 'res://' )
		## file_name = os.path.basename( base_file )
		## resource_exists = is_resource and base_path[ 6 : ] in sublime.find_resources( file_name )
		## filesystem_exists = ( not is_resource ) and os.path.exists( base_path )



		## if not resource_exists and not filesystem_exists:
		## 	sublime.error_message('The settings file "' + base_path + '" could not be opened')
		## 	return




		## if user_file is None:
		## 	user_package_path = os.path.join(sublime.packages_path(), 'User')
		## 	user_file = os.path.join(user_package_path, file_name)

		## 	# If the user path does not exist, and it is a supported
		## 	# platform-variant file path, then try and non-platform-variant
		## 	# file path.
		## 	if not os.path.exists(os.path.join(user_package_path, file_name)):
		## 		for suffix in {'.sublime-keymap', '.sublime-mousemap', '.sublime-menu'}:
		## 			platform_suffix = ' (%s)%s' % ( _platform, suffix )
		## 			if not file_name.endswith(platform_suffix):
		## 				continue
		## 			non_platform_file_name = file_name[:-len(platform_suffix)] + suffix
		## 			non_platform_path = os.path.join(user_package_path, non_platform_file_name)
		## 			if os.path.exists(non_platform_path):
		## 				user_file = non_platform_path
		## 				break






		## ## Set Left side as focused so we can open files to it
		## _window.focus_group( 0 )

		## ## Add files to the left
		## _window.run_command( 'open_file', { 'file': base_file } )

		## ## Set Right side as focused so we can open files to it
		## _window.focus_group( 1 )

		## ## Add files to the right
		## _window.run_command('open_file', { 'file': user_file, 'contents': default } )

		## ## Run the final window setup ( may not be required - or may need to have files in at least one segment prior to running these commands )
		## ## self.SetupWindow( _window )

		## if not os.path.exists( user_file ):
		## 	_view_right.set_scratch( True )
		## 	_settings_right.set( 'edit_settings_default', default.replace( '$0', ' ' ) )

Still some work to do but file_list will work but it doesn’t parse the vars or use res:// yet… I’m making all of the helper functions because then I can ensure the least amount of code is repeated…

Here’s an example context menu

//
//
//
[
	//
	//
	//
	{
		"caption": "Acecool's Code Mapping System",
		"children":
		[
			//
			{
				"caption": "Toggle Mapping Panel",
				// "command": "acecool_cms_toggle_panel",
				"command": "show_code_map",
			},

			//
			{ "caption": "-", },

			//
			// Mapper Settings for ALL of the default mappers...
			//
			{
				"caption":					"Plugin Settings - ALL",
				"id":						"acecool_cms_open_all_plugin_settings",
				"command":					"edit_settings_plus",
				"args":
				{
					// "base_file": null,
					// "user_file": null,
					// "default": null,

					"file_list":
					[
						{
							// "caption":		"Plugin Key Bindings",
							"base_file":	"${packages}/Acecool_CMS/settings/Default (${platform}).sublime-keymap",
							"user_file":	"${packages}/User/Default (${platform}).sublime-keymap",
							"default":		"//\n// Acecool - Source Code Navigator - Keybinds - User\n//\n[\n\t$0\n]\n",
						},

						{
							// "caption":		"Plugin Settings - Definitions",
							"base_file":	"${packages}/Acecool_CMS/settings/Default_PluginDefinitions.sublime-settings",
							"user_file":	"${packages}/User/Acecool_CMS/Default_PluginDefinitions.sublime-settings",
							"default":		"//\n// Acecool - Source Code Navigator Plugin Definitions - User\n//\n{\n\t$0\n}\n",
						},

						{
							// "caption":		"Plugin Settings - General",
							"base_file":	"${packages}/Acecool_CMS/settings/Default_PluginSettings.sublime-settings",
							"user_file":	"${packages}/User/Acecool_CMS/Default_PluginSettings.sublime-settings",
							"default":		"//\n// Acecool - Source Code Navigator Plugin Settings - User\n//\n{\n\t$0\n}\n",
							// "contents": "//\n// Acecool - Source Code Navigator Settings - User\n//\n{\n\t$0\n}\n",
						},

						{
							// "caption":		"Plugin Map Settings - Default",
							"base_file":	"${packages}/Acecool_CMS/settings/Default_MapSettings.sublime-settings",
							"user_file":	"${packages}/User/Acecool_CMS/Default_MapSettings.sublime-settings",
							"default":		"//\n// Acecool - Source Code Navigator - Globally Inherited Mapper Default Settings - User\n//\n{\n\t$0\n}\n",
						},
					],
				},
			},


			//
			// Mapper Settings for ALL of the default mappers...
			//
			{
				"caption":					"Plugin Map Settings - ALL",
				"id":						"acecool_cms_open_all_map_settings",
				"command":					"edit_settings_plus",
				"args":
				{
					"file_list":
					[
						{
							// "caption":			"Plugin Map Settings - Default",
							"base_file":		"${packages}/Acecool_CMS/settings/Default_MapSettings.sublime-settings",
							"user_file":		"${packages}/User/Acecool_CMS/Default_MapSettings.sublime-settings",
							"default":			"//\n// Acecool - Source Code Navigator - Globally Inherited Mapper Default Settings - User\n//\n{\n\t$0\n}\n",
						},

						{
							// "caption":			"AutoHotkey",
							"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_ahk.sublime-settings",
							"user_file":		"${packages}/User/Acecool_CMS/MapSettings_ahk.sublime-settings",
							"default":			"//\n// Acecool - Source Code Navigator - ahk File Extension / AutoHotkey Mapper Settings - User\n//\n{\n\t$0\n}\n",
						},

						{
							// "caption":			"Batch File",
							"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_bat.sublime-settings",
							"user_file":		"${packages}/User/Acecool_CMS/MapSettings_bat.sublime-settings",
							"default":			"//\n// Acecool - Source Code Navigator - bat File Extension / Batch File Mapper Settings - User\n//\n{\n\t$0\n}\n",
						},

						{
							// "caption":			"C++",
							"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_cpp.sublime-settings",
							"user_file":		"${packages}/User/Acecool_CMS/MapSettings_cpp.sublime-settings",
							"default":			"//\n// Acecool - Source Code Navigator - cpp File Extension / C++ Mapper Settings - User\n//\n{\n\t$0\n}\n",
						},

						{
							// "caption":			"JavaScript",
							"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_js.sublime-settings",
							"user_file":		"${packages}/User/Acecool_CMS/MapSettings_jst.sublime-settings",
							"default":			"//\n// Acecool - Source Code Navigator - js File Extension / JavaScript Mapper Settings - User\n//\n{\n\t$0\n}\n",
						},

						{
							// "caption":			"Lua / Garry's Mod Lua",
							"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_lua.sublime-settings",
							"user_file":		"${packages}/User/Acecool_CMS/MapSettings_lua.sublime-settings",
							"default":			"//\n// Acecool - Source Code Navigator - lua File Extension / Lua & Garry's Mod Lua Mapper Settings - User\n//\n{\n\t$0\n}\n",
						},

						{
							// "caption":			"MarkDown",
							"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_md.sublime-settings",
							"user_file":		"${packages}/User/Acecool_CMS/MapSettings_md.sublime-settings",
							"default":			"//\n// Acecool - Source Code Navigator - md File Extension / MarkDown Mapper Settings - User\n//\n{\n\t$0\n}\n",
						},

						{
							// "caption":			"PHP",
							"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_php.sublime-settings",
							"user_file":		"${packages}/User/Acecool_CMS/MapSettings_php.sublime-settings",
							"default":			"//\n// Acecool - Source Code Navigator - php File Extension / PHP ie HypertextPreProcessor Mapper Settings - User\n//\n{\n\t$0\n}\n",
						},

						{
							// "caption":			"Python",
							"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_py.sublime-settings",
							"user_file":		"${packages}/User/Acecool_CMS/MapSettings_py.sublime-settings",
							"default":			"//\n// Acecool - Source Code Navigator - py File Extension / Python Mapper Settings - User\n//\n{\n\t$0\n}\n",
						},

						{
							// "caption":			"Sublime-Settings",
							"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_sublime-settings.sublime-settings",
							"user_file":		"${packages}/User/Acecool_CMS/MapSettings_sublime-settings.sublime-settings",
							"default":			"//\n// Acecool - Source Code Navigator - sublime-settings File Extension / Sublime Text Settings File Mapper Settings - User\n//\n{\n\t$0\n}\n",
						},

						{
							// "caption":			"TypeScript",
							"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_ts.sublime-settings",
							"user_file":		"${packages}/User/Acecool_CMS/MapSettings_ts.sublime-settings",
							"default":			"//\n// Acecool - Source Code Navigator - ts File Extension / TypeScript Mapper Settings - User\n//\n{\n\t$0\n}\n",
						},

						{
							// "caption":			"Plain Text",
							"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_txt.sublime-settings",
							"user_file":		"${packages}/User/Acecool_CMS/MapSettings_txt.sublime-settings",
							"default":			"//\n// Acecool - Source Code Navigator - txt File Extension / Plain Text File Mapper Settings - User\n//\n{\n\t$0\n}\n",
						},
					],
				},
			},

			//
			{ "caption": "-", },

			//
			{
				"caption": "Replace Spaces with Tabs",
				// "command": "acecool_cms_toggle_panel",
				"command": "acecool_replace_spaces_with_tabs",
			},
		],
	}
]

and main plugin preferences menu

//
// Acecool's Source Code Navigation System - Preferences / Menu system...
//
[	//
	{
		//
		"id": "preferences",

		//
		"children":
		[
			//
			{
				//
				"id": "package-settings",

				//
				"children":
				[
					//
					{
						//
						"caption": "Acecool - Source Code Navigator / Source Code Tree Climber / CodeNode",

						//
						"children":
						[
							{ "caption": "-" },


							//
							// Key Bindings - Opens the XCodeMapper Additional Key-Defaults and the Currently used Windows / OSX / Linux Key-Bindings file the User uses so the user can add the keys to it if they want to change the default keys...
							//
							{
								"caption":					"Plugin Key Bindings",
								"command":					"edit_settings",
								"is_visible":				true,

								//
								"args":
								{
									"base_file":			"${packages}/Acecool_CMS/settings/Default (${platform}).sublime-keymap",
									"user_file":			"${packages}/User/Default (${platform}).sublime-keymap",
									"default":				"//\n// Acecool - Source Code Navigator - Keybinds - User\n//\n[\n\t$0\n]\n",
								},
							},

							//
							// Mapper Settings - This should open the Default XCodeMapper Mapping Settings and EVERY SINGLE LANGUAGE File...
							//
							{ "caption": "-" },

							//
							{
								"caption": "Plugin Settings - Definitions",
								"command": "edit_settings",
								"args":
								{
									"base_file":	"${packages}/Acecool_CMS/settings/Default_PluginDefinitions.sublime-settings",
									"user_file":	"${packages}/User/Acecool_CMS/Default_PluginDefinitions.sublime-settings",
									"default":		"//\n// Acecool - Source Code Navigator Plugin Definitions - User\n//\n{\n\t$0\n}\n",
								},
							},

							//
							{
								"caption": "Plugin Settings - General",
								"command": "edit_settings",
								"args":
								{
									"base_file":	"${packages}/Acecool_CMS/settings/Default_PluginSettings.sublime-settings",
									"user_file":	"${packages}/User/Acecool_CMS/Default_PluginSettings.sublime-settings",
									"default":		"//\n// Acecool - Source Code Navigator Plugin Settings - User\n//\n{\n\t$0\n}\n",
									// "contents": "//\n// Acecool - Source Code Navigator Settings - User\n//\n{\n\t$0\n}\n",
								},
							},

							//
							{ "caption": "-" },

							//
							{
								"caption":			"Plugin Map Settings - Default",
								"command":			"edit_settings",
								"args":
								{
									"base_file":	"${packages}/Acecool_CMS/settings/Default_MapSettings.sublime-settings",
									"user_file":	"${packages}/User/Acecool_CMS/Default_MapSettings.sublime-settings",
									"default":		"//\n// Acecool - Source Code Navigator - Globally Inherited Mapper Default Settings - User\n//\n{\n\t$0\n}\n",
								},
							},

							//
							// Mapper Settings for ALL of the default mappers...
							//
							{
								"caption":					"Plugin Map Settings - ALL",
								"id":						"acecool_cms_open_all_map_settings",
								"command":					"edit_settings_plus",
								"args":
								{
									"file_list":
									[
										{
											// "caption":			"Plugin Map Settings - Default",
											"base_file":		"${packages}/Acecool_CMS/settings/Default_MapSettings.sublime-settings",
											"user_file":		"${packages}/User/Acecool_CMS/Default_MapSettings.sublime-settings",
											"default":			"//\n// Acecool - Source Code Navigator - Globally Inherited Mapper Default Settings - User\n//\n{\n\t$0\n}\n",
										},

										{
											// "caption":			"AutoHotkey",
											"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_ahk.sublime-settings",
											"user_file":		"${packages}/User/Acecool_CMS/MapSettings_ahk.sublime-settings",
											"default":			"//\n// Acecool - Source Code Navigator - ahk File Extension / AutoHotkey Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},

										{
											// "caption":			"Batch File",
											"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_bat.sublime-settings",
											"user_file":		"${packages}/User/Acecool_CMS/MapSettings_bat.sublime-settings",
											"default":			"//\n// Acecool - Source Code Navigator - bat File Extension / Batch File Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},

										{
											// "caption":			"C++",
											"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_cpp.sublime-settings",
											"user_file":		"${packages}/User/Acecool_CMS/MapSettings_cpp.sublime-settings",
											"default":			"//\n// Acecool - Source Code Navigator - cpp File Extension / C++ Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},

										{
											// "caption":			"JavaScript",
											"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_js.sublime-settings",
											"user_file":		"${packages}/User/Acecool_CMS/MapSettings_jst.sublime-settings",
											"default":			"//\n// Acecool - Source Code Navigator - js File Extension / JavaScript Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},

										{
											// "caption":			"Lua / Garry's Mod Lua",
											"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_lua.sublime-settings",
											"user_file":		"${packages}/User/Acecool_CMS/MapSettings_lua.sublime-settings",
											"default":			"//\n// Acecool - Source Code Navigator - lua File Extension / Lua & Garry's Mod Lua Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},

										{
											// "caption":			"MarkDown",
											"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_md.sublime-settings",
											"user_file":		"${packages}/User/Acecool_CMS/MapSettings_md.sublime-settings",
											"default":			"//\n// Acecool - Source Code Navigator - md File Extension / MarkDown Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},

										{
											// "caption":			"PHP",
											"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_php.sublime-settings",
											"user_file":		"${packages}/User/Acecool_CMS/MapSettings_php.sublime-settings",
											"default":			"//\n// Acecool - Source Code Navigator - php File Extension / PHP ie HypertextPreProcessor Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},

										{
											// "caption":			"Python",
											"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_py.sublime-settings",
											"user_file":		"${packages}/User/Acecool_CMS/MapSettings_py.sublime-settings",
											"default":			"//\n// Acecool - Source Code Navigator - py File Extension / Python Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},

										{
											// "caption":			"Sublime-Settings",
											"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_sublime-settings.sublime-settings",
											"user_file":		"${packages}/User/Acecool_CMS/MapSettings_sublime-settings.sublime-settings",
											"default":			"//\n// Acecool - Source Code Navigator - sublime-settings File Extension / Sublime Text Settings File Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},

										{
											// "caption":			"TypeScript",
											"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_ts.sublime-settings",
											"user_file":		"${packages}/User/Acecool_CMS/MapSettings_ts.sublime-settings",
											"default":			"//\n// Acecool - Source Code Navigator - ts File Extension / TypeScript Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},

										{
											// "caption":			"Plain Text",
											"base_file":		"${packages}/Acecool_CMS/settings/MapSettings_txt.sublime-settings",
											"user_file":		"${packages}/User/Acecool_CMS/MapSettings_txt.sublime-settings",
											"default":			"//\n// Acecool - Source Code Navigator - txt File Extension / Plain Text File Mapper Settings - User\n//\n{\n\t$0\n}\n",
										},
									],
								},
							},
						]
					}
				]
			}
		]
	}
]
0 Likes

#5

Just an update - I haven’t stopped … I had a busy day with PT today so 14th is next coding time because I wasn’t able to do much today on acount of PT…

I’ve been working on slimming it down, getting rid of repeated code and working on the default text loader so null can be used, and skip files with other files after the skipped ones still able to see the data - this works perfectly in file_list, but when using base_file, user_file and default - it’s kind of odd but I’m almost done and ready to present it…

0 Likes