Repository files navigation

LanguageFormat

中文说明

LanguageFormat is a from-scratch Sublime Text 4 formatter package focused on one practical goal: a single formatter workflow across multiple languages, with first-class support for C++, Python, TypeScript, Go, and Rust.

Formatter Stack

  • clang-format for C / C++ / Objective-C / Objective-C++
  • ruff format for Python
  • oxfmt for TypeScript / JavaScript / JSX / TSX / JSON / YAML / TOML / HTML / Vue / Svelte / CSS / SCSS / Less / Markdown / MDX / GraphQL
  • gofmt for Go
  • rustfmt for Rust

Highlights

  • Single command surface inside Sublime Text
  • Scope-based formatter routing
  • Native project config first: .clang-format, pyproject.toml, Cargo.toml, oxfmt.config.*
  • Built-in config generation wizard for current files and whole workspaces
  • Preset selection with compact, recommended, and wide profiles
  • Smart target detection for monorepos, preview before apply, and explicit existing-file handling
  • Optional Ruff config merge into pyproject.toml
  • Install guidance, diagnostics panel, and format-on-save support
  • Runtime stays dependency-free on the Python side
  • Python runtime compatibility from Sublime Text's Python 3.8 up through 3.14

Install

  1. Copy LanguageFormat/ into your Sublime Text Packages/ directory. Copy the whole package directory, not individual files. If you update the package manually, replace the entire LanguageFormat/ tree and then reload plugins or restart Sublime Text.
  2. Install the formatter binaries you need:
  • C / C++: winget install LLVM.LLVM
  • Python: uv tool install ruff
  • TypeScript / JavaScript: npm install --save-dev oxfmt
  • Go: install Go, which includes gofmt
  • Rust: rustup component add rustfmt

Commands

  • LanguageFormat: Format
  • LanguageFormat: Format Document
  • LanguageFormat: Format Selection
  • LanguageFormat: Diagnose Current File
  • LanguageFormat: Install Guide
  • LanguageFormat: Create Config For Current File
  • LanguageFormat: Create Workspace Configs

Config generation workflow:

  1. Run LanguageFormat: Create Config For Current File to generate config files for the active language, or LanguageFormat: Create Workspace Configs to scan the whole workspace.
  2. Choose a preset: Recommended, Compact, or Wide.
  3. Choose the target directory. The first option is the plugin's smart project root guess for the current file or workspace.
  4. For Python, choose whether Ruff settings should live in ruff.toml or merge into pyproject.toml.
  5. Choose how to handle existing files: skip them, replace them, or write .example files alongside them.
  6. Review the preview panel and confirm before the plugin writes anything.

Default key bindings:

  • Windows / Linux: ctrl+alt+f
  • macOS: super+alt+f

Configuration

Default settings live in LanguageFormat/LanguageFormat.sublime-settings.

Primary keys:

  • format_on_save
  • format_timeout_ms
  • executables
  • extra_args
  • selector_map
  • show_output_panel_on_error

Recommended workflow:

  • Keep editor settings focused on execution (format_on_save, executables, timeouts)
  • Store style in project-native config files such as .clang-format, pyproject.toml, ruff.toml, rustfmt.toml, and .oxfmtrc.jsonc
  • Use the built-in config generator commands when a project does not have formatter configs yet
  • Keep extra_args for execution details, not for large embedded style definitions

Generated config files:

  • The generator walks you through preset selection, target-directory selection, and existing-file handling
  • Current-file generation writes .editorconfig plus the formatter config that matches the active syntax
  • Workspace generation writes .editorconfig and any formatter configs inferred from supported files already present in the workspace
  • Python configs can be written to ruff.toml or merged into pyproject.toml
  • Existing config collisions can be skipped, replaced, or emitted as .example files
  • Every run shows a preview panel before writing files
  • After manually updating the package, use Tools -> Developer -> Reload Plugins or restart Sublime Text if new commands do not appear immediately

Releases

  • CI runs on every push to main
  • Every successful push to main creates a GitHub prerelease
  • Each prerelease publishes:
    • LanguageFormat.sublime-package
    • LanguageFormat.sublime-package.sha256

This keeps stable semantic tags separate from edge builds while still giving you a downloadable artifact for every commit.

Development

ruff check LanguageFormat tests
python -m compileall LanguageFormat tests
python -m pytest

Current Limits

  • clang-format supports multi-selection formatting; ruff format supports a single selection
  • gofmt, rustfmt, and oxfmt currently format the whole buffer only
  • rustfmt is invoked with --emit stdout and tries to infer the edition from the nearest Cargo.toml

About

All-in-one formatter plugin for Sublime Text / 面向 Sublime Text 的多语言一体化格式化插件

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

