12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- use comm;
- use comm::Channel;
- use config::Config;
- use std::io;
- pub fn external(tx: &Channel, _cfg: &Config) {
- let mut line = String::new();
- loop {
- line.clear();
- io::stdin().read_line(&mut line).ok().expect("Failed to read line");
- let kind = line.remove(0);
- let line = line.trim();
- match kind {
- 'T' => comm::send(tx, "title", line),
- 'M' => comm::send(tx, "cmus", &format!("%{{A:cmus:}}{}%{{A}}", line)),
- 'W' => comm::send(tx, "desktops", &parse_bspwm(line)),
- _ => ()
- }
- }
- }
- fn parse_bspwm(line: &str) -> String {
- let mut out = String::new();
- let mut monitor_count = 0;
- let mut monitor_selected = false;
- let elems = line.split(':');
- for elem in elems {
- let mut chars = elem.chars();
- let kind = chars.next().unwrap();
- let name = chars.collect::<String>();
- if kind == 'M' || kind == 'm' {
- out = format!("{}%{{S{num}}}", out, num = monitor_count);
- monitor_count += 1;
- monitor_selected = kind.is_uppercase();
- }
- else if kind == 'L' {
- }
- else if kind == 'G' {
- }
- else if kind == 'T' {
- }
- else {
- let desktop = format!("%{{A:w{name}:}} {name} %{{A}}", name = name);
- if kind.is_uppercase() {
- if monitor_selected {
- out = format!("{}%{{B#66CC66}}{}%{{B-}}", out, desktop);
- }
- else {
- out = format!("{}%{{B#666666}}{}%{{B-}}", out, desktop);
- }
- }
- else if kind == 'U' || kind == 'u' {
- out = format!("{}%{{B#CC0033}}{}%{{B-}}", out, desktop);
- }
- else if kind == 'O' || kind == 'o' {
- out = format!("{}{}", out, desktop);
- }
- }
- }
- out
- }
|