def backupMenu():
if not os.path.isdir(dDir):
return
if not getSetting('auto_backup', True):
return
bDir = os.path.join(mDir, version, 'backup')
if not os.path.isdir(bDir):
os.makedirs(bDir)
for item in os.listdir(dDir):
filename = os.path.join(dDir, item)
if os.path.isfile(filename) and item.endswith(mExt[:-5]):
target = os.path.join(bDir, item + mExt[-5:])
open(target, 'wb').write(open(filename, 'rb').read())
python类version()的实例源码
def restoreMenu():
if not os.path.isdir(dDir):
os.makedirs(dDir)
for item in os.listdir(dDir):
filename = os.path.join(dDir, item)
if os.path.isfile(filename) and item.endswith(mExt[:-5]):
os.remove(filename)
bDir = os.path.join(mDir, version, 'backup')
if not os.path.isdir(bDir):
return
for item in os.listdir(bDir):
filename = os.path.join(bDir, item)
if os.path.isfile(filename) and item.endswith(mExt):
target = os.path.join(dDir, item[:-5])
open(target, 'wb').write(open(filename, 'rb').read())
def init():
if v == '3' and (sublime.installed_packages_path() in pDir):
pkgDir = os.path.join(sublime.packages_path(), pName);
if not os.path.isdir(pkgDir):
pkgFile = os.path.dirname(os.path.abspath(__file__))
unpackSelf(pkgFile, pkgDir)
return
locale = ''
firstRun = False
fFile = os.path.join(pDir, '.firstRun')
if not os.path.isfile(fFile):
firstRun = True
backupMenu()
open(fFile, 'wt').write('')
locale = getSetting('locale', '')
eDir = os.path.join(mDir, version, 'en');
if v == '3' and not os.path.isdir(eDir):
eFile = sublime.executable_path();
dFile = os.path.join(os.path.dirname(eFile), 'Packages', 'Default.sublime-package');
unpackMenu(dFile, eDir);
makeMenu(locale, firstRun)
makeCommand(locale, firstRun)
setLocale(locale, firstRun)
s = sublime.load_settings(sFile)
s.add_on_change('locale', updateLocale)
def _get_package_version():
pkg_json = sublime.load_resource("Packages/" + settings.PACKAGE_NAME +
"/package.json")
return json.loads(pkg_json)["version"]
def __exit__(self, type, value, traceback):
view = self.view
if sublime.version().startswith('2'):
edit = view.begin_edit()
self.run(edit)
view.end_edit(edit)
else:
key = str(hash(tuple(self.steps)))
sublime.edit_storage[key] = self.run
view.run_command('apply_edit', {'key': key})
def write(self, content):
with open(self.path(), 'w+', encoding='utf8', newline='') as f:
f.write(str(content))
if 3000 <= int(sublime.version()) < 3088:
# Fixes as best as possible a new file permissions issue
# See https://github.com/titoBouzout/SideBarEnhancements/issues/203
# See https://github.com/SublimeTextIssues/Core/issues/239
oldmask = os.umask(0o000)
if oldmask == 0:
os.chmod(self.path(), 0o644)
os.umask(oldmask)
def _makedirs(self, path):
if 3000 <= int(sublime.version()) < 3088:
# Fixes as best as possible a new directory permissions issue
# See https://github.com/titoBouzout/SideBarEnhancements/issues/203
# See https://github.com/SublimeTextIssues/Core/issues/239
oldmask = os.umask(0o000)
if oldmask == 0:
os.makedirs(path, 0o755);
else:
os.makedirs(path);
os.umask(oldmask)
else:
os.makedirs(path)
def has_libclang():
"""Ensure libclang tests will run only on platforms that support this.
Returns:
str: row contents
"""
# Older version of Sublime Text x64 have ctypes crash bug.
if platform.system() == "Windows" and sublime.arch() == "x64" and \
int(sublime.version()) < 3123:
return False
return True
def __init__(self, theme: str) -> None:
self.theme = theme
if int(sublime.version()) < 3070:
return
if Tooltip.loaded is False:
self._load_css_themes()
self._load_tooltips()
Tooltip.loaded = True
def _show_popup(self, view: sublime.View) -> None:
"""Show message in a popup if sublime text version is >= 3070
"""
show_doc = get_settings(view, 'merge_signatures_and_doc', True)
content = {'content': self.signature}
display_tooltip = 'signature'
if show_doc:
content = {'signature': self.signature, 'doc': self.doc}
display_tooltip = 'signature_doc'
css = get_settings(view, 'anaconda_tooltip_theme', 'dark')
Tooltip(css).show_tooltip(
view, display_tooltip, content, partial(self._show_status, view))
def parse_global(self):
"""Parse global settings."""
color_settings = {}
for item in self.csm.plist_file["settings"]:
if item.get('scope', None) is None and item.get('name', None) is None:
color_settings = item["settings"]
break
# Get general theme colors from color scheme file
self.bground = self.strip_color(color_settings.get("background", '#FFFFFF'), simple_strip=True)
rgba = RGBA(self.bground)
self.lums = rgba.get_luminance()
is_dark = self.lums <= LUM_MIDPOINT
settings = sublime.load_settings("Preferences.sublime-settings")
self.variables = {
"is_dark": is_dark,
"is_light": not is_dark,
"sublime_version": int(sublime.version()),
"mdpopups_version": ver.version(),
"color_scheme": self.scheme_file,
"use_pygments": not settings.get('mdpopups.use_sublime_highlighter', False),
"default_formatting": settings.get('mdpopups.default_formatting', True)
}
self.html_border = rgba.get_rgb()
self.fground = self.strip_color(color_settings.get("foreground", '#000000'))
# Intialize colors with the global foreground, background, and fake html_border
self.colors = OrderedDict()
self.colors['.foreground'] = OrderedDict([('color', 'color: %s; ' % self.fground)])
self.colors['.background'] = OrderedDict([('background-color', 'background-color: %s; ' % self.bground)])
def gen_css(self):
"""Generate the CSS and the associated template environment."""
self.colors = OrderedDict()
self.parse_global()
self.parse_settings()
# Assemble the CSS text
text = []
css_entry = '%s { %s}' if int(sublime.version()) < 3119 else '.mdpopups %s { %s}'
for k, v in self.colors.items():
text.append(css_entry % (k, ''.join(v.values())))
self.text = '\n'.join(text)
# Create Jinja template
self.env = jinja2.Environment()
self.env.filters['css'] = self.retrieve_selector
self.env.filters['pygments'] = self.pygments
self.env.filters['foreground'] = self.to_fg
self.env.filters['background'] = self.to_bg
self.env.filters['brightness'] = self.brightness
self.env.filters['colorize'] = self.colorize
self.env.filters['hue'] = self.hue
self.env.filters['invert'] = self.invert
self.env.filters['saturation'] = self.saturation
self.env.filters['grayscale'] = self.grayscale
self.env.filters['sepia'] = self.sepia
self.env.filters['fade'] = self.fade
self.env.filters['getcss'] = self.read_css
self.env.filters['relativesize'] = self.relativesize
def version():
"""Get the current version."""
return ver.version()
def get_package_and_resource_name(path):
"""
This method will return the package name and resource name from a path.
Arguments:
path Path to parse for package and resource name.
"""
package = None
resource = None
path = _normalize_to_sublime_path(path)
if os.path.isabs(path):
packages_path = _normalize_to_sublime_path(sublime.packages_path())
if path.startswith(packages_path):
package, resource = _search_for_package_and_resource(path, packages_path)
if int(sublime.version()) >= 3006:
packages_path = _normalize_to_sublime_path(sublime.installed_packages_path())
if path.startswith(packages_path):
package, resource = _search_for_package_and_resource(path, packages_path)
packages_path = _normalize_to_sublime_path(os.path.dirname(sublime.executable_path()) + os.sep + "Packages")
if path.startswith(packages_path):
package, resource = _search_for_package_and_resource(path, packages_path)
else:
path = re.sub(r"^Packages/", "", path)
split = re.split(r"/", path, 1)
package = split[0]
package = package.replace(".sublime-package", "")
resource = split[1]
return (package, resource)
def get_packages_list(ignore_packages=True, ignore_patterns=[]):
"""
Return a list of packages.
"""
package_set = set()
package_set.update(_get_packages_from_directory(sublime.packages_path()))
if int(sublime.version()) >= 3006:
package_set.update(_get_packages_from_directory(sublime.installed_packages_path(), ".sublime-package"))
executable_package_path = os.path.dirname(sublime.executable_path()) + os.sep + "Packages"
package_set.update(_get_packages_from_directory(executable_package_path, ".sublime-package"))
if ignore_packages:
ignored_list = sublime.load_settings(
"Preferences.sublime-settings").get("ignored_packages", [])
else:
ignored_list = []
for package in package_set:
for pattern in ignore_patterns:
if re.match(pattern, package):
ignored_list.append(package)
break
for ignored in ignored_list:
package_set.discard(ignored)
return sorted(list(package_set))
def collect(self):
self.elements.clear()
db0 = DataBlock('Version and architecture')
db0.items.append(DataItem('name', 'Sublime Text'))
db0.items.append(DataItem('version', sublime.version()))
db0.items.append(DataItem('architecture', sublime.arch()))
db0.items.append(DataItem('channel', sublime.channel()))
db0.items.append(DataItem('platform', sublime.platform()))
view = sublime.active_window().active_view()
view_settings = view.settings()
db1 = DataBlock('View settings')
for setting_name in ('syntax', 'tab_size', 'translate_tabs_to_spaces'):
db1.items.append(DataItem(setting_name, view_settings.get(setting_name)))
db2 = DataBlock('View state')
db2.items.append(DataItem('is view dirty', view.is_dirty()))
db2.items.append(DataItem('is view readonly', view.is_read_only()))
db1.items.append(DataItem('encoding', view.encoding()))
db1.items.append(DataItem('em width', view.em_width()))
db1.items.append(DataItem('selection count', len(view.sel())))
db1.items.append(DataItem('has non empty selections', view.has_non_empty_selection_region()))
self.elements.append(db0)
# TODO: Split the rest up into methods.
self.collect_package_data()
self.elements.append(db1)
self.elements.append(db2)
self.collect_profiling_data()
def collect_profiling_data(self):
if sublime.version() < '3102':
return
from Default.profile import profile_text
block = DataBlock('Profiling data (as reported by Default/profile.py)')
block.items.append(PreItem(profile_text().strip()))
self.elements.append(block)
def add_regions(self, regions):
package_name = (PLUGIN_FOLDER.split(os.path.sep))[-1]
if int(sublime.version()) >= 3000:
icon = "Packages/" + package_name + "/warning.png"
self.view.add_regions("solium_errors", regions, "keyword", icon,
sublime.DRAW_EMPTY |
sublime.DRAW_NO_FILL |
sublime.DRAW_NO_OUTLINE |
sublime.DRAW_SQUIGGLY_UNDERLINE)
else:
icon = ".." + os.path.sep + package_name + os.path.sep + "warning"
self.view.add_regions("solium_errors", regions, "keyword", icon,
sublime.DRAW_EMPTY |
sublime.DRAW_OUTLINED)
def write(self, content):
with open(self.path(), 'w+', encoding='utf8', newline='') as f:
f.write(str(content))
if 3000 <= int(sublime.version()) < 3088:
# Fixes as best as possible a new file permissions issue
# See https://github.com/titoBouzout/SideBarEnhancements/issues/203
# See https://github.com/SublimeTextIssues/Core/issues/239
oldmask = os.umask(0o000)
if oldmask == 0:
os.chmod(self.path(), 0o644)
os.umask(oldmask)
def _makedirs(self, path):
if 3000 <= int(sublime.version()) < 3088:
# Fixes as best as possible a new directory permissions issue
# See https://github.com/titoBouzout/SideBarEnhancements/issues/203
# See https://github.com/SublimeTextIssues/Core/issues/239
oldmask = os.umask(0o000)
if oldmask == 0:
os.makedirs(path, 0o755);
else:
os.makedirs(path);
os.umask(oldmask)
else:
os.makedirs(path)