LanguageFormat

中文说明

LanguageFormat is a from-scratch Sublime Text 4 formatter package focused on one practical goal: a single formatter workflow across multiple languages, with first-class support for C++, Python, TypeScript, Go, and Rust.

Formatter Stack

  • clang-format for C / C++ / Objective-C / Objective-C++
  • ruff format for Python
  • oxfmt for TypeScript / JavaScript / JSX / TSX / JSON / YAML / TOML / HTML / Vue / Svelte / CSS / SCSS / Less / Markdown / MDX / GraphQL
  • gofmt for Go
  • rustfmt for Rust

Highlights

  • Single command surface inside Sublime Text
  • Scope-based formatter routing
  • Native project config first: .clang-format, pyproject.toml, Cargo.toml, oxfmt.config.*
  • Built-in config generation wizard for current files and whole workspaces
  • Preset selection with compact, recommended, and wide profiles
  • Smart target detection for monorepos, preview before apply, and explicit existing-file handling
  • Optional Ruff config merge into pyproject.toml
  • Install guidance, diagnostics panel, and format-on-save support
  • Runtime stays dependency-free on the Python side
  • Python runtime compatibility from Sublime Text's Python 3.8 up through 3.14

Install

  1. Copy LanguageFormat/ into your Sublime Text Packages/ directory. Copy the whole package directory, not individual files. If you update the package manually, replace the entire LanguageFormat/ tree and then reload plugins or restart Sublime Text.
  2. Install the formatter binaries you need:
  • C / C++: winget install LLVM.LLVM
  • Python: uv tool install ruff
  • TypeScript / JavaScript: npm install --save-dev oxfmt
  • Go: install Go, which includes gofmt
  • Rust: rustup component add rustfmt

Commands

  • LanguageFormat: Format
  • LanguageFormat: Format Document
  • LanguageFormat: Format Selection
  • LanguageFormat: Diagnose Current File
  • LanguageFormat: Install Guide
  • LanguageFormat: Create Config For Current File
  • LanguageFormat: Create Workspace Configs

Config generation workflow:

  1. Run LanguageFormat: Create Config For Current File to generate config files for the active language, or LanguageFormat: Create Workspace Configs to scan the whole workspace.
  2. Choose a preset: Recommended, Compact, or Wide.
  3. Choose the target directory. The first option is the plugin's smart project root guess for the current file or workspace.
  4. For Python, choose whether Ruff settings should live in ruff.toml or merge into pyproject.toml.
  5. Choose how to handle existing files: skip them, replace them, or write .example files alongside them.
  6. Review the preview panel and confirm before the plugin writes anything.

Default key bindings:

  • Windows / Linux: ctrl+alt+f
  • macOS: super+alt+f

Configuration

Default settings live in LanguageFormat/LanguageFormat.sublime-settings.

Primary keys:

  • format_on_save
  • format_timeout_ms
  • executables
  • extra_args
  • selector_map
  • show_output_panel_on_error

Recommended workflow:

  • Keep editor settings focused on execution (format_on_save, executables, timeouts)
  • Store style in project-native config files such as .clang-format, pyproject.toml, ruff.toml, rustfmt.toml, and .oxfmtrc.jsonc
  • Use the built-in config generator commands when a project does not have formatter configs yet
  • Keep extra_args for execution details, not for large embedded style definitions

Generated config files:

  • The generator walks you through preset selection, target-directory selection, and existing-file handling
  • Current-file generation writes .editorconfig plus the formatter config that matches the active syntax
  • Workspace generation writes .editorconfig and any formatter configs inferred from supported files already present in the workspace
  • Python configs can be written to ruff.toml or merged into pyproject.toml
  • Existing config collisions can be skipped, replaced, or emitted as .example files
  • Every run shows a preview panel before writing files
  • After manually updating the package, use Tools -> Developer -> Reload Plugins or restart Sublime Text if new commands do not appear immediately

Releases

  • CI runs on every push to main
  • Every successful push to main creates a GitHub prerelease
  • Each prerelease publishes:
    • LanguageFormat.sublime-package
    • LanguageFormat.sublime-package.sha256

This keeps stable semantic tags separate from edge builds while still giving you a downloadable artifact for every commit.

Development

ruff check LanguageFormat tests
python -m compileall LanguageFormat tests
python -m pytest

Current Limits

  • clang-format supports multi-selection formatting; ruff format supports a single selection
  • gofmt, rustfmt, and oxfmt currently format the whole buffer only
  • rustfmt is invoked with --emit stdout and tries to infer the edition from the nearest Cargo.toml

About

All-in-one formatter plugin for Sublime Text / 面向 Sublime Text 的多语言一体化格式化插件

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

