Files
Sublime-Text/Packages/Pretty YAML Node/PrettyYamlNode.py
2025-03-08 19:29:14 +01:00

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")