rsvim_core 0.1.2

The core library for RSVIM text editor.
Documentation
//! Command-line operations.

use crate::content::TextContents;
use crate::ui::tree::{Inodeable, Tree};
use crate::ui::viewport::Viewport;

use compact_str::CompactString;

pub fn cmdline_set_message(
  tree: &mut Tree,
  text_contents: &mut TextContents,
  payload: CompactString,
) {
  debug_assert!(tree.command_line().is_some());

  let message_text = text_contents.command_line_message_mut();
  message_text.clear();
  message_text.insert_at(0, 0, payload);

  let cmdline = tree.command_line_mut().unwrap();
  let opts = *cmdline.options();
  let actual_shape = *cmdline.message().actual_shape();

  let new_message_viewport =
    Viewport::to_arc(Viewport::view(&opts, message_text, &actual_shape, 0, 0));

  cmdline.set_message_viewport(new_message_viewport);
}

pub fn cmdline_clear_message(
  tree: &mut Tree,
  text_contents: &mut TextContents,
) {
  debug_assert!(tree.command_line().is_some());

  let message_text = text_contents.command_line_message_mut();
  message_text.clear();

  let cmdline = tree.command_line_mut().unwrap();
  let opts = *cmdline.options();
  let actual_shape = *cmdline.message().actual_shape();

  let new_message_viewport =
    Viewport::to_arc(Viewport::view(&opts, message_text, &actual_shape, 0, 0));

  cmdline.set_message_viewport(new_message_viewport);
}