LanguageFormat

中文说明

LanguageFormat is a from-scratch Sublime Text 4 formatter package focused on one practical goal: a single formatter workflow across multiple languages, with first-class support for C++, Python, TypeScript, Go, and Rust.

Formatter Stack

  • clang-format for C / C++ / Objective-C / Objective-C++
  • ruff format for Python
  • oxfmt for TypeScript / JavaScript / JSX / TSX / JSON / YAML / TOML / HTML / Vue / Svelte / CSS / SCSS / Less / Markdown / MDX / GraphQL
  • gofmt for Go
  • rustfmt for Rust

Highlights

  • Single command surface inside Sublime Text
  • Scope-based formatter routing
  • Native project config first: .clang-format, pyproject.toml, Cargo.toml, oxfmt.config.*
  • Built-in config generation wizard for current files and whole workspaces
  • Preset selection with compact, recommended, and wide profiles
  • Smart target detection for monorepos, preview before apply, and explicit existing-file handling
  • Optional Ruff config merge into pyproject.toml
  • Install guidance, diagnostics panel, and format-on-save support
  • Runtime stays dependency-free on the Python side
  • Python runtime compatibility from Sublime Text's Python 3.8 up through 3.14

Install

  1. Copy LanguageFormat/ into your Sublime Text Packages/ directory. Copy the whole package directory, not individual files. If you update the package manually, replace the entire LanguageFormat/ tree and then reload plugins or restart Sublime Text.
  2. Install the formatter binaries you need:
  • C / C++: winget install LLVM.LLVM
  • Python: uv tool install ruff
  • TypeScript / JavaScript: npm install --save-dev oxfmt
  • Go: install Go, which includes gofmt
  • Rust: rustup component add rustfmt

Commands

  • LanguageFormat: Format
  • LanguageFormat: Format Document
  • LanguageFormat: Format Selection
  • LanguageFormat: Diagnose Current File
  • LanguageFormat: Install Guide
  • LanguageFormat: Create Config For Current File
  • LanguageFormat: Create Workspace Configs

Config generation workflow:

  1. Run LanguageFormat: Create Config For Current File to generate config files for the active language, or LanguageFormat: Create Workspace Configs to scan the whole workspace.
  2. Choose a preset: Recommended, Compact, or Wide.
  3. Choose the target directory. The first option is the plugin's smart project root guess for the current file or workspace.
  4. For Python, choose whether Ruff settings should live in ruff.toml or merge into pyproject.toml.
  5. Choose how to handle existing files: skip them, replace them, or write .example files alongside them.
  6. Review the preview panel and confirm before the plugin writes anything.

Default key bindings:

  • Windows / Linux: ctrl+alt+f
  • macOS: super+alt+f

Configuration

Default settings live in LanguageFormat/LanguageFormat.sublime-settings.

Primary keys:

  • format_on_save
  • format_timeout_ms
  • executables
  • extra_args
  • selector_map
  • show_output_panel_on_error

Recommended workflow:

  • Keep editor settings focused on execution (format_on_save, executables, timeouts)
  • Store style in project-native config files such as .clang-format, pyproject.toml, ruff.toml, rustfmt.toml, and .oxfmtrc.jsonc
  • Use the built-in config generator commands when a project does not have formatter configs yet
  • Keep extra_args for execution details, not for large embedded style definitions

Generated config files:

  • The generator walks you through preset selection, target-directory selection, and existing-file handling
  • Current-file generation writes .editorconfig plus the formatter config that matches the active syntax
  • Workspace generation writes .editorconfig and any formatter configs inferred from supported files already present in the workspace
  • Python configs can be written to ruff.toml or merged into pyproject.toml
  • Existing config collisions can be skipped, replaced, or emitted as .example files
  • Every run shows a preview panel before writing files
  • After manually updating the package, use Tools -> Developer -> Reload Plugins or restart Sublime Text if new commands do not appear immediately

Releases

  • CI runs on every push to main
  • Every successful push to main creates a GitHub prerelease
  • Each prerelease publishes:
    • LanguageFormat.sublime-package
    • LanguageFormat.sublime-package.sha256

This keeps stable semantic tags separate from edge builds while still giving you a downloadable artifact for every commit.

Development

ruff check LanguageFormat tests
python -m compileall LanguageFormat tests
python -m pytest

Current Limits

  • clang-format supports multi-selection formatting; ruff format supports a single selection
  • gofmt, rustfmt, and oxfmt currently format the whole buffer only
  • rustfmt is invoked with --emit stdout and tries to infer the edition from the nearest Cargo.toml

About

All-in-one formatter plugin for Sublime Text / 面向 Sublime Text 的多语言一体化格式化插件

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

