136 lines
4.2 KiB
Python
136 lines
4.2 KiB
Python
import sublime
|
|
import sublime_plugin
|
|
|
|
import plistlib
|
|
import json
|
|
|
|
import glob
|
|
import os
|
|
import sys
|
|
|
|
# Makes sublime_lib package available for all packages.
|
|
if not os.path.join(sublime.packages_path(), "AAAPackageDev/Lib") in sys.path:
|
|
sys.path.append(os.path.join(sublime.packages_path(), "AAAPackageDev/Lib"))
|
|
|
|
from sublime_lib.path import root_at_packages
|
|
|
|
|
|
DEBUG = 1
|
|
THIS_PACKAGE = "AAAPackageDev"
|
|
|
|
status = sublime.status_message
|
|
error = sublime.error_message
|
|
join_path = os.path.join
|
|
path_exists = os.path.exists
|
|
|
|
DEFAULT_DIRS = (
|
|
"Snippets",
|
|
"Support",
|
|
"Docs",
|
|
"Macros",
|
|
"bin",
|
|
"data"
|
|
)
|
|
|
|
# name, default template
|
|
DEFAULT_FILES = (
|
|
("LICENSE.txt", None),
|
|
("README.rst", root_at_packages(THIS_PACKAGE, "data/README.rst")),
|
|
(".hgignore", root_at_packages(THIS_PACKAGE, "data/hgignore.txt")),
|
|
(".gitignore", root_at_packages(THIS_PACKAGE, "data/gitignore.txt")),
|
|
("bin/MakeRelease.ps1", root_at_packages(THIS_PACKAGE, "data/MakeRelease.ps1")),
|
|
("bin/CleanUp.ps1", root_at_packages(THIS_PACKAGE, "data/CleanUp.ps1")),
|
|
("data/html_template.txt", root_at_packages(THIS_PACKAGE, "data/html_template.txt")),
|
|
("data/main.css", root_at_packages(THIS_PACKAGE, "data/main.css")),
|
|
("setup.py", root_at_packages(THIS_PACKAGE, "data/setup.py")),
|
|
)
|
|
|
|
|
|
class NewPackageCommand(sublime_plugin.WindowCommand):
|
|
|
|
def on_done(self, pkg_name):
|
|
pam = PackageManager()
|
|
if pam.exists(pkg_name):
|
|
error(" NewPackage -- Error\n\n"
|
|
" Package '" + pkg_name + "' already exists.\n"
|
|
" You cannot overwrite an existing package."
|
|
)
|
|
return
|
|
|
|
pam.create_new(pkg_name)
|
|
|
|
|
|
def on_cancel(self):
|
|
status('on_cancel')
|
|
|
|
def on_changed(self):
|
|
status('on_changed')
|
|
|
|
def run(self):
|
|
self.window.show_input_panel(
|
|
"New Package Name", '', self.on_done, None, None)
|
|
|
|
|
|
class DeletePackageCommand(sublime_plugin.WindowCommand):
|
|
def run(self):
|
|
pam = PackageManager()
|
|
pam.browse()
|
|
|
|
|
|
class PackageManager(object):
|
|
|
|
def is_installed(self, name):
|
|
raise NotImplemented
|
|
|
|
def exists(self, name):
|
|
return path_exists(root_at_packages(name))
|
|
|
|
def browse(self):
|
|
# Let user choose.
|
|
sublime.active_window().run_command("open_dir",
|
|
{"dir": sublime.packages_path()})
|
|
|
|
def create_new(self, name):
|
|
print "[NewPackage] Creating new package...",
|
|
print root_at_packages(name)
|
|
|
|
if self.dry_run:
|
|
msg = "[NewPackage] ** Nothing done. This was a test. **"
|
|
print msg
|
|
status(msg)
|
|
return
|
|
|
|
# Create top folder, default folders, default files.
|
|
map(os.makedirs, [root_at_packages(name, d) for d in DEFAULT_DIRS])
|
|
|
|
for f, template in [(root_at_packages(name, fname), template)
|
|
for fname, template in DEFAULT_FILES]:
|
|
with open(f, 'w') as fh:
|
|
if template:
|
|
try:
|
|
content = "".join(open(template, 'r').readlines()) % \
|
|
{"package_name": name}
|
|
except:
|
|
pass
|
|
finally:
|
|
content = "".join(open(template, 'r').readlines())
|
|
|
|
fh.write(content)
|
|
|
|
msg = "[NewPackage] Created new package '%s'." % name
|
|
print msg
|
|
status(msg)
|
|
|
|
def __init__(self, dry_run=False):
|
|
self.dry_run = dry_run
|
|
|
|
|
|
class PlistToJson(sublime_plugin.TextCommand):
|
|
def is_enabled(self ):
|
|
return self.view.file_name().endswith('.tmLanguage')
|
|
|
|
def run(self, edit):
|
|
plist_data = plistlib.readPlist(self.view.file_name())
|
|
v = self.view.window().new_file()
|
|
v.insert(edit, 0, json.dumps(plist_data, indent=4))
|
|
v.set_syntax_file('Packages/AAAPackageDev/Support/Sublime JSON Syntax Definition.tmLanguage')
|