mirror of
https://github.com/sstent/sublime-text-3.git
synced 2026-01-26 15:11:55 +00:00
backing up sublime settings
This commit is contained in:
67
Packages/SublimeREPL/run_existing_command.py
Normal file
67
Packages/SublimeREPL/run_existing_command.py
Normal file
@@ -0,0 +1,67 @@
|
||||
from __future__ import absolute_import, unicode_literals, print_function, division
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import sys
|
||||
import json
|
||||
import sublime
|
||||
import sublime_plugin
|
||||
|
||||
SUBLIMEREPL_DIR = None
|
||||
SUBLIMEREPL_USER_DIR = None
|
||||
|
||||
def plugin_loaded():
|
||||
global SUBLIMEREPL_DIR
|
||||
global SUBLIMEREPL_USER_DIR
|
||||
SUBLIMEREPL_DIR = "Packages/SublimeREPL"
|
||||
SUBLIMEREPL_USER_DIR = os.path.join(sublime.packages_path(), "User", "SublimeREPL")
|
||||
|
||||
PY2 = False
|
||||
if sys.version_info[0] == 2:
|
||||
SUBLIMEREPL_DIR = os.getcwdu()
|
||||
SUBLIMEREPL_USER_DIR = os.path.join(sublime.packages_path(), "User", "SublimeREPL")
|
||||
PY2 = True
|
||||
|
||||
# yes, CommandCommmand :)
|
||||
class RunExistingWindowCommandCommand(sublime_plugin.WindowCommand):
|
||||
def run(self, id, file):
|
||||
"""Find and run existing command with id in specified file.
|
||||
SUBLIMEREPL_USER_DIR is consulted first, and then SUBLIMEREPL_DIR"""
|
||||
for prefix in (SUBLIMEREPL_USER_DIR, SUBLIMEREPL_DIR):
|
||||
path = os.path.join(prefix, file)
|
||||
json_cmd = self._find_cmd(id, path)
|
||||
if json_cmd:
|
||||
break
|
||||
if not json_cmd:
|
||||
return
|
||||
args = json_cmd["args"] if "args" in json_cmd else None
|
||||
self.window.run_command(json_cmd["command"], args)
|
||||
|
||||
def _find_cmd(self, id, file):
|
||||
return self._find_cmd_in_file(id, file)
|
||||
|
||||
def _find_cmd_in_file(self, id, file):
|
||||
try:
|
||||
if PY2 or os.path.isfile(file):
|
||||
with open(file) as f:
|
||||
bytes = f.read()
|
||||
else:
|
||||
bytes = sublime.load_resource(file)
|
||||
except (IOError, ValueError):
|
||||
return None
|
||||
else:
|
||||
data = json.loads(bytes)
|
||||
return self._find_cmd_in_json(id, data)
|
||||
|
||||
def _find_cmd_in_json(self, id, json_object):
|
||||
if isinstance(json_object, list):
|
||||
for elem in json_object:
|
||||
cmd = self._find_cmd_in_json(id, elem)
|
||||
if cmd:
|
||||
return cmd
|
||||
elif isinstance(json_object, dict):
|
||||
if "id" in json_object and json_object["id"] == id:
|
||||
return json_object
|
||||
elif "children" in json_object:
|
||||
return self._find_cmd_in_json(id, json_object["children"])
|
||||
return None
|
||||
Reference in New Issue
Block a user