LanguageFormat

中文说明

LanguageFormat is a from-scratch Sublime Text 4 formatter package focused on one practical goal: a single formatter workflow across multiple languages, with first-class support for C++, Python, TypeScript, Go, and Rust.

Formatter Stack

  • clang-format for C / C++ / Objective-C / Objective-C++
  • ruff format for Python
  • oxfmt for TypeScript / JavaScript / JSX / TSX / JSON / YAML / TOML / HTML / Vue / Svelte / CSS / SCSS / Less / Markdown / MDX / GraphQL
  • gofmt for Go
  • rustfmt for Rust

Highlights

  • Single command surface inside Sublime Text
  • Scope-based formatter routing
  • Native project config first: .clang-format, pyproject.toml, Cargo.toml, oxfmt.config.*
  • Built-in config generation wizard for current files and whole workspaces
  • Preset selection with compact, recommended, and wide profiles
  • Smart target detection for monorepos, preview before apply, and explicit existing-file handling
  • Optional Ruff config merge into pyproject.toml
  • Install guidance, diagnostics panel, and format-on-save support
  • Runtime stays dependency-free on the Python side
  • Python runtime compatibility from Sublime Text's Python 3.8 up through 3.14

Install

  1. Copy LanguageFormat/ into your Sublime Text Packages/ directory. Copy the whole package directory, not individual files. If you update the package manually, replace the entire LanguageFormat/ tree and then reload plugins or restart Sublime Text.
  2. Install the formatter binaries you need:
  • C / C++: winget install LLVM.LLVM
  • Python: uv tool install ruff
  • TypeScript / JavaScript: npm install --save-dev oxfmt
  • Go: install Go, which includes gofmt
  • Rust: rustup component add rustfmt

Commands

  • LanguageFormat: Format
  • LanguageFormat: Format Document
  • LanguageFormat: Format Selection
  • LanguageFormat: Diagnose Current File
  • LanguageFormat: Install Guide
  • LanguageFormat: Create Config For Current File
  • LanguageFormat: Create Workspace Configs

Config generation workflow:

  1. Run LanguageFormat: Create Config For Current File to generate config files for the active language, or LanguageFormat: Create Workspace Configs to scan the whole workspace.
  2. Choose a preset: Recommended, Compact, or Wide.
  3. Choose the target directory. The first option is the plugin's smart project root guess for the current file or workspace.
  4. For Python, choose whether Ruff settings should live in ruff.toml or merge into pyproject.toml.
  5. Choose how to handle existing files: skip them, replace them, or write .example files alongside them.
  6. Review the preview panel and confirm before the plugin writes anything.

Default key bindings:

  • Windows / Linux: ctrl+alt+f
  • macOS: super+alt+f

Configuration

Default settings live in LanguageFormat/LanguageFormat.sublime-settings.

Primary keys:

  • format_on_save
  • format_timeout_ms
  • executables
  • extra_args
  • selector_map
  • show_output_panel_on_error

Recommended workflow:

  • Keep editor settings focused on execution (format_on_save, executables, timeouts)
  • Store style in project-native config files such as .clang-format, pyproject.toml, ruff.toml, rustfmt.toml, and .oxfmtrc.jsonc
  • Use the built-in config generator commands when a project does not have formatter configs yet
  • Keep extra_args for execution details, not for large embedded style definitions

Generated config files:

  • The generator walks you through preset selection, target-directory selection, and existing-file handling
  • Current-file generation writes .editorconfig plus the formatter config that matches the active syntax
  • Workspace generation writes .editorconfig and any formatter configs inferred from supported files already present in the workspace
  • Python configs can be written to ruff.toml or merged into pyproject.toml
  • Existing config collisions can be skipped, replaced, or emitted as .example files
  • Every run shows a preview panel before writing files
  • After manually updating the package, use Tools -> Developer -> Reload Plugins or restart Sublime Text if new commands do not appear immediately

Releases

  • CI runs on every push to main
  • Every successful push to main creates a GitHub prerelease
  • Each prerelease publishes:
    • LanguageFormat.sublime-package
    • LanguageFormat.sublime-package.sha256

This keeps stable semantic tags separate from edge builds while still giving you a downloadable artifact for every commit.

Development

ruff check LanguageFormat tests
python -m compileall LanguageFormat tests
python -m pytest

Current Limits

  • clang-format supports multi-selection formatting; ruff format supports a single selection
  • gofmt, rustfmt, and oxfmt currently format the whole buffer only
  • rustfmt is invoked with --emit stdout and tries to infer the edition from the nearest Cargo.toml

About

All-in-one formatter plugin for Sublime Text / 面向 Sublime Text 的多语言一体化格式化插件

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

