mirror of https://github.com/helix-editor/helix
Merge branch 'helix-editor:master' into master
commit
34c45994f4
|
@ -1864,9 +1864,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "indexmap"
|
name = "indexmap"
|
||||||
version = "2.9.0"
|
version = "2.10.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
|
checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"equivalent",
|
"equivalent",
|
||||||
"hashbrown 0.15.4",
|
"hashbrown 0.15.4",
|
||||||
|
|
|
@ -49,6 +49,8 @@ The following variables are supported:
|
||||||
| `line_ending` | A string containing the line ending of the currently focused document. For example on Unix systems this is usually a line-feed character (`\n`) but on Windows systems this may be a carriage-return plus a line-feed (`\r\n`). The line ending kind of the currently focused document can be inspected with the `:line-ending` command. |
|
| `line_ending` | A string containing the line ending of the currently focused document. For example on Unix systems this is usually a line-feed character (`\n`) but on Windows systems this may be a carriage-return plus a line-feed (`\r\n`). The line ending kind of the currently focused document can be inspected with the `:line-ending` command. |
|
||||||
| `language` | A string containing the language name of the currently focused document.|
|
| `language` | A string containing the language name of the currently focused document.|
|
||||||
| `selection` | A string containing the contents of the primary selection of the currently focused document. |
|
| `selection` | A string containing the contents of the primary selection of the currently focused document. |
|
||||||
|
| `selection_line_start` | The line number of the start of the primary selection in the currently focused document, starting at 1. |
|
||||||
|
| `selection_line_end` | The line number of the end of the primary selection in the currently focused document, starting at 1. |
|
||||||
|
|
||||||
Aside from editor variables, the following expansions may be used:
|
Aside from editor variables, the following expansions may be used:
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
| c | ✓ | ✓ | ✓ | `clangd` |
|
| c | ✓ | ✓ | ✓ | `clangd` |
|
||||||
| c-sharp | ✓ | ✓ | | `OmniSharp` |
|
| c-sharp | ✓ | ✓ | | `OmniSharp` |
|
||||||
| cabal | | | | `haskell-language-server-wrapper` |
|
| cabal | | | | `haskell-language-server-wrapper` |
|
||||||
|
| caddyfile | ✓ | ✓ | ✓ | |
|
||||||
| cairo | ✓ | ✓ | ✓ | `cairo-language-server` |
|
| cairo | ✓ | ✓ | ✓ | `cairo-language-server` |
|
||||||
| capnp | ✓ | | ✓ | |
|
| capnp | ✓ | | ✓ | |
|
||||||
| cel | ✓ | | | |
|
| cel | ✓ | | | |
|
||||||
|
|
|
@ -81,7 +81,7 @@
|
||||||
| `:log-open` | Open the helix log file. |
|
| `:log-open` | Open the helix log file. |
|
||||||
| `:insert-output` | Run shell command, inserting output before each selection. |
|
| `:insert-output` | Run shell command, inserting output before each selection. |
|
||||||
| `:append-output` | Run shell command, appending output after each selection. |
|
| `:append-output` | Run shell command, appending output after each selection. |
|
||||||
| `:pipe`, `:|` | Pipe each selection to the shell command. |
|
| `:pipe`, `:\|` | Pipe each selection to the shell command. |
|
||||||
| `:pipe-to` | Pipe each selection to the shell command, ignoring output. |
|
| `:pipe-to` | Pipe each selection to the shell command, ignoring output. |
|
||||||
| `:run-shell-command`, `:sh`, `:!` | Run a shell command |
|
| `:run-shell-command`, `:sh`, `:!` | Run a shell command |
|
||||||
| `:reset-diff-change`, `:diffget`, `:diffg` | Reset the diff change at the cursor position. |
|
| `:reset-diff-change`, `:diffget`, `:diffg` | Reset the diff change at the cursor position. |
|
||||||
|
|
|
@ -61,7 +61,7 @@ tokio-stream = "0.1"
|
||||||
futures-util = { version = "0.3", features = ["std", "async-await"], default-features = false }
|
futures-util = { version = "0.3", features = ["std", "async-await"], default-features = false }
|
||||||
arc-swap = { version = "1.7.1" }
|
arc-swap = { version = "1.7.1" }
|
||||||
termini = "1"
|
termini = "1"
|
||||||
indexmap = "2.9"
|
indexmap = "2.10"
|
||||||
|
|
||||||
# Logging
|
# Logging
|
||||||
fern = "0.7"
|
fern = "0.7"
|
||||||
|
|
|
@ -401,6 +401,8 @@ impl Application {
|
||||||
// Re-parse any open documents with the new language config.
|
// Re-parse any open documents with the new language config.
|
||||||
let lang_loader = self.editor.syn_loader.load();
|
let lang_loader = self.editor.syn_loader.load();
|
||||||
for document in self.editor.documents.values_mut() {
|
for document in self.editor.documents.values_mut() {
|
||||||
|
// Re-detect .editorconfig
|
||||||
|
document.detect_editor_config();
|
||||||
document.detect_language(&lang_loader);
|
document.detect_language(&lang_loader);
|
||||||
let diagnostics = Editor::doc_diagnostics(
|
let diagnostics = Editor::doc_diagnostics(
|
||||||
&self.editor.language_servers,
|
&self.editor.language_servers,
|
||||||
|
|
|
@ -6738,6 +6738,10 @@ fn jump_to_word(cx: &mut Context, behaviour: Movement) {
|
||||||
// Calculate the jump candidates: ranges for any visible words with two or
|
// Calculate the jump candidates: ranges for any visible words with two or
|
||||||
// more characters.
|
// more characters.
|
||||||
let alphabet = &cx.editor.config().jump_label_alphabet;
|
let alphabet = &cx.editor.config().jump_label_alphabet;
|
||||||
|
if alphabet.is_empty() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let jump_label_limit = alphabet.len() * alphabet.len();
|
let jump_label_limit = alphabet.len() * alphabet.len();
|
||||||
let mut words = Vec::with_capacity(jump_label_limit);
|
let mut words = Vec::with_capacity(jump_label_limit);
|
||||||
let (view, doc) = current_ref!(cx.editor);
|
let (view, doc) = current_ref!(cx.editor);
|
||||||
|
|
|
@ -807,7 +807,9 @@ pub fn code_action(cx: &mut Context) {
|
||||||
});
|
});
|
||||||
picker.move_down(); // pre-select the first item
|
picker.move_down(); // pre-select the first item
|
||||||
|
|
||||||
let popup = Popup::new("code-action", picker).with_scrollbar(false);
|
let popup = Popup::new("code-action", picker)
|
||||||
|
.with_scrollbar(false)
|
||||||
|
.auto_close(true);
|
||||||
|
|
||||||
compositor.replace_or_push("code-action", popup);
|
compositor.replace_or_push("code-action", popup);
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
//! These types form a hierarchy: [`Spans`] is a collection of [`Span`] and each line of [`Text`]
|
//! These types form a hierarchy: [`Spans`] is a collection of [`Span`] and each line of [`Text`]
|
||||||
//! is a [`Spans`].
|
//! is a [`Spans`].
|
||||||
//!
|
//!
|
||||||
//! Keep it mind that a lot of widgets will use those types to advertise what kind of string is
|
//! Keep in mind that a lot of widgets will use those types to advertise what kind of string is
|
||||||
//! supported for their properties. Moreover, `tui` provides convenient `From` implementations so
|
//! supported for their properties. Moreover, `tui` provides convenient `From` implementations so
|
||||||
//! that you can start by using simple `String` or `&str` and then promote them to the previous
|
//! that you can start by using simple `String` or `&str` and then promote them to the previous
|
||||||
//! primitives when you need additional styling capabilities.
|
//! primitives when you need additional styling capabilities.
|
||||||
|
|
|
@ -1172,7 +1172,7 @@ impl Document {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn detect_editor_config(&mut self) {
|
pub fn detect_editor_config(&mut self) {
|
||||||
if self.config.load().editor_config {
|
if self.config.load().editor_config {
|
||||||
if let Some(path) = self.path.as_ref() {
|
if let Some(path) = self.path.as_ref() {
|
||||||
self.editor_config = EditorConfig::find(path);
|
self.editor_config = EditorConfig::find(path);
|
||||||
|
|
|
@ -37,6 +37,10 @@ pub enum Variable {
|
||||||
Language,
|
Language,
|
||||||
// Primary selection
|
// Primary selection
|
||||||
Selection,
|
Selection,
|
||||||
|
// The one-indexed line number of the start of the primary selection in the currently focused document.
|
||||||
|
SelectionLineStart,
|
||||||
|
// The one-indexed line number of the end of the primary selection in the currently focused document.
|
||||||
|
SelectionLineEnd,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Variable {
|
impl Variable {
|
||||||
|
@ -47,6 +51,8 @@ impl Variable {
|
||||||
Self::LineEnding,
|
Self::LineEnding,
|
||||||
Self::Language,
|
Self::Language,
|
||||||
Self::Selection,
|
Self::Selection,
|
||||||
|
Self::SelectionLineStart,
|
||||||
|
Self::SelectionLineEnd,
|
||||||
];
|
];
|
||||||
|
|
||||||
pub const fn as_str(&self) -> &'static str {
|
pub const fn as_str(&self) -> &'static str {
|
||||||
|
@ -57,6 +63,8 @@ impl Variable {
|
||||||
Self::LineEnding => "line_ending",
|
Self::LineEnding => "line_ending",
|
||||||
Self::Language => "language",
|
Self::Language => "language",
|
||||||
Self::Selection => "selection",
|
Self::Selection => "selection",
|
||||||
|
Self::SelectionLineStart => "selection_line_start",
|
||||||
|
Self::SelectionLineEnd => "selection_line_end",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,6 +76,8 @@ impl Variable {
|
||||||
"line_ending" => Some(Self::LineEnding),
|
"line_ending" => Some(Self::LineEnding),
|
||||||
"language" => Some(Self::Language),
|
"language" => Some(Self::Language),
|
||||||
"selection" => Some(Self::Selection),
|
"selection" => Some(Self::Selection),
|
||||||
|
"selection_line_start" => Some(Self::SelectionLineStart),
|
||||||
|
"selection_line_end" => Some(Self::SelectionLineEnd),
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -232,5 +242,13 @@ fn expand_variable(editor: &Editor, variable: Variable) -> Result<Cow<'static, s
|
||||||
Variable::Selection => Ok(Cow::Owned(
|
Variable::Selection => Ok(Cow::Owned(
|
||||||
doc.selection(view.id).primary().fragment(text).to_string(),
|
doc.selection(view.id).primary().fragment(text).to_string(),
|
||||||
)),
|
)),
|
||||||
|
Variable::SelectionLineStart => {
|
||||||
|
let start_line = doc.selection(view.id).primary().line_range(text).0;
|
||||||
|
Ok(Cow::Owned((start_line + 1).to_string()))
|
||||||
|
}
|
||||||
|
Variable::SelectionLineEnd => {
|
||||||
|
let end_line = doc.selection(view.id).primary().line_range(text).1;
|
||||||
|
Ok(Cow::Owned((end_line + 1).to_string()))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1424,6 +1424,7 @@ file-types = [
|
||||||
{ glob = ".clangd" },
|
{ glob = ".clangd" },
|
||||||
{ glob = ".clang-format" },
|
{ glob = ".clang-format" },
|
||||||
{ glob = ".clang-tidy" },
|
{ glob = ".clang-tidy" },
|
||||||
|
{ glob = ".gem/credentials" },
|
||||||
"sublime-syntax"
|
"sublime-syntax"
|
||||||
]
|
]
|
||||||
comment-token = "#"
|
comment-token = "#"
|
||||||
|
@ -1858,13 +1859,14 @@ name = "git-commit"
|
||||||
scope = "git.commitmsg"
|
scope = "git.commitmsg"
|
||||||
file-types = [{ glob = "COMMIT_EDITMSG" }, { glob = "MERGE_MSG" }]
|
file-types = [{ glob = "COMMIT_EDITMSG" }, { glob = "MERGE_MSG" }]
|
||||||
comment-token = "#"
|
comment-token = "#"
|
||||||
indent = { tab-width = 2, unit = " " }
|
indent = { tab-width = 4, unit = " " }
|
||||||
rulers = [51, 73]
|
rulers = [51, 73]
|
||||||
text-width = 72
|
text-width = 72
|
||||||
|
grammar = "gitcommit"
|
||||||
|
|
||||||
[[grammar]]
|
[[grammar]]
|
||||||
name = "git-commit"
|
name = "gitcommit"
|
||||||
source = { git = "https://github.com/the-mikedavis/tree-sitter-git-commit", rev = "6f193a66e9aa872760823dff020960c6cedc37b3" }
|
source = { git = "https://github.com/gbprod/tree-sitter-gitcommit", rev = "a716678c0f00645fed1e6f1d0eb221481dbd6f6d" }
|
||||||
|
|
||||||
[[language]]
|
[[language]]
|
||||||
name = "diff"
|
name = "diff"
|
||||||
|
@ -2961,6 +2963,7 @@ file-types = [
|
||||||
"service",
|
"service",
|
||||||
"automount",
|
"automount",
|
||||||
"desktop",
|
"desktop",
|
||||||
|
{ glob = "mimeapps.list" },
|
||||||
"device",
|
"device",
|
||||||
"mount",
|
"mount",
|
||||||
"nspawn",
|
"nspawn",
|
||||||
|
@ -4433,3 +4436,17 @@ language-servers = [ "luau" ]
|
||||||
[[grammar]]
|
[[grammar]]
|
||||||
name = "luau"
|
name = "luau"
|
||||||
source = { git = "https://github.com/polychromatist/tree-sitter-luau", rev = "ec187cafba510cddac265329ca7831ec6f3b9955" }
|
source = { git = "https://github.com/polychromatist/tree-sitter-luau", rev = "ec187cafba510cddac265329ca7831ec6f3b9955" }
|
||||||
|
|
||||||
|
[[language]]
|
||||||
|
name = "caddyfile"
|
||||||
|
scope = "source.caddyfile"
|
||||||
|
injection-regex = "caddyfile"
|
||||||
|
file-types = [{ glob = "Caddyfile" }]
|
||||||
|
comment-tokens = ["#"]
|
||||||
|
indent = { tab-width = 4, unit = " " }
|
||||||
|
formatter = { command = "caddy", args = ["fmt", "-"] }
|
||||||
|
auto-format = true
|
||||||
|
|
||||||
|
[[grammar]]
|
||||||
|
name = "caddyfile"
|
||||||
|
source = { git = "https://github.com/caddyserver/tree-sitter-caddyfile", rev = "b04bdb4ec53e40c44afbf001e15540f60a296aef" }
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
(comment) @comment
|
||||||
|
[
|
||||||
|
(environment_variable)
|
||||||
|
(placeholder)
|
||||||
|
] @constant
|
||||||
|
|
||||||
|
[
|
||||||
|
(network_address)
|
||||||
|
(ip_address_or_cidr)
|
||||||
|
] @string.special.url
|
||||||
|
|
||||||
|
(path) @string.special.path
|
||||||
|
|
||||||
|
[
|
||||||
|
(snippet_name)
|
||||||
|
(named_route_identifier)
|
||||||
|
(site_address)
|
||||||
|
] @keyword
|
||||||
|
|
||||||
|
(directive (directive_name) @variable.other.member)
|
||||||
|
|
||||||
|
; declaration of a named matcher
|
||||||
|
(named_matcher (matcher_identifier (matcher_name)) @function.macro)
|
||||||
|
|
||||||
|
; reference to a named matcher
|
||||||
|
(matcher (matcher_identifier (matcher_name)) @function.macro)
|
||||||
|
|
||||||
|
; directive within a named matcher declaration
|
||||||
|
(matcher_directive (matcher_directive_name) @function.method)
|
||||||
|
|
||||||
|
; any other matcher (wildcard and path)
|
||||||
|
(matcher) @function.macro
|
||||||
|
|
||||||
|
[
|
||||||
|
(interpreted_string_literal)
|
||||||
|
(raw_string_literal)
|
||||||
|
(heredoc)
|
||||||
|
(cel_expression)
|
||||||
|
] @string
|
||||||
|
(escape_sequence) @constant.character.escape
|
||||||
|
|
||||||
|
[
|
||||||
|
(duration_literal)
|
||||||
|
(int_literal)
|
||||||
|
] @constant.numeric
|
||||||
|
|
||||||
|
[
|
||||||
|
"{"
|
||||||
|
"}"
|
||||||
|
] @punctuation.bracket
|
||||||
|
|
||||||
|
(global_options
|
||||||
|
(directive) @keyword.directive)
|
||||||
|
|
||||||
|
(directive
|
||||||
|
name: (directive_name)
|
||||||
|
(argument) @type)
|
||||||
|
|
||||||
|
; matches directive arguments that looks like an absolute path
|
||||||
|
; e.g.
|
||||||
|
; log {
|
||||||
|
; output file /var/log/caddy.log
|
||||||
|
; }
|
||||||
|
(directive
|
||||||
|
(argument) @string.special.path
|
||||||
|
(#match? @string.special.path "^/"))
|
||||||
|
|
||||||
|
((argument) @constant.builtin.boolean
|
||||||
|
(#any-of? @constant.builtin.boolean "on" "off"))
|
||||||
|
|
||||||
|
((argument) @type.enum.variant
|
||||||
|
(#any-of? @type.enum.variant "tcp" "udp" "ipv4" "ipv6"))
|
|
@ -0,0 +1,8 @@
|
||||||
|
[
|
||||||
|
(block)
|
||||||
|
(matcher_block)
|
||||||
|
] @indent
|
||||||
|
|
||||||
|
((global_options) @indent)
|
||||||
|
|
||||||
|
"}" @outdent
|
|
@ -0,0 +1,2 @@
|
||||||
|
((comment) @injection.content
|
||||||
|
(#set! injection.language "comment"))
|
|
@ -0,0 +1,5 @@
|
||||||
|
(block) @local.scope
|
||||||
|
|
||||||
|
(named_matcher (matcher_identifier (matcher_name)) @local.definition.function.macro)
|
||||||
|
|
||||||
|
(matcher) @local.reference
|
|
@ -0,0 +1,16 @@
|
||||||
|
(comment) @comment.inside
|
||||||
|
(comment)+ @comment.around
|
||||||
|
|
||||||
|
(directive
|
||||||
|
name: (directive_name) @parameter.inside) @parameter.around
|
||||||
|
|
||||||
|
(global_options
|
||||||
|
"{" (_)* @class.inside "}") @class.around
|
||||||
|
|
||||||
|
(snippet_definition
|
||||||
|
(block) @class.inside) @class.around
|
||||||
|
|
||||||
|
(named_route
|
||||||
|
(block) @class.inside) @class.around
|
||||||
|
|
||||||
|
(site_definition (block) @class.inside) @class.around
|
|
@ -1,6 +1,16 @@
|
||||||
((comment) @injection.content
|
((comment) @injection.content
|
||||||
(#set! injection.language "comment"))
|
(#set! injection.language "comment"))
|
||||||
|
|
||||||
([(shell_command) (shell_fragment)] @injection.content
|
((shell_command (shell_fragment) @injection.content)
|
||||||
(#set! injection.language "bash"))
|
(#set! injection.language "bash")
|
||||||
|
(#set! injection.combined))
|
||||||
|
|
||||||
|
((run_instruction
|
||||||
|
(heredoc_block (heredoc_line) @injection.content . "\n" @injection.content))
|
||||||
|
(#set! injection.language "bash")
|
||||||
|
(#set! injection.combined))
|
||||||
|
|
||||||
|
((copy_instruction
|
||||||
|
(path (heredoc_marker)) . (path) @injection.filename
|
||||||
|
(heredoc_block (heredoc_line) @injection.content . "\n" @injection.content))
|
||||||
|
(#set! injection.combined))
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
; Most primitive nodes
|
; Most primitive nodes
|
||||||
(shebang) @keyword.directive
|
(shebang) @keyword.directive
|
||||||
|
|
||||||
|
[
|
||||||
|
(symbol)
|
||||||
|
(symbol_binding)
|
||||||
|
] @variable
|
||||||
|
|
||||||
(comment) @comment
|
(comment) @comment
|
||||||
|
|
||||||
(fn_form
|
(fn_form
|
||||||
|
@ -186,8 +191,3 @@
|
||||||
(string)
|
(string)
|
||||||
(string_binding)
|
(string_binding)
|
||||||
] @string
|
] @string
|
||||||
|
|
||||||
[
|
|
||||||
(symbol)
|
|
||||||
(symbol_binding)
|
|
||||||
] @variable
|
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
|
[(comment) (generated_comment) (scissor)] @comment
|
||||||
(subject) @markup.heading
|
(subject) @markup.heading
|
||||||
(path) @string.special.path
|
|
||||||
(branch) @string.special.symbol
|
(branch) @string.special.symbol
|
||||||
(commit) @constant
|
(filepath) @string.special.path
|
||||||
(item) @markup.link.url
|
(arrow) @punctuation.delimiter
|
||||||
(header) @tag
|
(subject (subject_prefix) @function)
|
||||||
|
(prefix (type) @keyword)
|
||||||
|
(prefix (scope) @variable.parameter)
|
||||||
|
(prefix [ "(" ")" ":" ] @punctuation.delimiter)
|
||||||
|
(prefix "!" @punctuation.special)
|
||||||
|
(trailer (token) @variable.other.member)
|
||||||
|
(trailer (value) @string)
|
||||||
|
(breaking_change (token) @special)
|
||||||
|
|
||||||
(change kind: "new file" @diff.plus)
|
(change kind: (new)) @diff.plus
|
||||||
(change kind: "deleted" @diff.minus)
|
(change kind: (deleted)) @diff.minus
|
||||||
(change kind: "modified" @diff.delta)
|
(change kind: (modified)) @diff.delta
|
||||||
(change kind: "renamed" @diff.delta.moved)
|
(change kind: [(renamed) (typechange)]) @diff.delta.moved
|
||||||
|
|
||||||
(trailer
|
|
||||||
key: (trailer_key) @variable.other.member
|
|
||||||
value: (trailer_value) @string)
|
|
||||||
|
|
||||||
[":" "=" "->" (scissors)] @punctuation.delimiter
|
|
||||||
(comment) @comment
|
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
(((scissors)
|
((diff) @injection.content
|
||||||
(message) @injection.content)
|
|
||||||
(#set! injection.include-children)
|
|
||||||
(#set! injection.language "diff"))
|
(#set! injection.language "diff"))
|
||||||
|
|
||||||
((rebase_command) @injection.content
|
((rebase_command) @injection.content
|
||||||
|
|
|
@ -180,9 +180,10 @@
|
||||||
[
|
[
|
||||||
(interpreted_string_literal)
|
(interpreted_string_literal)
|
||||||
(raw_string_literal)
|
(raw_string_literal)
|
||||||
(rune_literal)
|
|
||||||
] @string
|
] @string
|
||||||
|
|
||||||
|
(rune_literal) @constant.character
|
||||||
|
|
||||||
(escape_sequence) @constant.character.escape
|
(escape_sequence) @constant.character.escape
|
||||||
|
|
||||||
[
|
[
|
||||||
|
|
|
@ -1,6 +1,33 @@
|
||||||
((comment) @injection.content
|
((comment) @injection.content
|
||||||
(#set! injection.language "comment"))
|
(#set! injection.language "comment"))
|
||||||
|
|
||||||
|
; Inject markdown into documentation comments
|
||||||
|
;
|
||||||
|
; Go's comments are documentation comments when they are directly followed
|
||||||
|
; by one of Go's statements (e.g. `type`, `func`, `const`)
|
||||||
|
;
|
||||||
|
; This is only a partial implementation, which covers only
|
||||||
|
; block comments. For line comments (which are more common),
|
||||||
|
; upstream changes to the grammar are required.
|
||||||
|
(
|
||||||
|
(comment) @injection.content . (comment)* . [
|
||||||
|
(package_clause) ; `package`
|
||||||
|
(type_declaration) ; `type`
|
||||||
|
(method_declaration) ; `func`
|
||||||
|
(var_declaration) ; `var`
|
||||||
|
(const_declaration) ; `const`
|
||||||
|
; var (
|
||||||
|
; A = 1
|
||||||
|
; B = 2
|
||||||
|
; )
|
||||||
|
(const_spec)
|
||||||
|
; const (
|
||||||
|
; A = 1
|
||||||
|
; B = 2
|
||||||
|
; )
|
||||||
|
(var_spec)
|
||||||
|
]
|
||||||
|
(#set! injection.language "markdown"))
|
||||||
|
|
||||||
(call_expression
|
(call_expression
|
||||||
(selector_expression) @_function
|
(selector_expression) @_function
|
||||||
|
|
|
@ -256,3 +256,17 @@
|
||||||
|
|
||||||
((indented_string_expression (string_fragment) @injection.shebang @injection.content)
|
((indented_string_expression (string_fragment) @injection.shebang @injection.content)
|
||||||
(#set! injection.combined))
|
(#set! injection.combined))
|
||||||
|
|
||||||
|
; string contents of lib.literalExpression is nix code
|
||||||
|
((apply_expression
|
||||||
|
function: [
|
||||||
|
(select_expression) ; `lib.literalExpression`
|
||||||
|
(variable_expression) ; `literalExpression` this is the case when the symbol is brougth into scope e.g. `let inherit (lib) literalExpression; in`
|
||||||
|
] @_func
|
||||||
|
argument: [
|
||||||
|
(indented_string_expression (string_fragment) @injection.content) ; lib.literalExpression ''...''
|
||||||
|
(string_expression (string_fragment) @injection.content) ; lib.literalExpression "..."
|
||||||
|
])
|
||||||
|
(#any-of? @_func "lib.literalExpression" "literalExpression")
|
||||||
|
(#set! injection.language "nix")
|
||||||
|
(#set! injection.combined))
|
||||||
|
|
|
@ -14,8 +14,10 @@
|
||||||
|
|
||||||
; Definitions
|
; Definitions
|
||||||
|
|
||||||
(parameter
|
(function_item
|
||||||
pattern: (identifier) @local.definition.variable.parameter)
|
(parameters
|
||||||
|
(parameter
|
||||||
|
pattern: (identifier) @local.definition.variable.parameter)))
|
||||||
|
|
||||||
(closure_parameters (identifier) @local.definition.variable.parameter)
|
(closure_parameters (identifier) @local.definition.variable.parameter)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
# Dark Synthwave
|
||||||
|
# Based on Dark SynthWave '84 for VS Code (https://github.com/brainomite/dark-synthwave-vscode/tree/main)
|
||||||
|
#
|
||||||
|
# Author : Peter Retzlaff <pe.retzlaff@gmail.com>
|
||||||
|
# License: MIT License
|
||||||
|
|
||||||
|
# UI Colors
|
||||||
|
"ui.background" = { bg = "black", fg = "blood-red" }
|
||||||
|
"ui.cursor" = { fg = "white", modifiers = ["reversed"] }
|
||||||
|
"ui.cursor.primary" = { fg = "white", modifiers = ["reversed"] }
|
||||||
|
"ui.cursor.match" = { bg = "selection-blue" }
|
||||||
|
"ui.text" = "white"
|
||||||
|
"ui.text.focus" = { fg = "dark-grey", bg = "synth-red" }
|
||||||
|
"ui.text.inactive" = "grey"
|
||||||
|
"ui.linenr" = "grey"
|
||||||
|
"ui.linenr.selected" = "white"
|
||||||
|
"ui.statusline" = { fg = "white", bg = "black" }
|
||||||
|
"ui.statusline.inactive" = { fg = "grey", bg = "black"}
|
||||||
|
"ui.statusline.separator" = "synth-red"
|
||||||
|
"ui.popup" = { fg = "#f8f8f0", bg = "#1E1E1E" }
|
||||||
|
"ui.popup.info" = { fg = "synth-red", bg = "black" }
|
||||||
|
"ui.window" = "synth-red"
|
||||||
|
"ui.help" = { fg = "#f8f8f0", bg = "#1E1E1E" }
|
||||||
|
"ui.virtual.jump-label" = {fg = "synth-red", modifiers = ["bold"]}
|
||||||
|
"ui.selection" = { bg = "selection-blue" }
|
||||||
|
"ui.selection.primary" = { bg = "selection-blue" }
|
||||||
|
"ui.menu" = { fg = "white", bg = "black" }
|
||||||
|
"ui.menu.selected" = { fg = "dark-grey", bg = "synth-red" }
|
||||||
|
"ui.picker" = { fg = "neon-yellow" }
|
||||||
|
"ui.picker.header.column.active" = { modifiers = ["bold"] }
|
||||||
|
"ui.background.separator" = "synth-red"
|
||||||
|
|
||||||
|
# Diagnostic colors
|
||||||
|
"warning" = "warning"
|
||||||
|
"error" = "error"
|
||||||
|
"info" = "info"
|
||||||
|
"hint" = "info"
|
||||||
|
"diagnostic.warning" = { underline = { color = "warning", style = "curl" } }
|
||||||
|
"diagnostic.error" = { underline = { color = "error", style = "curl" } }
|
||||||
|
"diagnostic.info" = { underline = { color = "info", style = "curl" } }
|
||||||
|
"diagnostic.hint" = { underline = { color = "info", style = "curl" } }
|
||||||
|
|
||||||
|
# Syntax highlighting
|
||||||
|
"comment" = { fg = "mauve", modifiers = ["italic"] }
|
||||||
|
"constant" = "salmon"
|
||||||
|
"constant.numeric" = "salmon"
|
||||||
|
"constant.character.escape" = "beaming-blue"
|
||||||
|
"constant.builtin" = "synthetic-green"
|
||||||
|
"constant.builtin.boolean" = "synthetic-green"
|
||||||
|
"string" = "orange"
|
||||||
|
"string.regexp" = "salmon"
|
||||||
|
"variable" = "pelati-red"
|
||||||
|
"variable.builtin" = { fg = "blood-red", modifiers = ["bold"] }
|
||||||
|
"variable.parameter" = { fg = "jess-green", modifiers = ["italic"] }
|
||||||
|
"type" = "blood-red"
|
||||||
|
"constructor" = "blood-red"
|
||||||
|
"function" = "beaming-blue"
|
||||||
|
"keyword" = "neon-yellow"
|
||||||
|
"keyword.control" = "neon-yellow"
|
||||||
|
"keyword.control.import" = "jade"
|
||||||
|
"keyword.operator" = "neon-yellow"
|
||||||
|
"keyword.directive" = "jade"
|
||||||
|
"keyword.storage.type" = "neon-yellow"
|
||||||
|
"keyword.storage.modifier" = "neon-yellow"
|
||||||
|
|
||||||
|
# "label" = "neon-yellow"
|
||||||
|
"namespace" = "blood-red"
|
||||||
|
"operator" = "neon-yellow"
|
||||||
|
# "special" = "beaming-blue"
|
||||||
|
|
||||||
|
"punctuation.bracket" = "neon-yellow"
|
||||||
|
"tag" = "jade"
|
||||||
|
"attribute" = { fg = "neon-yellow", modifiers = ["italic"] }
|
||||||
|
|
||||||
|
"markup.heading" = { fg = "#ff7edb", modifiers = ["bold"] }
|
||||||
|
"markup.bold" = { fg = "#2ee2fa", modifiers = ["bold"] }
|
||||||
|
"markup.italic" = { fg = "#2ee2fa", modifiers = ["italic"] }
|
||||||
|
"markup.link.url" = { fg = "jade", modifiers = ["italic"] }
|
||||||
|
"markup.link.text" = "neon-yellow"
|
||||||
|
"markup.quote" = { fg = "jade", modifiers = ["italic"] }
|
||||||
|
"markup.raw" = "pelati-red"
|
||||||
|
"markup.raw.inline" = "pelati-red"
|
||||||
|
"markup.raw.block" = "pelati-red"
|
||||||
|
|
||||||
|
# Git gutter
|
||||||
|
"diff.plus.gutter" = "#47ffa0"
|
||||||
|
"diff.minus.gutter" = "error"
|
||||||
|
"diff.delta.gutter" = "info"
|
||||||
|
|
||||||
|
# bufferline
|
||||||
|
"ui.bufferline" = { fg = "grey", bg = "#000000"}
|
||||||
|
"ui.bufferline.active" = { fg = "dark-grey", bg = "synth-red" }
|
||||||
|
|
||||||
|
[palette]
|
||||||
|
black = "#000000"
|
||||||
|
white = "#ffffff"
|
||||||
|
neon-yellow = "#fede5d"
|
||||||
|
blood-red = "#fe4450"
|
||||||
|
pelati-red = "#f73232"
|
||||||
|
synth-red = "#ff3366"
|
||||||
|
salmon = "#f97e72"
|
||||||
|
beaming-blue = "#36f9f6"
|
||||||
|
selection-blue = "#001069"
|
||||||
|
synthetic-green = "#1afc65"
|
||||||
|
jess-green = "#28b881"
|
||||||
|
orange = "#ff8b39"
|
||||||
|
jade = "#72f1b8"
|
||||||
|
mauve = "#848bbd"
|
||||||
|
grey = "#808080"
|
||||||
|
dark-grey = "#141414"
|
||||||
|
error = "#ff5252"
|
||||||
|
warning = "#ffab40"
|
||||||
|
info = "#40c4ff"
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2021 Aaron Young
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
|
@ -0,0 +1,219 @@
|
||||||
|
# License: MIT License
|
||||||
|
# Sidra Theme for the Helix Editor
|
||||||
|
# Author: Md Atiquz Zaman <atiquzz42@gmail.com>
|
||||||
|
# Repo: https://github.com/atiquz/sidra
|
||||||
|
# Inspired by: One Monokai, Dracula, One Dark Pro
|
||||||
|
# Description: A customizable, balanced dark theme built for readability and flexibility.
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================
|
||||||
|
# UI Element Styling
|
||||||
|
# ===========================
|
||||||
|
|
||||||
|
|
||||||
|
# USER INTERFACE
|
||||||
|
"ui.background" = { fg = "foreground", bg = "background" }
|
||||||
|
"ui.background.separator" = { fg = "white" }
|
||||||
|
|
||||||
|
"ui.linenr" = { fg = "fg_linenr" }
|
||||||
|
"ui.linenr.selected" = { fg = "fg_linenr_sld" }
|
||||||
|
|
||||||
|
"ui.help" = { fg = "fg_help", bg = "bg_help" }
|
||||||
|
"ui.popup" = { bg = "bg_popup" }
|
||||||
|
"ui.window" = { fg = "fg_window" }
|
||||||
|
|
||||||
|
"ui.text" = { fg = "fg_text" }
|
||||||
|
"ui.text.focus" = { fg = "fg_text_focus" }
|
||||||
|
"ui.text.inactive" = { fg = "fg_text_inactive" }
|
||||||
|
|
||||||
|
"ui.virtual" = { fg = "fg_virtual" }
|
||||||
|
"ui.virtual.ruler" = { bg = "bg_virtual_ruler" }
|
||||||
|
"ui.virtual.indent-guide" = { fg = "fg_virtual_indent" }
|
||||||
|
|
||||||
|
"ui.debug" = { fg = "fg_debug", modifiers = ["bold"] }
|
||||||
|
"ui.debug.active" = { fg = "fg_debug_active", modifiers = ["bold"] }
|
||||||
|
"ui.debug.breakpoint" = { fg = "fg_debug_breakpoint", modifiers = ["bold"] }
|
||||||
|
|
||||||
|
"ui.menu" = { fg = "gray", bg = "black" }
|
||||||
|
"ui.menu.selected" = { fg = "black", bg = "gray" }
|
||||||
|
|
||||||
|
# CURSOR
|
||||||
|
"ui.cursor" = { fg = "foreground", bg = "bg_normal", modifiers = ["dim"] }
|
||||||
|
"ui.cursor.match" = { fg = "foreground", bg = "bg_match", modifiers = ["dim"] }
|
||||||
|
"ui.cursor.normal" = { fg = "background", bg = "bg_normal", modifiers = ["dim"] }
|
||||||
|
"ui.cursor.insert" = { fg = "background", bg = "bg_insert", modifiers = ["dim"] }
|
||||||
|
"ui.cursor.select" = { fg = "background", bg = "bg_select", modifiers = ["dim"] }
|
||||||
|
"ui.cursor.primary.normal" = { fg = "background", bg = "bg_normal" }
|
||||||
|
"ui.cursor.primary.insert" = { fg = "background", bg = "bg_insert" }
|
||||||
|
"ui.cursor.primary.select" = { fg = "background", bg = "bg_select" }
|
||||||
|
"ui.cursorline" = { bg = "bg_cursorline" }
|
||||||
|
"ui.cursorline.primary" = { bg = "bg_cursorline" }
|
||||||
|
|
||||||
|
|
||||||
|
# SELECTION
|
||||||
|
"ui.selection" = { fg = "white", bg = "bg_selection" }
|
||||||
|
"ui.selection.primary" = { fg = "white", bg = "bg_selection" }
|
||||||
|
|
||||||
|
|
||||||
|
# STATUS LINE
|
||||||
|
"ui.statusline" = { fg = "fg_statusline", bg = "bg_statusline" }
|
||||||
|
"ui.statusline.inactive" = { fg = "fg_inactive", bg = "bg_inactive" }
|
||||||
|
"ui.statusline.normal" = { fg = "black", bg = "bg_normal", modifiers = ["bold"] }
|
||||||
|
"ui.statusline.insert" = { fg = "black", bg = "bg_insert", modifiers = ["bold"] }
|
||||||
|
"ui.statusline.select" = { fg = "black", bg = "bg_select", modifiers = ["bold"] }
|
||||||
|
|
||||||
|
# MARKUP
|
||||||
|
"markup.heading" = { fg = "markup_heading" }
|
||||||
|
"markup.bold" = { fg = "markup_bold", modifiers = ["bold"] }
|
||||||
|
"markup.italic" = { fg = "markup_italic", modifiers = ["italic"] }
|
||||||
|
"markup.strikethrough" = { fg = "markup_strikethrough", modifiers = ["crossed_out", "bold"] }
|
||||||
|
"markup.link.url" = { fg = "markup_link_url", modifiers = ["underlined"] }
|
||||||
|
"markup.link.text" = { fg = "markup_link_text" }
|
||||||
|
"markup.raw" = { fg = "markup_raw" }
|
||||||
|
|
||||||
|
|
||||||
|
# GIT
|
||||||
|
"diff.plus" = { fg = "plus", modifiers = ["bold"] }
|
||||||
|
"diff.minus" = { fg = "minus", modifiers = ["bold"] }
|
||||||
|
"diff.delta" = { fg = "delta", modifiers = ["bold"] }
|
||||||
|
|
||||||
|
|
||||||
|
# HINT INFO ERROR & WARNING
|
||||||
|
"diagnostic.hint" = { underline = { color = "cl_hint", style = "curl" } }
|
||||||
|
"diagnostic.info" = { underline = { color = "cl_info", style = "curl" } }
|
||||||
|
"diagnostic.error" = { underline = { color = "cl_error", style = "curl" } }
|
||||||
|
"diagnostic.warning" = { underline = { color = "cl_warning", style = "curl" } }
|
||||||
|
|
||||||
|
hint = "cl_hint"
|
||||||
|
info = "cl_info"
|
||||||
|
error = "cl_error"
|
||||||
|
warning = "cl_warning"
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================
|
||||||
|
# SYNTAX COLORS
|
||||||
|
# ===========================
|
||||||
|
|
||||||
|
|
||||||
|
# === ATTRIBUTES & KEYWORDS ===
|
||||||
|
attribute = "#a7bf67" # Olive green
|
||||||
|
keyword = "#A4A2B4" # Muted lavender gray
|
||||||
|
"keyword.directive" = "#D3D3D3" # Light gray (used to be "light-gray")
|
||||||
|
namespace = "#7095bf" # Steel blue
|
||||||
|
|
||||||
|
# === SYMBOLS & OPERATORS ===
|
||||||
|
punctuation = "#FFFFFF" # White
|
||||||
|
"punctuation.delimiter" = "#FFFFFF" # White (delimiter punctuation)
|
||||||
|
operator = "#987654" # Dusty brown (used to be "muddy")
|
||||||
|
special = "#c90076" # Pink Color
|
||||||
|
|
||||||
|
# === VARIABLES ===
|
||||||
|
variable = "#7ec67f" # Soft green
|
||||||
|
"variable.other.member" = "#7ec67f" # Soft green (class or object members)
|
||||||
|
"variable.parameter" = "#a8ffb4" # Pale mint green
|
||||||
|
"variable.builtin" = "#a8ffb4" # Pale mint green (special language vars)
|
||||||
|
|
||||||
|
# === TYPES ===
|
||||||
|
type = "#efbe4c" # Golden yellow
|
||||||
|
"type.builtin" = "#efbe4c" # Golden yellow (built-in types)
|
||||||
|
constructor = "#c19ef7" # Light lilac
|
||||||
|
|
||||||
|
# === FUNCTIONS ===
|
||||||
|
function = "#987654" # Dusty brown (used to be "muddy")
|
||||||
|
"function.macro" = "#987654" # Dusty brown (macro functions)
|
||||||
|
"function.builtin" = "#db985e" # Orange tan
|
||||||
|
|
||||||
|
# === TAGS ===
|
||||||
|
tag = "#d37a78" # Soft salmon pink
|
||||||
|
|
||||||
|
# === COMMENTS ===
|
||||||
|
comment = "#D3D3D3" # Light gray
|
||||||
|
|
||||||
|
# === CONSTANTS ===
|
||||||
|
constant = "#A5C4D4" # Pale blue
|
||||||
|
"constant.builtin" = "#f1fa8c" # Bright yellow
|
||||||
|
"constant.numeric" = "#b577b0" # Muted violet
|
||||||
|
"constant.character.escape" = "#c95c56" # Coral red (escape characters)
|
||||||
|
|
||||||
|
# === STRINGS ===
|
||||||
|
string = "#d6a560" # Sandy yellow-orange
|
||||||
|
|
||||||
|
# === LABELS ===
|
||||||
|
label = "#abcc8a" # Pale green
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================
|
||||||
|
# Color Palette
|
||||||
|
# ===========================
|
||||||
|
|
||||||
|
[palette]
|
||||||
|
|
||||||
|
# ===== MODES COLORS =====
|
||||||
|
|
||||||
|
bg_normal = "#BD93F9" # Light purple
|
||||||
|
bg_insert = "#50fa7b" # Neon green
|
||||||
|
bg_select = "#8be9fd" # Cyan blue
|
||||||
|
bg_match = "#D3D3D3" # Light gray
|
||||||
|
|
||||||
|
# ===== GIT COLORS =====
|
||||||
|
|
||||||
|
plus = "#4F6F52" # Forest green
|
||||||
|
minus = "#B80000" # Vivid red
|
||||||
|
delta = "#3876BF" # Steel blue
|
||||||
|
|
||||||
|
# ===== MARKUP COLORS =====
|
||||||
|
|
||||||
|
markup_heading = "#ff69b4" # Hot pink
|
||||||
|
markup_bold = "#e7c547" # Bright yellow
|
||||||
|
markup_italic = "#b294bb" # Lavender
|
||||||
|
markup_strikethrough = "#d7005f" # Deep pink-red
|
||||||
|
markup_link_url = "#3876BF" # Steel blue
|
||||||
|
markup_link_text = "#FFA500" # Orange
|
||||||
|
markup_raw = "#808080" # Medium gray
|
||||||
|
|
||||||
|
# ===== PRIMARY UI COLORS =====
|
||||||
|
|
||||||
|
foreground = "#D3D3D3" # Light gray (default text)
|
||||||
|
background = "#1f1f21" # Very dark gray (background)
|
||||||
|
|
||||||
|
# ===== UI INTERFACE COLORS =====
|
||||||
|
|
||||||
|
fg_linenr = "#747575" # Dull silver (line numbers)
|
||||||
|
fg_linenr_sld = "#c7dddd" # Light cyan (selected line number)
|
||||||
|
fg_help = "#D3D3D3" # Light gray (help text)
|
||||||
|
bg_help = "#35353a" # Charcoal (help background)
|
||||||
|
bg_popup = "#3b3b3d" # Dark gray (popup background)
|
||||||
|
fg_window = "#F1DCA7" # Soft cream (window border/title)
|
||||||
|
|
||||||
|
fg_text = "#D3D3D3" # Light gray (main text)
|
||||||
|
fg_text_focus = "#83c679" # Light green (focused text)
|
||||||
|
fg_text_inactive = "#93a56f" # Olive green (inactive text)
|
||||||
|
|
||||||
|
# ===== VIRTUAL COLORS =====
|
||||||
|
|
||||||
|
fg_virtual = "#F1DCA7" # Cream (virtual text)
|
||||||
|
bg_virtual_ruler = "#363638" # Deep gray (ruler background)
|
||||||
|
fg_virtual_indent = "#5B5B5A" # Medium-dark gray (indent guides)
|
||||||
|
|
||||||
|
# ===== DEBUGGING COLORS =====
|
||||||
|
|
||||||
|
fg_debug = "#634450" # Plum (debug info)
|
||||||
|
fg_debug_active = "#3876BF" # Blue (active debug line)
|
||||||
|
fg_debug_breakpoint = "#B80000" # Red (breakpoint marker)
|
||||||
|
|
||||||
|
# ===== CURSOR, SELECTION, STATUSLINE =====
|
||||||
|
|
||||||
|
bg_cursorline = "#2d303e" # Slate blue-gray (cursor line)
|
||||||
|
bg_selection = "#71797E" # Cool gray (selected text background)
|
||||||
|
fg_statusline = "#D3D3D3" # Light gray (statusline text)
|
||||||
|
bg_statusline = "#303030" # Dark gray (statusline background)
|
||||||
|
fg_inactive = "#4b5059" # Dim gray (inactive statusline text)
|
||||||
|
bg_inactive = "#303030" # Dark gray (inactive statusline bg)
|
||||||
|
|
||||||
|
# ===== HINT INFO ERROR & WARNING COLORS =====
|
||||||
|
|
||||||
|
cl_hint = "#f1fa8c" # Bright yellow
|
||||||
|
cl_info = "#f1fa8c" # Same as hint
|
||||||
|
cl_error = "#ff69b4" # Bright pink
|
||||||
|
cl_warning = "#f1fa8c" # Same as hint
|
|
@ -36,7 +36,8 @@ pub fn typable_commands() -> Result<String, DynError> {
|
||||||
"Description".to_owned(),
|
"Description".to_owned(),
|
||||||
]));
|
]));
|
||||||
|
|
||||||
let cmdify = |s: &str| format!("`:{}`", s);
|
// escape | so it doesn't get rendered as a column separator
|
||||||
|
let cmdify = |s: &str| format!("`:{}`", s.replace('|', "\\|"));
|
||||||
|
|
||||||
for cmd in TYPABLE_COMMAND_LIST {
|
for cmd in TYPABLE_COMMAND_LIST {
|
||||||
let names = std::iter::once(&cmd.name)
|
let names = std::iter::once(&cmd.name)
|
||||||
|
|
Loading…
Reference in New Issue