I am creating a plugin for ST3 and need a list of all defined areas. I know that pressing ctrl+alt+shift+p shows the current scope in the status bar, but I cannot do this for each file extension.
Edit:
In addition to simple .tmLanguage files .tmLanguage I extract the .sublime-package files and read the .tmLanguage files from the inside. This added some entries, such as source.php to the list. But source.python is still missing!
Actually python code: (this is for Python 3.3)
import sublime, sublime_plugin, os, subprocess, glob, tempfile, plistlib from zipfile import ZipFile def scopes_inside(d): result = [] for k in d.keys(): if k == 'scopeName': result = result + [ s.strip() for s in d[k].split(',') ] elif isinstance(d[k], dict): result = result + scopes_inside(d[k]) return result scopes = set() for x in os.walk(sublime.packages_path() + '/..'): for f in glob.glob(os.path.join(x[0], '*.tmLanguage')): for s in scopes_inside(plistlib.readPlist(f)): scopes.add(s.strip()) for x in os.walk(sublime.packages_path() + '/..'): for f in glob.glob(os.path.join(x[0], '*.sublime-package')): input_zip = ZipFile(f) for name in input_zip.namelist(): if name.endswith('.tmLanguage'): for s in self.get_scopes_from(plistlib.readPlistFromBytes(input_zip.read(name))): scopes.add(s.strip()) scopes = list(scopes)
And now he gives this list:
"font", "license", "source.c++", "source.cmake", "source.coffee", "source.css", "source.d", "source.disasm", "source.dockerfile", "source.gdb.session", "source.gdbregs", "source.git", "source.gradle", "source.groovy", "source.gruntfile.coffee", "source.gruntfile.js", "source.gulpfile.coffee", "source.gulpfile.js", "source.ini", "source.ini.editorconfig", "source.jade", "source.jl", "source.js", "source.json", "source.json.bower", "source.json.npm", "source.jsx", "source.less", "source.php", "source.procfile", "source.puppet", "source.pyjade", "source.qml", "source.rust", "source.sass", "source.scss", "source.shell", "source.stylus", "source.swift", "source.yaml", "source.zen.5a454e6772616d6d6172", "text.html.basic", "text.html.mustache", "text.html.ruby", "text.html.twig", "text.slim", "text.todo"
But I can not find languages ββlike python in this list. I think others are stored in some binaries somewhere in the installation folder. If so, how is the file syntax handled?