LanguageFormat

中文说明

LanguageFormat is a from-scratch Sublime Text 4 formatter package focused on one practical goal: a single formatter workflow across multiple languages, with first-class support for C++, Python, TypeScript, Go, and Rust.

Formatter Stack

  • clang-format for C / C++ / Objective-C / Objective-C++
  • ruff format for Python
  • oxfmt for TypeScript / JavaScript / JSX / TSX / JSON / YAML / TOML / HTML / Vue / Svelte / CSS / SCSS / Less / Markdown / MDX / GraphQL
  • gofmt for Go
  • rustfmt for Rust

Highlights

  • Single command surface inside Sublime Text
  • Scope-based formatter routing
  • Native project config first: .clang-format, pyproject.toml, Cargo.toml, oxfmt.config.*
  • Built-in config generation wizard for current files and whole workspaces
  • Preset selection with compact, recommended, and wide profiles
  • Smart target detection for monorepos, preview before apply, and explicit existing-file handling
  • Optional Ruff config merge into pyproject.toml
  • Install guidance, diagnostics panel, and format-on-save support
  • Runtime stays dependency-free on the Python side
  • Python runtime compatibility from Sublime Text's Python 3.8 up through 3.14

Install

  1. Copy LanguageFormat/ into your Sublime Text Packages/ directory. Copy the whole package directory, not individual files. If you update the package manually, replace the entire LanguageFormat/ tree and then reload plugins or restart Sublime Text.
  2. Install the formatter binaries you need:
  • C / C++: winget install LLVM.LLVM
  • Python: uv tool install ruff
  • TypeScript / JavaScript: npm install --save-dev oxfmt
  • Go: install Go, which includes gofmt
  • Rust: rustup component add rustfmt

Commands

  • LanguageFormat: Format
  • LanguageFormat: Format Document
  • LanguageFormat: Format Selection
  • LanguageFormat: Diagnose Current File
  • LanguageFormat: Install Guide
  • LanguageFormat: Create Config For Current File
  • LanguageFormat: Create Workspace Configs

Config generation workflow:

  1. Run LanguageFormat: Create Config For Current File to generate config files for the active language, or LanguageFormat: Create Workspace Configs to scan the whole workspace.
  2. Choose a preset: Recommended, Compact, or Wide.
  3. Choose the target directory. The first option is the plugin's smart project root guess for the current file or workspace.
  4. For Python, choose whether Ruff settings should live in ruff.toml or merge into pyproject.toml.
  5. Choose how to handle existing files: skip them, replace them, or write .example files alongside them.
  6. Review the preview panel and confirm before the plugin writes anything.

Default key bindings:

  • Windows / Linux: ctrl+alt+f
  • macOS: super+alt+f

Configuration

Default settings live in LanguageFormat/LanguageFormat.sublime-settings.

Primary keys:

  • format_on_save
  • format_timeout_ms
  • executables
  • extra_args
  • selector_map
  • show_output_panel_on_error

Recommended workflow:

  • Keep editor settings focused on execution (format_on_save, executables, timeouts)
  • Store style in project-native config files such as .clang-format, pyproject.toml, ruff.toml, rustfmt.toml, and .oxfmtrc.jsonc
  • Use the built-in config generator commands when a project does not have formatter configs yet
  • Keep extra_args for execution details, not for large embedded style definitions

Generated config files:

  • The generator walks you through preset selection, target-directory selection, and existing-file handling
  • Current-file generation writes .editorconfig plus the formatter config that matches the active syntax
  • Workspace generation writes .editorconfig and any formatter configs inferred from supported files already present in the workspace
  • Python configs can be written to ruff.toml or merged into pyproject.toml
  • Existing config collisions can be skipped, replaced, or emitted as .example files
  • Every run shows a preview panel before writing files
  • After manually updating the package, use Tools -> Developer -> Reload Plugins or restart Sublime Text if new commands do not appear immediately

Releases

  • CI runs on every push to main
  • Every successful push to main creates a GitHub prerelease
  • Each prerelease publishes:
    • LanguageFormat.sublime-package
    • LanguageFormat.sublime-package.sha256

This keeps stable semantic tags separate from edge builds while still giving you a downloadable artifact for every commit.

Development

ruff check LanguageFormat tests
python -m compileall LanguageFormat tests
python -m pytest

Current Limits

  • clang-format supports multi-selection formatting; ruff format supports a single selection
  • gofmt, rustfmt, and oxfmt currently format the whole buffer only
  • rustfmt is invoked with --emit stdout and tries to infer the edition from the nearest Cargo.toml

About

All-in-one formatter plugin for Sublime Text / 面向 Sublime Text 的多语言一体化格式化插件

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

