From 4c98a351c9584421ce54d01799ca04910dc9a6b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E9=9B=85=20=C2=B7=20Misaki=20Masa?= Date: Wed, 13 Sep 2023 23:57:58 +0800 Subject: [PATCH 1/2] feat: show keywords when in search mode (#152) --- app/src/header/layout.rs | 8 ++++---- core/src/manager/tab.rs | 3 ++- shared/src/url.rs | 10 ++++++++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/app/src/header/layout.rs b/app/src/header/layout.rs index 15695166..4371b95f 100644 --- a/app/src/header/layout.rs +++ b/app/src/header/layout.rs @@ -19,11 +19,11 @@ impl<'a> Widget for Layout<'a> { .constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref()) .split(area); - let current = &self.cx.manager.current(); - let location = if current.cwd.is_search() { - format!("{} (search)", readable_path(¤t.cwd)) + let cwd = &self.cx.manager.current().cwd; + let location = if cwd.is_search() { + format!("{} (search: {})", readable_path(cwd), cwd.frag().unwrap()) } else { - readable_path(¤t.cwd) + readable_path(cwd) }; Paragraph::new(location).style(Style::new().fg(Color::Cyan)).render(chunks[0], buf); diff --git a/core/src/manager/tab.rs b/core/src/manager/tab.rs index 6e8b656a..b24fb4b2 100644 --- a/core/src/manager/tab.rs +++ b/core/src/manager/tab.rs @@ -289,7 +289,7 @@ impl Tab { handle.abort(); } - let cwd = self.current.cwd.to_search(); + let mut cwd = self.current.cwd.clone(); let hidden = self.show_hidden; self.search = Some(tokio::spawn(async move { @@ -297,6 +297,7 @@ impl Tab { bail!("canceled") }; + cwd = cwd.into_search(subject.clone()); let rx = if grep { external::rg(external::RgOpt { cwd: cwd.clone(), hidden, subject }) } else { diff --git a/shared/src/url.rs b/shared/src/url.rs index 9b5b340c..10e45db3 100644 --- a/shared/src/url.rs +++ b/shared/src/url.rs @@ -4,6 +4,7 @@ use std::{ffi::{OsStr, OsString}, fmt::{Debug, Formatter}, ops::{Deref, DerefMut pub struct Url { scheme: UrlScheme, path: PathBuf, + frag: Option, } #[derive(Clone, Copy, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] @@ -114,11 +115,12 @@ impl Url { pub fn is_search(&self) -> bool { self.scheme == UrlScheme::Search } #[inline] - pub fn to_search(&self) -> Self { self.clone().into_search() } + pub fn to_search(&self, frag: String) -> Self { self.clone().into_search(frag) } #[inline] - pub fn into_search(mut self) -> Self { + pub fn into_search(mut self, frag: String) -> Self { self.scheme = UrlScheme::Search; + self.frag = Some(frag); self } @@ -137,4 +139,8 @@ impl Url { // --- Path #[inline] pub fn set_path(&mut self, path: PathBuf) { self.path = path; } + + // --- Frag + #[inline] + pub fn frag(&self) -> Option<&str> { self.frag.as_deref() } } From 9c6b3c9d1d1763074341042ef0f74ab45bb56da1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nguy=E1=BB=85n=20=C4=90=E1=BB=A9c=20To=C3=A0n?= <33489972+ndtoan96@users.noreply.github.com> Date: Wed, 13 Sep 2023 23:01:16 +0700 Subject: [PATCH 2/2] feat: fallback to built-in highlighting if `jq` is not installed (#151) --- core/src/manager/preview/provider.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/src/manager/preview/provider.rs b/core/src/manager/preview/provider.rs index 4ac499db..3271b0ae 100644 --- a/core/src/manager/preview/provider.rs +++ b/core/src/manager/preview/provider.rs @@ -3,6 +3,7 @@ use std::{io::BufRead, path::Path, sync::atomic::{AtomicUsize, Ordering}}; use adaptor::ADAPTOR; use anyhow::anyhow; use config::{MANAGER, PREVIEW}; +use futures::TryFutureExt; use shared::{MimeKind, PeekError}; use syntect::{easy::HighlightFile, util::as_24_bit_terminal_escaped}; use tokio::fs; @@ -69,7 +70,9 @@ impl Provider { } pub(super) async fn json(path: &Path, skip: usize) -> Result { - external::jq(path, skip, MANAGER.layout.preview_height()).await + external::jq(path, skip, MANAGER.layout.preview_height()) + .or_else(|_| Provider::highlight(path, skip)) + .await } pub(super) async fn archive(path: &Path, skip: usize) -> Result {