building up buffer
This commit is contained in:
parent
6f792ff546
commit
5b49d25d9e
20
.replit
Normal file
20
.replit
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
run = "cargo run"
|
||||||
|
hidden = ["target"]
|
||||||
|
|
||||||
|
[packager]
|
||||||
|
language = "rust"
|
||||||
|
|
||||||
|
[packager.features]
|
||||||
|
packageSearch = true
|
||||||
|
|
||||||
|
[languages.rust]
|
||||||
|
pattern = "**/*.rs"
|
||||||
|
|
||||||
|
[languages.rust.languageServer]
|
||||||
|
start = "rust-analyzer"
|
||||||
|
|
||||||
|
[nix]
|
||||||
|
channel = "stable-22_05"
|
||||||
|
|
||||||
|
[gitHubImport]
|
||||||
|
requiredFiles = [".replit", "replit.nix"]
|
9
replit.nix
Normal file
9
replit.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ pkgs }: {
|
||||||
|
deps = [
|
||||||
|
pkgs.rustc
|
||||||
|
pkgs.rustfmt
|
||||||
|
pkgs.cargo
|
||||||
|
pkgs.cargo-edit
|
||||||
|
pkgs.rust-analyzer
|
||||||
|
];
|
||||||
|
}
|
30
src/core/buffer.rs
Normal file
30
src/core/buffer.rs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
use std::path::Path;
|
||||||
|
use std::env;
|
||||||
|
|
||||||
|
pub struct Buffer<'a> {
|
||||||
|
pub data: Vec<String>,
|
||||||
|
pub name: &'a str,
|
||||||
|
pub path: &'a Path,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Buffer<'a> {
|
||||||
|
pub fn new(file_path: &'a str) -> Self {
|
||||||
|
let name = if file_path.len() > 0 {
|
||||||
|
Path::new(file_path).file_name().unwrap().to_str().unwrap()
|
||||||
|
} else {
|
||||||
|
"[No Name]"
|
||||||
|
};
|
||||||
|
|
||||||
|
let path = if file_path.len() > 1 {
|
||||||
|
Path::new(file_path)
|
||||||
|
} else {
|
||||||
|
env::current_dir().unwrap().parent().unwrap().to_str()
|
||||||
|
};
|
||||||
|
|
||||||
|
Self {
|
||||||
|
data: vec![String::from("")],
|
||||||
|
name,
|
||||||
|
path,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
use crate::core::buffer::Buffer;
|
||||||
|
|
||||||
pub struct Config<'a> {
|
pub struct Config<'a> {
|
||||||
pub logo: &'a str,
|
pub logo: &'a str,
|
||||||
pub friendly_name: &'a str,
|
pub friendly_name: &'a str,
|
||||||
@ -12,12 +14,6 @@ impl<'a> Config<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Buffer<'a> {
|
|
||||||
pub data: Vec<String>,
|
|
||||||
pub name: &'a str,
|
|
||||||
pub path: &'a str,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
pub enum Mode {
|
pub enum Mode {
|
||||||
Normal,
|
Normal,
|
||||||
@ -39,20 +35,16 @@ impl Mode {
|
|||||||
|
|
||||||
pub struct Editor<'a> {
|
pub struct Editor<'a> {
|
||||||
pub config: Config<'a>,
|
pub config: Config<'a>,
|
||||||
pub buffer: Buffer<'a>,
|
pub buffer: Box<Buffer<'a>>,
|
||||||
pub cursors: Vec<i32>,
|
pub cursors: Vec<i32>,
|
||||||
pub mode: Mode,
|
pub mode: Mode,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Editor<'a> {
|
impl<'a> Editor<'a> {
|
||||||
pub fn new() -> Self {
|
pub fn new(file_path: &'a str) -> Self {
|
||||||
Editor {
|
Editor {
|
||||||
config: Config::new(),
|
config: Config::new(),
|
||||||
buffer: Buffer {
|
buffer: Box::new(Buffer::new(file_path)),
|
||||||
data: Vec::from([String::from("Hello"), String::from("World")]),
|
|
||||||
name: "[No Name]",
|
|
||||||
path: "/home/spy",
|
|
||||||
},
|
|
||||||
cursors: Vec::from([0]),
|
cursors: Vec::from([0]),
|
||||||
mode: Mode::Normal,
|
mode: Mode::Normal,
|
||||||
}
|
}
|
||||||
|
@ -1 +1,2 @@
|
|||||||
pub mod editor;
|
pub mod editor;
|
||||||
|
pub mod buffer;
|
||||||
|
15
src/main.rs
15
src/main.rs
@ -1,9 +1,22 @@
|
|||||||
mod core;
|
mod core;
|
||||||
mod terminal;
|
mod terminal;
|
||||||
mod tui;
|
mod tui;
|
||||||
|
use std::env;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let lambda = core::editor::Editor::new();
|
// Collect cli arguments
|
||||||
|
let args: Vec<String> = env::args().collect();
|
||||||
|
|
||||||
|
let file_path = if args.len() > 1 {
|
||||||
|
// Collect the file path
|
||||||
|
&args[1]
|
||||||
|
} else {
|
||||||
|
""
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let lambda = core::editor::Editor::new(file_path);
|
||||||
let mut screen = terminal::screen::Screen::new().unwrap();
|
let mut screen = terminal::screen::Screen::new().unwrap();
|
||||||
tui::ui::start(&mut screen, lambda);
|
tui::ui::start(&mut screen, lambda);
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,7 @@ pub fn draw(screen: &mut Screen, editor: &Editor) -> Result<(), ()> {
|
|||||||
mode_string.green().bold().reverse().to_string(),
|
mode_string.green().bold().reverse().to_string(),
|
||||||
Coords::from(x, status_height),
|
Coords::from(x, status_height),
|
||||||
);
|
);
|
||||||
|
|
||||||
// Calculate where to write the file name
|
// Calculate where to write the file name
|
||||||
let x = x + mode_string.len();
|
let x = x + mode_string.len();
|
||||||
// Write the current file name
|
// Write the current file name
|
||||||
|
Loading…
Reference in New Issue
Block a user