mirror of https://github.com/helix-editor/helix
fix versions
parent
0f96fea7d9
commit
ca346b1416
|
@ -16,6 +16,9 @@ default-members = [
|
|||
"helix-term"
|
||||
]
|
||||
|
||||
[workspace.dependencies]
|
||||
steel-core = { path = "../../steel/crates/steel-core", version = "0.4.0", features = ["modules", "anyhow", "blocking_requests"] }
|
||||
|
||||
[profile.release]
|
||||
lto = "thin"
|
||||
debug = true
|
||||
|
|
|
@ -48,8 +48,7 @@ chrono = { version = "0.4", default-features = false, features = ["alloc", "std"
|
|||
etcetera = "0.8"
|
||||
textwrap = "0.16.0"
|
||||
|
||||
steel-core = { path = "../../../steel/crates/steel-core", version = "0.4.0", features = ["modules", "anyhow", "blocking_requests"] }
|
||||
|
||||
steel-core = { workspace = true }
|
||||
|
||||
[dev-dependencies]
|
||||
quickcheck = { version = "1", default-features = false }
|
||||
|
|
|
@ -960,8 +960,9 @@ pub fn custom_indent_for_newline(
|
|||
let line = text_up_to_cursor.line(cursor);
|
||||
|
||||
// We want to ignore comments
|
||||
if let Some(l) = line.as_str() {
|
||||
if l.starts_with(";") {
|
||||
|
||||
let l = std::borrow::Cow::from(line);
|
||||
if l.trim_start().starts_with(";") {
|
||||
if cursor == 0 {
|
||||
break;
|
||||
}
|
||||
|
@ -970,7 +971,6 @@ pub fn custom_indent_for_newline(
|
|||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// log::info!("Line: {}", line);
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ grep-regex = "0.1.11"
|
|||
grep-searcher = "0.1.11"
|
||||
|
||||
# plugin support
|
||||
steel-core = { path = "../../../steel/crates/steel-core", version = "0.4.0", features = ["modules", "anyhow", "blocking_requests"] }
|
||||
steel-core = { workspace = true }
|
||||
dlopen = "0.1.8"
|
||||
dlopen_derive = "0.1.4"
|
||||
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
use fuzzy_matcher::FuzzyMatcher;
|
||||
use helix_core::{graphemes, shellwords::Shellwords, Selection, Tendril};
|
||||
use helix_view::{
|
||||
document::Mode, editor::Action, extension::document_id_to_usize, input::KeyEvent, Document,
|
||||
DocumentId, Editor,
|
||||
document::Mode,
|
||||
editor::{Action, ConfigEvent},
|
||||
extension::document_id_to_usize,
|
||||
input::KeyEvent,
|
||||
Document, DocumentId, Editor,
|
||||
};
|
||||
use once_cell::sync::Lazy;
|
||||
use serde_json::Value;
|
||||
use steel::{
|
||||
gc::unsafe_erased_pointers::CustomReference,
|
||||
rvals::{AsRefMutSteelValFromRef, FromSteelVal, IntoSteelVal},
|
||||
|
@ -16,6 +20,7 @@ use std::{
|
|||
borrow::Cow,
|
||||
collections::{HashMap, VecDeque},
|
||||
marker::PhantomData,
|
||||
ops::Deref,
|
||||
path::PathBuf,
|
||||
sync::Mutex,
|
||||
};
|
||||
|
@ -97,6 +102,14 @@ impl ScriptingEngine {
|
|||
.and_then(|x| x.to_str())
|
||||
};
|
||||
|
||||
let doc_id = {
|
||||
let current_focus = cx.editor.tree.focus;
|
||||
let view = cx.editor.tree.get(current_focus);
|
||||
let doc = &view.doc;
|
||||
|
||||
doc
|
||||
};
|
||||
|
||||
if let Some(extension) = extension {
|
||||
let special_buffer_map = "*buffer-or-extension-keybindings*";
|
||||
|
||||
|
@ -115,6 +128,29 @@ impl ScriptingEngine {
|
|||
}
|
||||
}
|
||||
|
||||
// reverse-buffer-map -> label -> keybinding map
|
||||
let value = ENGINE.with(|x| x.borrow().extract_value("*reverse-buffer-map*").clone());
|
||||
|
||||
if let Ok(SteelVal::HashMapV(map)) = value {
|
||||
if let Some(label) = map.get(&SteelVal::IntV(document_id_to_usize(doc_id) as isize)) {
|
||||
let special_buffer_map = "*buffer-or-extension-keybindings*";
|
||||
|
||||
let value = ENGINE.with(|x| x.borrow().extract_value(special_buffer_map).clone());
|
||||
|
||||
if let Ok(SteelVal::HashMapV(map)) = value {
|
||||
if let Some(value) = map.get(label) {
|
||||
if let SteelVal::Custom(inner) = value {
|
||||
if let Some(_) = steel::rvals::as_underlying_type::<EmbeddedKeyMap>(
|
||||
inner.borrow().as_ref(),
|
||||
) {
|
||||
return Some(value.clone());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
|
@ -686,7 +722,11 @@ fn configure_engine() -> std::rc::Rc<std::cell::RefCell<steel::steel_vm::engine:
|
|||
engine.register_fn("helix-string->keymap", string_to_embedded_keymap);
|
||||
|
||||
// Use this to get at buffer specific keybindings
|
||||
engine.register_value("*buffer-or-extension-keybindings*", SteelVal::Void);
|
||||
engine.register_value(
|
||||
"*buffer-or-extension-keybindings*",
|
||||
SteelVal::empty_hashmap(),
|
||||
);
|
||||
engine.register_value("*reverse-buffer-map*", SteelVal::empty_hashmap());
|
||||
|
||||
// Find the workspace
|
||||
engine.register_fn("helix-find-workspace", || {
|
||||
|
@ -937,6 +977,20 @@ fn configure_engine() -> std::rc::Rc<std::cell::RefCell<steel::steel_vm::engine:
|
|||
|
||||
let mut module = BuiltInModule::new("helix/core/typable".to_string());
|
||||
|
||||
{
|
||||
let func = |cx: &mut Context, args: &[Cow<str>], event: PromptEvent| {
|
||||
let mut cx = compositor::Context {
|
||||
editor: cx.editor,
|
||||
scroll: None,
|
||||
jobs: cx.jobs,
|
||||
};
|
||||
|
||||
set_options(&mut cx, args, event)
|
||||
};
|
||||
|
||||
module.register_fn("set-options", func);
|
||||
}
|
||||
|
||||
module.register_value(
|
||||
"PromptEvent::Validate",
|
||||
PromptEvent::Validate.into_steelval().unwrap(),
|
||||
|
@ -1438,3 +1492,65 @@ fn create_directory(path: String) {
|
|||
// log::info!("Enqueueing callback!");
|
||||
|
||||
// }
|
||||
|
||||
/// Change config at runtime. Access nested values by dot syntax, for
|
||||
/// example to disable smart case search, use `:set search.smart-case false`.
|
||||
fn set_options(
|
||||
cx: &mut compositor::Context,
|
||||
args: &[Cow<str>],
|
||||
event: PromptEvent,
|
||||
) -> anyhow::Result<()> {
|
||||
if event != PromptEvent::Validate {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
if args.len() % 2 != 0 {
|
||||
anyhow::bail!("Bad arguments. Usage: `:set key field`");
|
||||
}
|
||||
|
||||
let mut config = serde_json::json!(&cx.editor.config().deref());
|
||||
// let key_error = || anyhow::anyhow!("Unknown key `{}`", key);
|
||||
// let field_error = |_| anyhow::anyhow!("Could not parse field `{}`", arg);
|
||||
|
||||
for args in args.chunks_exact(2) {
|
||||
let (key, arg) = (&args[0].to_lowercase(), &args[1]);
|
||||
|
||||
let key_error = || anyhow::anyhow!("Unknown key `{}`", key);
|
||||
let field_error = |_| anyhow::anyhow!("Could not parse field `{}`", arg);
|
||||
|
||||
// let mut config = serde_json::json!(&cx.editor.config().deref());
|
||||
let pointer = format!("/{}", key.replace('.', "/"));
|
||||
let value = config.pointer_mut(&pointer).ok_or_else(key_error)?;
|
||||
|
||||
*value = if value.is_string() {
|
||||
// JSON strings require quotes, so we can't .parse() directly
|
||||
Value::String(arg.to_string())
|
||||
} else {
|
||||
arg.parse().map_err(field_error)?
|
||||
};
|
||||
}
|
||||
|
||||
// let (key, arg) = (&args[0].to_lowercase(), &args[1]);
|
||||
|
||||
// let key_error = || anyhow::anyhow!("Unknown key `{}`", key);
|
||||
// let field_error = |_| anyhow::anyhow!("Could not parse field `{}`", arg);
|
||||
|
||||
// let mut config = serde_json::json!(&cx.editor.config().deref());
|
||||
// let pointer = format!("/{}", key.replace('.', "/"));
|
||||
// let value = config.pointer_mut(&pointer).ok_or_else(key_error)?;
|
||||
|
||||
// *value = if value.is_string() {
|
||||
// // JSON strings require quotes, so we can't .parse() directly
|
||||
// Value::String(arg.to_string())
|
||||
// } else {
|
||||
// arg.parse().map_err(field_error)?
|
||||
// };
|
||||
let config =
|
||||
serde_json::from_value(config).map_err(|_| anyhow::anyhow!("Could not parse config"))?;
|
||||
|
||||
cx.editor
|
||||
.config_events
|
||||
.0
|
||||
.send(ConfigEvent::Update(config))?;
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -26,4 +26,4 @@ once_cell = "1.18"
|
|||
log = "~0.4"
|
||||
helix-view = { version = "0.6", path = "../helix-view", features = ["term"] }
|
||||
helix-core = { version = "0.6", path = "../helix-core" }
|
||||
steel-core = { path = "../../../steel/crates/steel-core", version = "0.4.0", features = ["modules", "anyhow", "blocking_requests"] }
|
||||
steel-core = { workspace = true }
|
||||
|
|
|
@ -46,7 +46,7 @@ which = "4.4"
|
|||
parking_lot = "0.12.1"
|
||||
|
||||
# plugin support
|
||||
steel-core = { path = "../../../steel/crates/steel-core", version = "0.4.0", features = ["modules", "anyhow", "blocking_requests"] }
|
||||
steel-core = { workspace = true }
|
||||
|
||||
|
||||
[target.'cfg(windows)'.dependencies]
|
||||
|
|
Loading…
Reference in New Issue