Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-view/src/lib.rs')
-rw-r--r--helix-view/src/lib.rs48
1 files changed, 26 insertions, 22 deletions
diff --git a/helix-view/src/lib.rs b/helix-view/src/lib.rs
index a7e9f461..9cf36ae0 100644
--- a/helix-view/src/lib.rs
+++ b/helix-view/src/lib.rs
@@ -1,19 +1,20 @@
#[macro_use]
pub mod macros;
-pub mod annotations;
pub mod clipboard;
pub mod document;
pub mod editor;
-pub mod events;
-pub mod expansion;
+pub mod env;
pub mod graphics;
pub mod gutter;
-pub mod handlers;
+pub mod handlers {
+ pub mod dap;
+ pub mod lsp;
+}
+pub mod base64;
pub mod info;
pub mod input;
pub mod keyboard;
-pub mod register;
pub mod theme;
pub mod tree;
pub mod view;
@@ -47,12 +48,14 @@ pub enum Align {
Bottom,
}
-pub fn align_view(doc: &mut Document, view: &View, align: Align) {
- let doc_text = doc.text().slice(..);
- let cursor = doc.selection(view.id).primary().cursor(doc_text);
- let viewport = view.inner_area(doc);
- let last_line_height = viewport.height.saturating_sub(1);
- let mut view_offset = doc.view_offset(view.id);
+pub fn align_view(doc: &Document, view: &mut View, align: Align) {
+ let pos = doc
+ .selection(view.id)
+ .primary()
+ .cursor(doc.text().slice(..));
+ let line = doc.text().char_to_line(pos);
+
+ let last_line_height = view.inner_height().saturating_sub(1);
let relative = match align {
Align::Center => last_line_height / 2,
@@ -60,20 +63,21 @@ pub fn align_view(doc: &mut Document, view: &View, align: Align) {
Align::Bottom => last_line_height,
};
- let text_fmt = doc.text_format(viewport.width, None);
- (view_offset.anchor, view_offset.vertical_offset) = char_idx_at_visual_offset(
- doc_text,
- cursor,
- -(relative as isize),
- 0,
- &text_fmt,
- &view.text_annotations(doc, None),
- );
- doc.set_view_offset(view.id, view_offset);
+ view.offset.row = line.saturating_sub(relative);
+}
+
+/// Applies a [`helix_core::Transaction`] to the given [`Document`]
+/// and [`View`].
+pub fn apply_transaction(
+ transaction: &helix_core::Transaction,
+ doc: &mut Document,
+ view: &View,
+) -> bool {
+ // TODO remove this helper function. Just call Document::apply everywhere directly.
+ doc.apply(transaction, view.id)
}
pub use document::Document;
pub use editor::Editor;
-use helix_core::char_idx_at_visual_offset;
pub use theme::Theme;
pub use view::View;