add feature flag

pull/8675/merge^2
mattwparas 1 year ago
parent 81243247c6
commit 279f5eddb3

@ -13,6 +13,7 @@ include = ["src/**/*", "README.md"]
[features] [features]
unicode-lines = ["ropey/unicode_lines"] unicode-lines = ["ropey/unicode_lines"]
integration = [] integration = []
steel = ["dep:steel-core"]
[dependencies] [dependencies]
helix-loader = { version = "0.6", path = "../helix-loader" } helix-loader = { version = "0.6", path = "../helix-loader" }
@ -48,7 +49,7 @@ chrono = { version = "0.4", default-features = false, features = ["alloc", "std"
etcetera = "0.8" etcetera = "0.8"
textwrap = "0.16.0" textwrap = "0.16.0"
steel-core = { workspace = true } steel-core = { workspace = true, optional = true }
[dev-dependencies] [dev-dependencies]
quickcheck = { version = "1", default-features = false } quickcheck = { version = "1", default-features = false }

@ -1,3 +1,6 @@
#[cfg(feature = "steel")]
pub mod steel_implementations {
use std::{borrow::Cow, cell::Cell, rc::Rc}; use std::{borrow::Cow, cell::Cell, rc::Rc};
use ropey::iter::Chars; use ropey::iter::Chars;
@ -5,7 +8,9 @@ use smallvec::SmallVec;
use steel::{ use steel::{
gc::unsafe_erased_pointers::CustomReference, gc::unsafe_erased_pointers::CustomReference,
rvals::{Custom, SteelString}, rvals::{Custom, SteelString},
steel_vm::{builtin::BuiltInModule, register_fn::RegisterFn, register_fn::RegisterFnBorrowed}, steel_vm::{
builtin::BuiltInModule, register_fn::RegisterFn, register_fn::RegisterFnBorrowed,
},
}; };
impl steel::rvals::Custom for crate::Position {} impl steel::rvals::Custom for crate::Position {}
@ -241,3 +246,4 @@ pub fn rope_module() -> BuiltInModule {
module module
} }
}

@ -156,14 +156,6 @@ pub fn log_file() -> PathBuf {
LOG_FILE.get().map(|path| path.to_path_buf()).unwrap() LOG_FILE.get().map(|path| path.to_path_buf()).unwrap()
} }
pub fn helix_module_file() -> PathBuf {
config_dir().join("helix.scm")
}
pub fn steel_init_file() -> PathBuf {
config_dir().join("init.scm")
}
pub fn workspace_config_file() -> PathBuf { pub fn workspace_config_file() -> PathBuf {
find_workspace().0.join(".helix").join("config.toml") find_workspace().0.join(".helix").join("config.toml")
} }

@ -13,10 +13,12 @@ default-run = "hx"
rust-version = "1.65" rust-version = "1.65"
[features] [features]
default = ["git"] default = ["git", "steel"]
# default = ["git"]
unicode-lines = ["helix-core/unicode-lines"] unicode-lines = ["helix-core/unicode-lines"]
integration = [] integration = []
git = ["helix-vcs/git"] git = ["helix-vcs/git"]
steel = ["dep:steel-core", "helix-core/steel", "helix-view/steel", "tui/steel"]
[[bin]] [[bin]]
name = "hx" name = "hx"
@ -67,7 +69,7 @@ grep-regex = "0.1.11"
grep-searcher = "0.1.11" grep-searcher = "0.1.11"
# plugin support # plugin support
steel-core = { workspace = true } steel-core = { workspace = true, optional = true }
[target.'cfg(not(windows))'.dependencies] # https://github.com/vorner/signal-hook/issues/100 [target.'cfg(not(windows))'.dependencies] # https://github.com/vorner/signal-hook/issues/100
signal-hook-tokio = { version = "0.3", features = ["futures-v0_3"] } signal-hook-tokio = { version = "0.3", features = ["futures-v0_3"] }

File diff suppressed because it is too large Load Diff

@ -8,7 +8,7 @@ use steel::{
}; };
use crate::{ use crate::{
commands::{engine::ENGINE, Context}, commands::{engine::scheme::ENGINE, Context},
compositor::{self, Component}, compositor::{self, Component},
ui::{Popup, Prompt, PromptEvent}, ui::{Popup, Prompt, PromptEvent},
}; };
@ -72,6 +72,7 @@ pub fn helix_component_module() -> BuiltInModule {
} }
}, },
); );
// prompt: Cow<'static, str>, // prompt: Cow<'static, str>,
// history_register: Option<char>, // history_register: Option<char>,
// completion_fn: impl FnMut(&Editor, &str) -> Vec<Completion> + 'static, // completion_fn: impl FnMut(&Editor, &str) -> Vec<Completion> + 'static,

