diff options
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | README.md | 25 | ||||
-rw-r--r-- | src/epub.rs | 1 | ||||
-rw-r--r-- | src/main.rs | 6 |
4 files changed, 26 insertions, 8 deletions
@@ -4,6 +4,8 @@ version = "0.1.0" authors = ["James Campos <james.r.campos@gmail.com>"] edition = "2018" license = "MIT" +description = "Terminal Epub reader" +repository = "https://github.com/aeosynth/bk" [dependencies] crossterm = "0.17" @@ -1,13 +1,30 @@ # bk -bk is a WIP terminal epub reader. currently only tested on linux. +bk is a terminal Epub reader. Currently only Linux is tested, but macOS and Windows support is planned. -# install +# Usage cargo install --path . + bk path/to/epub -# usage +Type <kbd>F1</kbd> or <kbd>?</kbd> to see the commands. -type <kbd>?</kbd> to see the commands +Running `bk` without an argument will load the most recent Epub. + +# Features +- Single binary, instant startup +- Epub 2/3 support +- Incremental search +- Vim bindings + +# TODO +- macOS, Windows +- configuration +- links +- better unicode support +- better html rendering +- mobi? +- css? +- gui? # inspiration <https://github.com/wustho/epr> diff --git a/src/epub.rs b/src/epub.rs index f80e2bc..90a53b5 100644 --- a/src/epub.rs +++ b/src/epub.rs @@ -28,7 +28,6 @@ impl Epub { // UnknownEntityReference for HTML entities let doc = Document::parse(&xml).unwrap(); let body = doc.root_element().last_element_child().unwrap(); - // XXX no initial string, buf.last is none let mut chapter = String::new(); Epub::render(&mut chapter, body); epub.chapters.push(chapter); diff --git a/src/main.rs b/src/main.rs index 9c27522..ee50d78 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,7 +9,6 @@ use crossterm::{ }; mod epub; -use epub::Epub; fn wrap(text: &str, width: usize) -> Vec<(usize, String)> { // XXX assumes a char is 1 unit wide @@ -301,9 +300,10 @@ struct Bk<'a> { } impl Bk<'_> { - fn new(epub: Epub, line: &Position, max_width: u16) -> Self { + fn new(epub: epub::Epub, line: &Position, max_width: u16) -> Self { let (cols, rows) = terminal::size().unwrap(); let width = std::cmp::min(cols, max_width) as usize; + let mut chapters = Vec::with_capacity(epub.chapters.len()); for text in epub.chapters { let wrap = wrap(&text, width); @@ -467,7 +467,7 @@ fn main() { std::process::exit(1); }); - let epub = Epub::new(&line.0).unwrap_or_else(|e| { + let epub = epub::Epub::new(&line.0).unwrap_or_else(|e| { println!("error reading epub: {}", e); std::process::exit(1); }); |