LanguageFormat

中文说明

LanguageFormat is a from-scratch Sublime Text 4 formatter package focused on one practical goal: a single formatter workflow across multiple languages, with first-class support for C++, Python, TypeScript, Go, and Rust.

Formatter Stack

  • clang-format for C / C++ / Objective-C / Objective-C++
  • ruff format for Python
  • oxfmt for TypeScript / JavaScript / JSX / TSX / JSON / YAML / TOML / HTML / Vue / Svelte / CSS / SCSS / Less / Markdown / MDX / GraphQL
  • gofmt for Go
  • rustfmt for Rust

Highlights

  • Single command surface inside Sublime Text
  • Scope-based formatter routing
  • Native project config first: .clang-format, pyproject.toml, Cargo.toml, oxfmt.config.*
  • Built-in config generation wizard for current files and whole workspaces
  • Preset selection with compact, recommended, and wide profiles
  • Smart target detection for monorepos, preview before apply, and explicit existing-file handling
  • Optional Ruff config merge into pyproject.toml
  • Install guidance, diagnostics panel, and format-on-save support
  • Runtime stays dependency-free on the Python side
  • Python runtime compatibility from Sublime Text's Python 3.8 up through 3.14

Install

  1. Copy LanguageFormat/ into your Sublime Text Packages/ directory. Copy the whole package directory, not individual files. If you update the package manually, replace the entire LanguageFormat/ tree and then reload plugins or restart Sublime Text.
  2. Install the formatter binaries you need:
  • C / C++: winget install LLVM.LLVM
  • Python: uv tool install ruff
  • TypeScript / JavaScript: npm install --save-dev oxfmt
  • Go: install Go, which includes gofmt
  • Rust: rustup component add rustfmt

Commands

  • LanguageFormat: Format
  • LanguageFormat: Format Document
  • LanguageFormat: Format Selection
  • LanguageFormat: Diagnose Current File
  • LanguageFormat: Install Guide
  • LanguageFormat: Create Config For Current File
  • LanguageFormat: Create Workspace Configs

Config generation workflow:

  1. Run LanguageFormat: Create Config For Current File to generate config files for the active language, or LanguageFormat: Create Workspace Configs to scan the whole workspace.
  2. Choose a preset: Recommended, Compact, or Wide.
  3. Choose the target directory. The first option is the plugin's smart project root guess for the current file or workspace.
  4. For Python, choose whether Ruff settings should live in ruff.toml or merge into pyproject.toml.
  5. Choose how to handle existing files: skip them, replace them, or write .example files alongside them.
  6. Review the preview panel and confirm before the plugin writes anything.

Default key bindings:

  • Windows / Linux: ctrl+alt+f
  • macOS: super+alt+f

Configuration

Default settings live in LanguageFormat/LanguageFormat.sublime-settings.

Primary keys:

  • format_on_save
  • format_timeout_ms
  • executables
  • extra_args
  • selector_map
  • show_output_panel_on_error

Recommended workflow:

  • Keep editor settings focused on execution (format_on_save, executables, timeouts)
  • Store style in project-native config files such as .clang-format, pyproject.toml, ruff.toml, rustfmt.toml, and .oxfmtrc.jsonc
  • Use the built-in config generator commands when a project does not have formatter configs yet
  • Keep extra_args for execution details, not for large embedded style definitions

Generated config files:

  • The generator walks you through preset selection, target-directory selection, and existing-file handling
  • Current-file generation writes .editorconfig plus the formatter config that matches the active syntax
  • Workspace generation writes .editorconfig and any formatter configs inferred from supported files already present in the workspace
  • Python configs can be written to ruff.toml or merged into pyproject.toml
  • Existing config collisions can be skipped, replaced, or emitted as .example files
  • Every run shows a preview panel before writing files
  • After manually updating the package, use Tools -> Developer -> Reload Plugins or restart Sublime Text if new commands do not appear immediately

Releases

  • CI runs on every push to main
  • Every successful push to main creates a GitHub prerelease
  • Each prerelease publishes:
    • LanguageFormat.sublime-package
    • LanguageFormat.sublime-package.sha256

This keeps stable semantic tags separate from edge builds while still giving you a downloadable artifact for every commit.

Development

ruff check LanguageFormat tests
python -m compileall LanguageFormat tests
python -m pytest

Current Limits

  • clang-format supports multi-selection formatting; ruff format supports a single selection
  • gofmt, rustfmt, and oxfmt currently format the whole buffer only
  • rustfmt is invoked with --emit stdout and tries to infer the edition from the nearest Cargo.toml

About

All-in-one formatter plugin for Sublime Text / 面向 Sublime Text 的多语言一体化格式化插件

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

