59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
import sublime
|
|
import sublime_plugin
|
|
import decimal
|
|
import sys
|
|
import tempfile
|
|
import subprocess
|
|
import os
|
|
import shutil
|
|
import json
|
|
|
|
STATUS_ID = 'pretty_yaml_node'
|
|
s = sublime.load_settings("Pretty YAML Node.sublime-settings")
|
|
|
|
class PrettyyamlnodeCommand(sublime_plugin.TextCommand):
|
|
|
|
def run(self, edit):
|
|
""" Pretty print YAML """
|
|
for region in self.view.sel():
|
|
|
|
selected_entire_file = False
|
|
|
|
# If no selection, use the entire file as the selection
|
|
if region.empty() and s.get("use_entire_file_if_no_selection", True):
|
|
selection = sublime.Region(0, self.view.size())
|
|
selected_entire_file = True
|
|
else:
|
|
selection = region
|
|
|
|
temp_path = tempfile.mkdtemp("prettyyaml")
|
|
with open(temp_path + "/in.yml" ,"w") as file:
|
|
file.write(self.view.substr(selection))
|
|
|
|
with open(temp_path + "/config.json", 'w') as file:
|
|
json.dump(s.get('dumper_args'), file)
|
|
|
|
output = subprocess.check_output([s.get("node_path"), os.path.dirname(os.path.abspath(__file__)) + "/pretty_json.js", temp_path])
|
|
self.set_short_status(self.view, output.decode("utf-8").replace("\n", ""))
|
|
with open(temp_path + "/out.yml" ,"r") as file:
|
|
self.view.replace(edit, selection, file.read())
|
|
|
|
shutil.rmtree(temp_path)
|
|
|
|
if selected_entire_file:
|
|
self.change_syntax()
|
|
|
|
def change_syntax(self):
|
|
if "Plain text" in self.view.settings().get('syntax'):
|
|
self.view.set_syntax_file("Packages/YAML/YAML.tmLanguage")
|
|
|
|
def set_short_status(self, active_view, text):
|
|
def erase_status():
|
|
active_view.erase_status(STATUS_ID)
|
|
active_view.set_status(STATUS_ID, text)
|
|
sublime.set_timeout_async(erase_status, 2000)
|
|
|
|
def plugin_loaded():
|
|
global s
|
|
s = sublime.load_settings("Pretty YAML Node.sublime-settings")
|