Skip to content

Commit 16794da

Browse files
committed
[sweep] every sweep command accepts uid: WindowId
1 parent 1a1e5a9 commit 16794da

File tree

7 files changed

+407
-261
lines changed

7 files changed

+407
-261
lines changed

chronicler-cli/src/navigator.rs

+34-20
Original file line numberDiff line numberDiff line change
@@ -174,23 +174,29 @@ impl Navigator {
174174
groups_cache: Default::default(),
175175
};
176176
let sweep = Sweep::new(ctx, options)?;
177-
sweep.scorer_by_name(Some("substr".to_owned())).await?;
177+
sweep
178+
.scorer_by_name(None, Some("substr".to_owned()))
179+
.await?;
178180
sweep.bind(
181+
None,
179182
"tab".parse()?,
180183
TAG_COMPLETE.to_owned(),
181184
"Complete string or follow directory".to_owned(),
182185
);
183186
sweep.bind(
187+
None,
184188
"ctrl+i".parse()?,
185189
TAG_COMPLETE.to_owned(),
186190
"Complete string or follow directory".to_owned(),
187191
);
188192
sweep.bind(
193+
None,
189194
"ctrl+r".parse()?,
190195
TAG_COMMAND_HISTORY_MODE.to_owned(),
191196
"Switch to command history view".to_owned(),
192197
);
193198
sweep.bind(
199+
None,
194200
"ctrl+f".parse()?,
195201
TAG_PATH_HISTORY_MODE.to_owned(),
196202
"Switch to path history view".to_owned(),
@@ -211,11 +217,11 @@ impl Navigator {
211217
if let Some(update_task) = self.update_task.take() {
212218
update_task.abort();
213219
}
214-
self.sweep.items_clear();
220+
self.sweep.items_clear(None);
215221
let sweep = self.sweep.clone();
216222
self.update_task = Some(
217223
tokio::spawn(async move {
218-
if let Err(error) = sweep.items_extend_stream(items).await {
224+
if let Err(error) = sweep.items_extend_stream(None, items).await {
219225
tracing::error!(?error, "[Navigator.list_update]");
220226
};
221227
})
@@ -225,7 +231,7 @@ impl Navigator {
225231

226232
async fn path_complete(&self) -> Result<Option<Box<dyn NavigatorMode>>, Error> {
227233
let (current, query) =
228-
tokio::try_join!(self.sweep.items_current(), self.sweep.query_get())?;
234+
tokio::try_join!(self.sweep.items_current(None), self.sweep.query_get(None))?;
229235

230236
if query.starts_with('~') || query.starts_with('/') {
231237
// navigate path from query string
@@ -258,7 +264,7 @@ impl Navigator {
258264
) -> Result<Vec<NavigatorItem>, Error> {
259265
mode.enter(self).await?;
260266
if let Some(query) = query {
261-
self.sweep.query_set(query);
267+
self.sweep.query_set(None, query);
262268
}
263269
while let Some(event) = self.sweep.next_event().await {
264270
match event {
@@ -320,19 +326,22 @@ impl NavigatorMode for CmdHistoryMode {
320326
async fn enter(&mut self, navigator: &mut Navigator) -> Result<(), Error> {
321327
navigator
322328
.sweep
323-
.prompt_set(Some("CMD".to_owned()), Some(CMD_HISTORY_ICON.clone()));
324-
navigator.sweep.keep_order(Some(true));
329+
.prompt_set(None, Some("CMD".to_owned()), Some(CMD_HISTORY_ICON.clone()));
330+
navigator.sweep.keep_order(None, Some(true));
325331
navigator.sweep.bind(
332+
None,
326333
"alt+g s".parse()?,
327334
TAG_GOTO_SESSION.to_owned(),
328335
"Go to session of the current command".to_owned(),
329336
);
330337
navigator.sweep.bind(
338+
None,
331339
"alt+g d".parse()?,
332340
TAG_GOTO_DIRECTORY.to_owned(),
333341
"Go to current working directory of the command".to_owned(),
334342
);
335343
navigator.sweep.bind(
344+
None,
336345
"alt+g c".parse()?,
337346
TAG_FILTER_CWD.to_owned(),
338347
"Keep only commands that were executed in the current directory".to_owned(),
@@ -373,7 +382,7 @@ impl NavigatorMode for CmdHistoryMode {
373382
async fn exit(&mut self, navigator: &mut Navigator) -> Result<(), Error> {
374383
navigator
375384
.sweep
376-
.bind("alt+g s".parse()?, String::new(), String::new());
385+
.bind(None, "alt+g s".parse()?, String::new(), String::new());
377386
Ok(())
378387
}
379388

@@ -385,7 +394,7 @@ impl NavigatorMode for CmdHistoryMode {
385394
match tag.as_str() {
386395
TAG_GOTO_SESSION => {
387396
let session = if self.session.is_none() {
388-
let current = navigator.sweep.items_current().await?;
397+
let current = navigator.sweep.items_current(None).await?;
389398
let Some(NavigatorItem::History(entry)) = current else {
390399
return Ok(None);
391400
};
@@ -406,7 +415,7 @@ impl NavigatorMode for CmdHistoryMode {
406415
Ok(Some(CmdHistoryMode::new(self.session.clone(), dir)))
407416
}
408417
TAG_GOTO_DIRECTORY => {
409-
let current = navigator.sweep.items_current().await?;
418+
let current = navigator.sweep.items_current(None).await?;
410419
let Some(NavigatorItem::History(entry)) = current else {
411420
return Ok(None);
412421
};
@@ -432,13 +441,16 @@ impl PathMode {
432441
#[async_trait]
433442
impl NavigatorMode for PathMode {
434443
async fn enter(&mut self, navigator: &mut Navigator) -> Result<(), Error> {
435-
navigator
436-
.sweep
437-
.prompt_set(Some(path_collapse(&self.path)), Some(PATH_NAV_ICON.clone()));
438-
navigator.sweep.keep_order(Some(true));
439-
navigator.sweep.query_set(self.query.clone());
444+
navigator.sweep.prompt_set(
445+
None,
446+
Some(path_collapse(&self.path)),
447+
Some(PATH_NAV_ICON.clone()),
448+
);
449+
navigator.sweep.keep_order(None, Some(true));
450+
navigator.sweep.query_set(None, self.query.clone());
440451

441452
navigator.sweep.bind(
453+
None,
442454
"backspace".parse()?,
443455
TAG_GOTO_PARENT.to_owned(),
444456
"Go to parent directory".to_owned(),
@@ -459,7 +471,7 @@ impl NavigatorMode for PathMode {
459471
async fn exit(&mut self, navigator: &mut Navigator) -> Result<(), Error> {
460472
navigator
461473
.sweep
462-
.bind("backspace".parse()?, String::new(), String::new());
474+
.bind(None, "backspace".parse()?, String::new(), String::new());
463475
Ok(())
464476
}
465477

@@ -495,10 +507,12 @@ impl PathHistoryMode {
495507
#[async_trait]
496508
impl NavigatorMode for PathHistoryMode {
497509
async fn enter(&mut self, navigator: &mut Navigator) -> Result<(), Error> {
498-
navigator
499-
.sweep
500-
.prompt_set(Some("PATH".to_owned()), Some(PATH_HISTORY_ICON.clone()));
501-
navigator.sweep.keep_order(Some(true));
510+
navigator.sweep.prompt_set(
511+
None,
512+
Some("PATH".to_owned()),
513+
Some(PATH_HISTORY_ICON.clone()),
514+
);
515+
navigator.sweep.keep_order(None, Some(true));
502516

503517
let mut history = Vec::new();
504518
// Add current directory as the first item

sweep-cli/src/main.rs

+10-10
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use surf_n_term::Glyph;
1616
use sweep::{
1717
common::{json_from_slice_seed, VecDeserializeSeed},
1818
Candidate, CandidateContext, FieldSelector, ProcessCommandBuilder, Sweep, SweepEvent,
19-
SweepLayout, SweepLayoutSize, SweepOptions, Theme, WindowId,
19+
SweepOptions, Theme, WindowId, WindowLayout, WindowLayoutSize,
2020
};
2121
use tokio::io::{AsyncRead, AsyncWrite, AsyncWriteExt};
2222
use tracing_subscriber::fmt::format::FmtSpan;
@@ -117,17 +117,17 @@ async fn main() -> Result<(), Error> {
117117
scorers: VecDeque::new(),
118118
layout: args.layout.unwrap_or_else(|| {
119119
if args.preview_builder.is_some() {
120-
SweepLayout::Full {
121-
height: SweepLayoutSize::Fraction(-0.3),
120+
WindowLayout::Full {
121+
height: WindowLayoutSize::Fraction(-0.3),
122122
}
123123
} else {
124-
SweepLayout::default()
124+
WindowLayout::default()
125125
}
126126
}),
127127
},
128128
)?;
129-
sweep.query_set(args.query.clone());
130-
sweep.scorer_by_name(Some(args.scorer)).await?;
129+
sweep.query_set(None, args.query.clone());
130+
sweep.scorer_by_name(None, Some(args.scorer)).await?;
131131
if let Some(preview_builder) = args.preview_builder {
132132
candidate_context.preview_set(preview_builder, sweep.waker());
133133
}
@@ -149,7 +149,7 @@ async fn main() -> Result<(), Error> {
149149
let seed = VecDeserializeSeed(&candidate_context);
150150
let candidates =
151151
json_from_slice_seed(seed, data.as_ref()).context("failed to parse input JSON")?;
152-
sweep.items_extend(candidates);
152+
sweep.items_extend(None, candidates);
153153
} else {
154154
let sweep = sweep.clone();
155155
let field_dilimiter = args.field_delimiter;
@@ -158,7 +158,7 @@ async fn main() -> Result<(), Error> {
158158
let candidates = Candidate::from_lines(input, field_dilimiter, field_selector);
159159
tokio::pin!(candidates);
160160
while let Some(candidates) = candidates.try_next().await? {
161-
sweep.items_extend(candidates);
161+
sweep.items_extend(None, candidates);
162162
}
163163
Ok::<_, Error>(())
164164
});
@@ -168,7 +168,7 @@ async fn main() -> Result<(), Error> {
168168
if items.is_empty() && !args.no_match_use_input {
169169
continue;
170170
}
171-
let input = sweep.query_get().await?;
171+
let input = sweep.query_get(None).await?;
172172
std::mem::drop(sweep); // cleanup terminal
173173
let result = if args.json {
174174
let mut result = serde_json::to_string(&items)?;
@@ -300,7 +300,7 @@ pub struct Args {
300300

301301
/// layout mode specified as `name(,attr=value)*`
302302
#[argh(option)]
303-
pub layout: Option<SweepLayout>,
303+
pub layout: Option<WindowLayout>,
304304

305305
/// show sweep version and quit
306306
#[argh(switch)]

sweep-lib/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub use candidate::{fields_view, Candidate, CandidateContext, Field, FieldRef, F
1818

1919
mod sweep;
2020
pub use crate::sweep::{
21-
sweep, Sweep, SweepEvent, SweepLayout, SweepLayoutSize, SweepOptions, WindowId,
21+
sweep, Sweep, SweepEvent, WindowLayout, WindowLayoutSize, SweepOptions, WindowId,
2222
PROMPT_DEFAULT_ICON,
2323
};
2424

0 commit comments

Comments
 (0)