LanguageFormat

中文说明

LanguageFormat is a from-scratch Sublime Text 4 formatter package focused on one practical goal: a single formatter workflow across multiple languages, with first-class support for C++, Python, TypeScript, Go, and Rust.

Formatter Stack

  • clang-format for C / C++ / Objective-C / Objective-C++
  • ruff format for Python
  • oxfmt for TypeScript / JavaScript / JSX / TSX / JSON / YAML / TOML / HTML / Vue / Svelte / CSS / SCSS / Less / Markdown / MDX / GraphQL
  • gofmt for Go
  • rustfmt for Rust

Highlights

  • Single command surface inside Sublime Text
  • Scope-based formatter routing
  • Native project config first: .clang-format, pyproject.toml, Cargo.toml, oxfmt.config.*
  • Built-in config generation wizard for current files and whole workspaces
  • Preset selection with compact, recommended, and wide profiles
  • Smart target detection for monorepos, preview before apply, and explicit existing-file handling
  • Optional Ruff config merge into pyproject.toml
  • Install guidance, diagnostics panel, and format-on-save support
  • Runtime stays dependency-free on the Python side
  • Python runtime compatibility from Sublime Text's Python 3.8 up through 3.14

Install

  1. Copy LanguageFormat/ into your Sublime Text Packages/ directory. Copy the whole package directory, not individual files. If you update the package manually, replace the entire LanguageFormat/ tree and then reload plugins or restart Sublime Text.
  2. Install the formatter binaries you need:
  • C / C++: winget install LLVM.LLVM
  • Python: uv tool install ruff
  • TypeScript / JavaScript: npm install --save-dev oxfmt
  • Go: install Go, which includes gofmt
  • Rust: rustup component add rustfmt

Commands

  • LanguageFormat: Format
  • LanguageFormat: Format Document
  • LanguageFormat: Format Selection
  • LanguageFormat: Diagnose Current File
  • LanguageFormat: Install Guide
  • LanguageFormat: Create Config For Current File
  • LanguageFormat: Create Workspace Configs

Config generation workflow:

  1. Run LanguageFormat: Create Config For Current File to generate config files for the active language, or LanguageFormat: Create Workspace Configs to scan the whole workspace.
  2. Choose a preset: Recommended, Compact, or Wide.
  3. Choose the target directory. The first option is the plugin's smart project root guess for the current file or workspace.
  4. For Python, choose whether Ruff settings should live in ruff.toml or merge into pyproject.toml.
  5. Choose how to handle existing files: skip them, replace them, or write .example files alongside them.
  6. Review the preview panel and confirm before the plugin writes anything.

Default key bindings:

  • Windows / Linux: ctrl+alt+f
  • macOS: super+alt+f

Configuration

Default settings live in LanguageFormat/LanguageFormat.sublime-settings.

Primary keys:

  • format_on_save
  • format_timeout_ms
  • executables
  • extra_args
  • selector_map
  • show_output_panel_on_error

Recommended workflow:

  • Keep editor settings focused on execution (format_on_save, executables, timeouts)
  • Store style in project-native config files such as .clang-format, pyproject.toml, ruff.toml, rustfmt.toml, and .oxfmtrc.jsonc
  • Use the built-in config generator commands when a project does not have formatter configs yet
  • Keep extra_args for execution details, not for large embedded style definitions

Generated config files:

  • The generator walks you through preset selection, target-directory selection, and existing-file handling
  • Current-file generation writes .editorconfig plus the formatter config that matches the active syntax
  • Workspace generation writes .editorconfig and any formatter configs inferred from supported files already present in the workspace
  • Python configs can be written to ruff.toml or merged into pyproject.toml
  • Existing config collisions can be skipped, replaced, or emitted as .example files
  • Every run shows a preview panel before writing files
  • After manually updating the package, use Tools -> Developer -> Reload Plugins or restart Sublime Text if new commands do not appear immediately

Releases

  • CI runs on every push to main
  • Every successful push to main creates a GitHub prerelease
  • Each prerelease publishes:
    • LanguageFormat.sublime-package
    • LanguageFormat.sublime-package.sha256

This keeps stable semantic tags separate from edge builds while still giving you a downloadable artifact for every commit.

Development

ruff check LanguageFormat tests
python -m compileall LanguageFormat tests
python -m pytest

Current Limits

  • clang-format supports multi-selection formatting; ruff format supports a single selection
  • gofmt, rustfmt, and oxfmt currently format the whole buffer only
  • rustfmt is invoked with --emit stdout and tries to infer the edition from the nearest Cargo.toml

About

All-in-one formatter plugin for Sublime Text / 面向 Sublime Text 的多语言一体化格式化插件

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

