panty 0.1.1

Fast gVim summoner
Documentation

use std::collections::LinkedList;
use std::sync::Arc;
use std::sync::Mutex;
use std::thread;
use x11::xlib::Window;

use gvim;


#[derive(Clone)]
pub struct Stock {
    pub window: Window,
    pub servername: String
}


pub type Stocks = Arc<Mutex<LinkedList<Stock>>>;



pub fn collect(stocks: Stocks, n: usize) {
    let names = gvim::new_servernames(n);
    for servername in names {
        let stocks = stocks.clone();
        thread::spawn(move || {
            let window = gvim::spawn_secretly(&servername);
            {
                let mut stocks = stocks.lock().unwrap();
                stocks.push_back(Stock {window: window, servername: servername});
            }
        });
    }
}


pub fn emit(stocks: Stocks) -> Stock {
    loop {
        {
            let mut m_stocks = stocks.lock().unwrap();
            match m_stocks.pop_front() {
                Some(stock) => return stock,
                None => ()
            }
        }
    }
}