File diff suppressed because it is too large Load Diff

@ -2,7 +2,6 @@ use std::ops::Deref;
use crate::job::Job; use crate::job::Job;
use super::engine::{compositor_present_error, present_error};
use super::*; use super::*;
use helix_core::{encoding, shellwords::Shellwords}; use helix_core::{encoding, shellwords::Shellwords};

@ -134,7 +134,11 @@ impl Config {
let local_config = fs::read_to_string(helix_loader::workspace_config_file()) let local_config = fs::read_to_string(helix_loader::workspace_config_file())
.map_err(ConfigLoadError::Error); .map_err(ConfigLoadError::Error);
let bindings = crate::commands::engine::SharedKeyBindingsEventQueue::get(); #[cfg(feature = "steel")]
let bindings = crate::commands::engine::scheme::SharedKeyBindingsEventQueue::get();
#[cfg(not(feature = "steel"))]
let bindings = None;
Config::load(global_config, local_config, bindings) Config::load(global_config, local_config, bindings)
} }

@ -803,20 +803,7 @@ impl EditorView {
self.pseudo_pending.extend(self.keymaps.pending()); self.pseudo_pending.extend(self.keymaps.pending());
// Check the engine for any buffer specific keybindings first // Check the engine for any buffer specific keybindings first
let key_result = ScriptingEngine::get_keymap_for_extension(cxt) let key_result = ScriptingEngine::handle_keymap_event(self, mode, cxt, event);
.and_then(|map| {
if let steel::SteelVal::Custom(inner) = map {
if let Some(underlying) = steel::rvals::as_underlying_type::<
commands::engine::EmbeddedKeyMap,
>(inner.borrow().as_ref())
{
return Some(self.keymaps.get_with_map(&underlying.0, mode, event));
}
}
None
})
.unwrap_or_else(|| self.keymaps.get(mode, event));
cxt.editor.autoinfo = self.keymaps.sticky().map(|node| node.infobox()); cxt.editor.autoinfo = self.keymaps.sticky().map(|node| node.infobox());

@ -0,0 +1,11 @@
#[cfg(feature = "steel")]
mod steel_implementations {
use crate::{
compositor::Component,
ui::{Popup, Text},
};
impl steel::rvals::Custom for Text {}
impl<T: steel::rvals::IntoSteelVal + Component> steel::rvals::Custom for Popup<T> {}
}

@ -1,6 +1,7 @@
mod completion; mod completion;
mod document; mod document;
pub(crate) mod editor; pub(crate) mod editor;
mod extension;
mod fuzzy_match; mod fuzzy_match;
mod info; mod info;
pub mod lsp; pub mod lsp;

@ -3,7 +3,6 @@ use crate::{
compositor::{Callback, Component, Context, Event, EventResult}, compositor::{Callback, Component, Context, Event, EventResult},
ctrl, key, ctrl, key,
}; };
use steel::rvals::Custom;
use tui::buffer::Buffer as Surface; use tui::buffer::Buffer as Surface;
use helix_core::Position; use helix_core::Position;
@ -15,8 +14,6 @@ use helix_view::{
// TODO: share logic with Menu, it's essentially Popup(render_fn), but render fn needs to return // TODO: share logic with Menu, it's essentially Popup(render_fn), but render fn needs to return
// a width/height hint. maybe Popup(Box<Component>) // a width/height hint. maybe Popup(Box<Component>)
impl<T: steel::rvals::IntoSteelVal + Component> Custom for Popup<T> {}
pub struct Popup<T: Component> { pub struct Popup<T: Component> {
contents: T, contents: T,
position: Option<Position>, position: Option<Position>,

@ -8,10 +8,7 @@ use helix_view::{
Document, Editor, View, Document, Editor, View,
}; };
use crate::{ use crate::ui::ProgressSpinners;
commands::engine::{StatusLineMessage, STATUS_LINE_MESSAGE},
ui::ProgressSpinners,
};
use helix_view::editor::StatusLineElement as StatusLineElementID; use helix_view::editor::StatusLineElement as StatusLineElementID;
use tui::buffer::Buffer as Surface; use tui::buffer::Buffer as Surface;
@ -515,9 +512,9 @@ fn render_custom_text<F>(context: &mut RenderContext, write: F)
where where
F: Fn(&mut RenderContext, String, Option<Style>) + Copy, F: Fn(&mut RenderContext, String, Option<Style>) + Copy,
{ {
if let Some(message) = StatusLineMessage::get() { // if let Some(message) = StatusLineMessage::get() {
write(context, message, None); // write(context, message, None);
} // }
} }
fn render_register<F>(context: &mut RenderContext, write: F) fn render_register<F>(context: &mut RenderContext, write: F)

@ -3,8 +3,6 @@ use tui::buffer::Buffer as Surface;
use helix_view::graphics::Rect; use helix_view::graphics::Rect;
impl steel::rvals::Custom for Text {}
pub struct Text { pub struct Text {
pub(crate) contents: tui::text::Text<'static>, pub(crate) contents: tui::text::Text<'static>,
size: (u16, u16), size: (u16, u16),

@ -14,6 +14,7 @@ include = ["src/**/*", "README.md"]
[features] [features]
default = ["crossterm"] default = ["crossterm"]
steel = ["dep:steel-core", "helix-view/steel", "helix-core/steel"]
[dependencies] [dependencies]
bitflags = "2.4" bitflags = "2.4"
@ -26,4 +27,4 @@ once_cell = "1.18"
log = "~0.4" log = "~0.4"
helix-view = { version = "0.6", path = "../helix-view", features = ["term"] } helix-view = { version = "0.6", path = "../helix-view", features = ["term"] }
helix-core = { version = "0.6", path = "../helix-core" } helix-core = { version = "0.6", path = "../helix-core" }
steel-core = { workspace = true } steel-core = { workspace = true, optional = true }

@ -1,3 +1,6 @@
#[cfg(feature = "steel")]
mod steel_implementations {
use crate::{buffer::Buffer, widgets::Widget}; use crate::{buffer::Buffer, widgets::Widget};
use steel::{gc::unsafe_erased_pointers::CustomReference, rvals::Custom}; use steel::{gc::unsafe_erased_pointers::CustomReference, rvals::Custom};
@ -5,3 +8,4 @@ use steel::{gc::unsafe_erased_pointers::CustomReference, rvals::Custom};
impl CustomReference for Buffer {} impl CustomReference for Buffer {}
steel::custom_reference!(Buffer); steel::custom_reference!(Buffer);
}

@ -10,8 +10,8 @@ repository = "https://github.com/helix-editor/helix"
homepage = "https://helix-editor.com" homepage = "https://helix-editor.com"
[features] [features]
default = []
term = ["crossterm"] term = ["crossterm"]
steel = ["dep:steel-core", "helix-core/steel"]
[dependencies] [dependencies]
bitflags = "2.4" bitflags = "2.4"
@ -46,7 +46,7 @@ which = "4.4"
parking_lot = "0.12.1" parking_lot = "0.12.1"
# plugin support # plugin support
steel-core = { workspace = true } steel-core = { workspace = true, optional = true }
[target.'cfg(windows)'.dependencies] [target.'cfg(windows)'.dependencies]

@ -874,11 +874,6 @@ pub struct Breakpoint {
use futures_util::stream::{Flatten, Once}; use futures_util::stream::{Flatten, Once};
impl steel::gc::unsafe_erased_pointers::CustomReference for Editor {}
steel::custom_reference!(Editor);
impl steel::rvals::Custom for Mode {}
#[repr(C)] #[repr(C)]
pub struct Editor { pub struct Editor {
/// Current editing mode. /// Current editing mode.

@ -1,6 +1,23 @@
use crate::DocumentId;
pub fn document_id_to_usize(doc_id: &DocumentId) -> usize {
doc_id.0.into()
}
#[cfg(feature = "steel")]
mod steel_implementations {
use steel::{gc::unsafe_erased_pointers::CustomReference, rvals::Custom}; use steel::{gc::unsafe_erased_pointers::CustomReference, rvals::Custom};
use crate::{graphics::Rect, input::Event, Document, DocumentId, ViewId}; use crate::{
document::Mode, graphics::Rect, input::Event, Document, DocumentId, Editor, ViewId,
};
impl steel::gc::unsafe_erased_pointers::CustomReference for Editor {}
steel::custom_reference!(Editor);
impl steel::rvals::Custom for Mode {}
impl steel::rvals::Custom for Event {}
// Reference types along with value types - This should allow for having users // Reference types along with value types - This should allow for having users
impl CustomReference for Event {} impl CustomReference for Event {}
@ -9,7 +26,4 @@ impl Custom for crate::graphics::CursorKind {}
impl Custom for DocumentId {} impl Custom for DocumentId {}
impl Custom for ViewId {} impl Custom for ViewId {}
impl CustomReference for Document {} impl CustomReference for Document {}
pub fn document_id_to_usize(doc_id: &DocumentId) -> usize {
doc_id.0.into()
} }

@ -17,8 +17,6 @@ pub enum Event {
IdleTimeout, IdleTimeout,
} }
impl steel::rvals::Custom for Event {}
#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash)] #[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash)]
pub struct MouseEvent { pub struct MouseEvent {
/// The kind of mouse event that was caused. /// The kind of mouse event that was caused.

Loading…
Cancel
Save