mirror of
https://github.com/lotabout/skim.git
synced 2026-09-10 07:16:23 -04:00
[reader] insert new item directly in reader
This commit is contained in:
parent
4e6fc1a8c3
commit
cd048bd95a
13
src/main.rs
13
src/main.rs
|
|
@ -36,18 +36,19 @@ fn main() {
|
|||
|
||||
let mut model = Model::new(curse);
|
||||
let eb = Arc::new(EventBox::new());
|
||||
let (tx_source, rx_source) = channel();
|
||||
let (tx_matched, rx_matched) = channel();
|
||||
|
||||
let eb_clone_reader = eb.clone();
|
||||
let mut reader = Reader::new(Some(&"find ."), eb_clone_reader, tx_source);
|
||||
|
||||
let eb_matcher = Arc::new(EventBox::new());
|
||||
let eb_matcher_clone = eb_matcher.clone();
|
||||
let eb_clone_matcher = eb.clone();
|
||||
let items = model.items.clone();
|
||||
let mut matcher = Matcher::new(items, tx_matched, eb_matcher_clone, eb_clone_matcher);
|
||||
|
||||
let eb_clone_reader = eb.clone();
|
||||
let items = model.items.clone();
|
||||
let mut reader = Reader::new(Some(&"find ."), eb_clone_reader, items);
|
||||
|
||||
|
||||
let eb_clone_input = eb.clone();
|
||||
let mut input = Input::new(eb_clone_input);
|
||||
|
||||
|
|
@ -87,10 +88,6 @@ fn main() {
|
|||
match e {
|
||||
Event::EvReaderNewItem | Event::EvReaderFinished => {
|
||||
eb_matcher.set(Event::EvMatcherNewItem, Box::new(true));
|
||||
let mut items = model.items.write().unwrap();
|
||||
while let Ok(string) = rx_source.try_recv() {
|
||||
items.push(string);
|
||||
}
|
||||
}
|
||||
|
||||
Event::EvMatcherUpdateProcess => {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
extern crate libc;
|
||||
|
||||
use std::process::{Command, Stdio};
|
||||
use std::sync::Arc;
|
||||
use std::sync::{Arc, RwLock};
|
||||
use std::io::{stdin, BufRead, BufReader};
|
||||
use std::sync::mpsc::Sender;
|
||||
use std::error::Error;
|
||||
|
|
@ -15,13 +15,13 @@ use item::Item;
|
|||
pub struct Reader {
|
||||
cmd: Option<&'static str>, // command to invoke
|
||||
eb: Arc<EventBox<Event>>, // eventbox
|
||||
tx: Sender<Item>, // sender to send the string read from command output
|
||||
items: Arc<RwLock<Vec<Item>>>, // all items
|
||||
}
|
||||
|
||||
impl Reader {
|
||||
|
||||
pub fn new(cmd: Option<&'static str>, eb: Arc<EventBox<Event>>, tx: Sender<Item>) -> Self {
|
||||
Reader{cmd: cmd, eb: eb, tx: tx}
|
||||
pub fn new(cmd: Option<&'static str>, eb: Arc<EventBox<Event>>, items: Arc<RwLock<Vec<Item>>>) -> Self {
|
||||
Reader{cmd: cmd, eb: eb, items: items}
|
||||
}
|
||||
|
||||
// invoke find comand.
|
||||
|
|
@ -59,7 +59,8 @@ impl Reader {
|
|||
input.pop();
|
||||
}
|
||||
}
|
||||
let _ = self.tx.send(Item::new(input));
|
||||
let mut items = self.items.write().unwrap();
|
||||
items.push(Item::new(input));
|
||||
}
|
||||
Err(_err) => { break; }
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue