Something went wrong. Try again.
A post-modern development environment.
Something went wrong. Try again.
2.2 kB · 90 lines
Rust
at main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091#[macro_use]pub mod macros;
pub mod action;pub mod annotations;pub mod clipboard;pub mod document;pub mod editor;pub mod events;pub mod expansion;pub mod graphics;pub mod gutter;pub mod handlers;pub mod info;pub mod input;pub mod keyboard;pub mod register;pub mod theme;pub mod tree;pub mod view;
pub mod extension;
use std::num::NonZeroUsize;
// uses NonZeroUsize so Option<DocumentId> use a byte rather than two#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]pub struct DocumentId(NonZeroUsize);
impl Default for DocumentId { fn default() -> DocumentId { DocumentId(NonZeroUsize::new(1).unwrap()) }}
#[cfg(test)]impl DocumentId { /// Constructs a `DocumentId` with the given non-zero id, for use in tests /// that need several distinct ids without spinning up an `Editor`. pub(crate) fn new(id: usize) -> DocumentId { DocumentId(NonZeroUsize::new(id).expect("document id must be non-zero")) }}
impl std::fmt::Display for DocumentId { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.write_fmt(format_args!("{}", self.0)) }}
slotmap::new_key_type! { pub struct ViewId;}
pub enum Align { Top, Center, 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);
let relative = match align { Align::Center => last_line_height / 2, Align::Top => 0, 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);}
pub use document::Document;pub use editor::Editor;use helix_core::char_idx_at_visual_offset;pub use theme::Theme;pub use view::View;