summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorqkzk <qu3nt1n@gmail.com>2023-10-03 22:05:24 +0200
committerqkzk <qu3nt1n@gmail.com>2023-10-03 22:05:24 +0200
commit8756a0d61d636d7b00aeafa82c45cb9a3cda67ba (patch)
treeebbdaeb3bcd0e9a397d7ae713f19b090ee4759c2
parent2fe1d7d8efc2fefbc560151777131efad6772c25 (diff)
preview epub. Requires pandocv0.1.22-dev-ebook
-rw-r--r--Cargo.lock140
-rw-r--r--development.md1
-rw-r--r--src/preview.rs31
-rw-r--r--src/term_manager.rs6
4 files changed, 119 insertions, 59 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 9875848..a7d45c6 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -19,21 +19,20 @@ dependencies = [
[[package]]
name = "aes"
-version = "0.7.5"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
dependencies = [
"cfg-if",
"cipher",
"cpufeatures",
- "opaque-debug",
]
[[package]]
name = "aho-corasick"
-version = "0.7.20"
+version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab"
dependencies = [
"memchr",
]
@@ -94,7 +93,7 @@ checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -248,11 +247,12 @@ dependencies = [
[[package]]
name = "cipher"
-version = "0.3.0"
+version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
dependencies = [
- "generic-array",
+ "crypto-common",
+ "inout",
]
[[package]]
@@ -295,7 +295,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -500,7 +500,7 @@ dependencies = [
"proc-macro2",
"quote",
"scratch",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -517,7 +517,7 @@ checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -541,7 +541,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim 0.9.3",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -552,7 +552,7 @@ checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
dependencies = [
"darling_core",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -573,7 +573,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -586,7 +586,7 @@ dependencies = [
"derive_builder_core",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -598,7 +598,7 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -963,7 +963,7 @@ checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -1164,6 +1164,15 @@ dependencies = [
]
[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
name = "instant"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1376,9 +1385,9 @@ dependencies = [
[[package]]
name = "memchr"
-version = "2.5.0"
+version = "2.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
[[package]]
name = "memmap2"
@@ -1577,12 +1586,6 @@ dependencies = [
]
[[package]]
-name = "opaque-debug"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
-
-[[package]]
name = "ordered-float"
version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1687,9 +1690,9 @@ dependencies = [
[[package]]
name = "percent-encoding"
-version = "2.2.0"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
[[package]]
name = "pin-project-lite"
@@ -1762,7 +1765,7 @@ dependencies = [
"proc-macro-error-attr",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
"version_check",
]
@@ -1785,9 +1788,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
[[package]]
name = "proc-macro2"
-version = "1.0.51"
+version = "1.0.67"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6"
+checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328"
dependencies = [
"unicode-ident",
]
@@ -1803,9 +1806,9 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.23"
+version = "1.0.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
dependencies = [
"proc-macro2",
]
@@ -1925,13 +1928,25 @@ dependencies = [
[[package]]
name = "regex"
-version = "1.7.1"
+version = "1.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax 0.7.5",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
+checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9"
dependencies = [
"aho-corasick",
"memchr",
- "regex-syntax",
+ "regex-syntax 0.7.5",
]
[[package]]
@@ -1941,6 +1956,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
[[package]]
+name = "regex-syntax"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+
+[[package]]
name = "remove_dir_all"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2099,7 +2120,7 @@ checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2314,7 +2335,7 @@ dependencies = [
"quote",
"serde",
"serde_derive",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2330,7 +2351,7 @@ dependencies = [
"serde_derive",
"serde_json",
"sha1 0.6.1",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2382,7 +2403,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustversion",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2403,6 +2424,17 @@ dependencies = [
]
[[package]]
+name = "syn"
+version = "2.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
name = "syntect"
version = "5.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2416,7 +2448,7 @@ dependencies = [
"once_cell",
"onig",
"plist",
- "regex-syntax",
+ "regex-syntax 0.6.28",
"serde",
"serde_derive",
"serde_json",
@@ -2496,22 +2528,22 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "1.0.38"
+version = "1.0.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0"
+checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.38"
+version = "1.0.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
+checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.37",
]
[[package]]
@@ -2597,7 +2629,7 @@ dependencies = [
"proc-macro2",
"quote",
"standback",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2663,7 +2695,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2886,7 +2918,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
"wasm-bindgen-shared",
]
@@ -2908,7 +2940,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -3232,9 +3264,9 @@ dependencies = [
[[package]]
name = "xml-rs"
-version = "0.8.4"
+version = "0.8.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
+checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a"
[[package]]
name = "yaml-rust"
@@ -3247,9 +3279,9 @@ dependencies = [
[[package]]
name = "zip"
-version = "0.6.4"
+version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0445d0fbc924bb93539b4316c11afb121ea39296f99a3c4c9edad09e3658cdef"
+checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
dependencies = [
"aes",
"byteorder",
diff --git a/development.md b/development.md
index 33d79e4..5a73d7e 100644
--- a/development.md
+++ b/development.md
@@ -537,6 +537,7 @@ New view: Tree ! Toggle with 't', fold with 'z'. Navigate normally.
- [x] remove doublons from shortcut (Ctrl+g) "goto mode"
- [x] FIX: scrolling isn't smooth anymore
- [x] InputSimple is responsible of its help lines
+- [x] Preview epub. Requires pandoc.
- [ ] while second window is opened, if the selection is below half screen, it's not shown anymore.
Scroll to second element if needed
diff --git a/src/preview.rs b/src/preview.rs
index 2db36c8..db9b690 100644
--- a/src/preview.rs
+++ b/src/preview.rs
@@ -55,6 +55,7 @@ pub enum Preview {
pub enum TextKind {
HELP,
LOG,
+ EPUB,
#[default]
TEXTFILE,
}
@@ -109,6 +110,9 @@ impl Preview {
e if is_ext_doc(e) && is_program_in_path(PANDOC) => {
Ok(Self::doc(&file_info.path).context("Preview: Couldn't parse doc")?)
}
+ e if is_ext_epub(e) && is_program_in_path(PANDOC) => {
+ Ok(Self::epub(&file_info.path).context("Preview: Couldn't parse epub")?)
+ }
e => match Self::preview_syntaxed(e, &file_info.path) {
Some(syntaxed_preview) => Ok(syntaxed_preview),
None => Self::preview_text_or_binary(file_info),
@@ -203,6 +207,12 @@ impl Preview {
Self::ColoredText(ColoredText::new(output))
}
+ pub fn epub(path: &Path) -> Result<Self> {
+ Ok(Self::Text(
+ TextContent::epub(path).context("Couldn't read epub")?,
+ ))
+ }
+
/// Empty preview, holding nothing.
pub fn new_empty() -> Self {
Self::Empty
@@ -256,7 +266,7 @@ impl TextContent {
const SIZE_LIMIT: usize = 1048576;
fn help(help: &str) -> Self {
- let content: Vec<String> = help.split('\n').map(|s| s.to_owned()).collect();
+ let content: Vec<String> = help.lines().map(|line| line.to_owned()).collect();
Self {
kind: TextKind::HELP,
length: content.len(),
@@ -272,6 +282,21 @@ impl TextContent {
}
}
+ fn epub(path: &Path) -> Option<Self> {
+ let path_str = path.to_str()?;
+ let output = execute_and_capture_output_without_check(
+ PANDOC,
+ &["-s", "-t", "plain", "--", path_str],
+ )
+ .ok()?;
+ let content: Vec<String> = output.lines().map(|line| line.to_owned()).collect();
+ Some(Self {
+ kind: TextKind::EPUB,
+ length: content.len(),
+ content,
+ })
+ }
+
fn from_file(path: &Path) -> Result<Self> {
let content = read_nb_lines(path, Self::SIZE_LIMIT)?;
Ok(Self {
@@ -1049,6 +1074,10 @@ fn is_ext_doc(ext: &str) -> bool {
matches!(ext, "doc" | "docx" | "odt" | "sxw")
}
+fn is_ext_epub(ext: &str) -> bool {
+ ext == "epub"
+}
+
fn catch_unwind_silent<F: FnOnce() -> R + panic::UnwindSafe, R>(f: F) -> std::thread::Result<R> {
let prev_hook = panic::take_hook();
panic::set_hook(Box::new(|_| {}));
diff --git a/src/term_manager.rs b/src/term_manager.rs
index 95df8d2..d0f269e 100644
--- a/src/term_manager.rs
+++ b/src/term_manager.rs
@@ -264,13 +264,11 @@ impl<'a> WinMain<'a> {
fn default_preview_first_line(&self, tab: &Tab) -> Vec<String> {
match tab.path_content.selected() {
Some(fileinfo) => {
- let mut strings = vec![
- " Preview ".to_owned(),
- format!(" {} ", fileinfo.path.to_string_lossy()),
- ];
+ let mut strings = vec![" Preview ".to_owned()];
if !tab.preview.is_empty() {
strings.push(format!(" {} / {} ", tab.window.bottom, tab.preview.len()));
};
+ strings.push(format!(" {} ", fileinfo.path.to_string_lossy()));
strings
}
None => vec!["".to_owned()],