LanguageFormat

中文说明

LanguageFormat is a from-scratch Sublime Text 4 formatter package focused on one practical goal: a single formatter workflow across multiple languages, with first-class support for C++, Python, TypeScript, Go, and Rust.

Formatter Stack

  • clang-format for C / C++ / Objective-C / Objective-C++
  • ruff format for Python
  • oxfmt for TypeScript / JavaScript / JSX / TSX / JSON / YAML / TOML / HTML / Vue / Svelte / CSS / SCSS / Less / Markdown / MDX / GraphQL
  • gofmt for Go
  • rustfmt for Rust

Highlights

  • Single command surface inside Sublime Text
  • Scope-based formatter routing
  • Native project config first: .clang-format, pyproject.toml, Cargo.toml, oxfmt.config.*
  • Built-in config generation wizard for current files and whole workspaces
  • Preset selection with compact, recommended, and wide profiles
  • Smart target detection for monorepos, preview before apply, and explicit existing-file handling
  • Optional Ruff config merge into pyproject.toml
  • Install guidance, diagnostics panel, and format-on-save support
  • Runtime stays dependency-free on the Python side
  • Python runtime compatibility from Sublime Text's Python 3.8 up through 3.14

Install

  1. Copy LanguageFormat/ into your Sublime Text Packages/ directory. Copy the whole package directory, not individual files. If you update the package manually, replace the entire LanguageFormat/ tree and then reload plugins or restart Sublime Text.
  2. Install the formatter binaries you need:
  • C / C++: winget install LLVM.LLVM
  • Python: uv tool install ruff
  • TypeScript / JavaScript: npm install --save-dev oxfmt
  • Go: install Go, which includes gofmt
  • Rust: rustup component add rustfmt

Commands

  • LanguageFormat: Format
  • LanguageFormat: Format Document
  • LanguageFormat: Format Selection
  • LanguageFormat: Diagnose Current File
  • LanguageFormat: Install Guide
  • LanguageFormat: Create Config For Current File
  • LanguageFormat: Create Workspace Configs

Config generation workflow:

  1. Run LanguageFormat: Create Config For Current File to generate config files for the active language, or LanguageFormat: Create Workspace Configs to scan the whole workspace.
  2. Choose a preset: Recommended, Compact, or Wide.
  3. Choose the target directory. The first option is the plugin's smart project root guess for the current file or workspace.
  4. For Python, choose whether Ruff settings should live in ruff.toml or merge into pyproject.toml.
  5. Choose how to handle existing files: skip them, replace them, or write .example files alongside them.
  6. Review the preview panel and confirm before the plugin writes anything.

Default key bindings:

  • Windows / Linux: ctrl+alt+f
  • macOS: super+alt+f

Configuration

Default settings live in LanguageFormat/LanguageFormat.sublime-settings.

Primary keys:

  • format_on_save
  • format_timeout_ms
  • executables
  • extra_args
  • selector_map
  • show_output_panel_on_error

Recommended workflow:

  • Keep editor settings focused on execution (format_on_save, executables, timeouts)
  • Store style in project-native config files such as .clang-format, pyproject.toml, ruff.toml, rustfmt.toml, and .oxfmtrc.jsonc
  • Use the built-in config generator commands when a project does not have formatter configs yet
  • Keep extra_args for execution details, not for large embedded style definitions

Generated config files:

  • The generator walks you through preset selection, target-directory selection, and existing-file handling
  • Current-file generation writes .editorconfig plus the formatter config that matches the active syntax
  • Workspace generation writes .editorconfig and any formatter configs inferred from supported files already present in the workspace
  • Python configs can be written to ruff.toml or merged into pyproject.toml
  • Existing config collisions can be skipped, replaced, or emitted as .example files
  • Every run shows a preview panel before writing files
  • After manually updating the package, use Tools -> Developer -> Reload Plugins or restart Sublime Text if new commands do not appear immediately

Releases

  • CI runs on every push to main
  • Every successful push to main creates a GitHub prerelease
  • Each prerelease publishes:
    • LanguageFormat.sublime-package
    • LanguageFormat.sublime-package.sha256

This keeps stable semantic tags separate from edge builds while still giving you a downloadable artifact for every commit.

Development

ruff check LanguageFormat tests
python -m compileall LanguageFormat tests
python -m pytest

Current Limits

  • clang-format supports multi-selection formatting; ruff format supports a single selection
  • gofmt, rustfmt, and oxfmt currently format the whole buffer only
  • rustfmt is invoked with --emit stdout and tries to infer the edition from the nearest Cargo.toml

About

All-in-one formatter plugin for Sublime Text / 面向 Sublime Text 的多语言一体化格式化插件

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages