Commit 9b8912a81188690277f8add60b236015174da8c9
terminal beats
Michael Williams committed on 5/12/2018, 2:33:00 PMParent: 2138ff1d0d8e0e410cbf1d5d0676dfd960019e0c
Files changed
Cargo.lock | changed |
Cargo.toml | changed |
src/main.rs | changed |
README.md | added |
Cargo.lock | ||
---|---|---|
@@ -1,4 +1,37 @@ | ||
1 | 1 … | [[package]] |
2 … | +name = "gcc" | |
3 … | +version = "0.3.54" | |
4 … | +source = "registry+https://github.com/rust-lang/crates.io-index" | |
5 … | + | |
6 … | +[[package]] | |
7 … | +name = "libc" | |
8 … | +version = "0.2.40" | |
9 … | +source = "registry+https://github.com/rust-lang/crates.io-index" | |
10 … | + | |
11 … | +[[package]] | |
2 | 12 … | name = "metronome" |
3 | 13 … | version = "0.1.0" |
14 … | +dependencies = [ | |
15 … | + "ncurses 5.91.0 (registry+https://github.com/rust-lang/crates.io-index)", | |
16 … | +] | |
4 | 17 … | |
18 … | +[[package]] | |
19 … | +name = "ncurses" | |
20 … | +version = "5.91.0" | |
21 … | +source = "registry+https://github.com/rust-lang/crates.io-index" | |
22 … | +dependencies = [ | |
23 … | + "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)", | |
24 … | + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", | |
25 … | + "pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", | |
26 … | +] | |
27 … | + | |
28 … | +[[package]] | |
29 … | +name = "pkg-config" | |
30 … | +version = "0.3.11" | |
31 … | +source = "registry+https://github.com/rust-lang/crates.io-index" | |
32 … | + | |
33 … | +[metadata] | |
34 … | +"checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" | |
35 … | +"checksum libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)" = "6fd41f331ac7c5b8ac259b8bf82c75c0fb2e469bbf37d2becbba9a6a2221965b" | |
36 … | +"checksum ncurses 5.91.0 (registry+https://github.com/rust-lang/crates.io-index)" = "431cc11a5225e21cb85ea479858ac2e0b3c7a67c9506016cd8818de15dcdc8f1" | |
37 … | +"checksum pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "110d5ee3593dbb73f56294327fe5668bcc997897097cbc76b51e7aed3f52452f" |
Cargo.toml | ||
---|---|---|
@@ -3,4 +3,10 @@ | ||
3 | 3 … | version = "0.1.0" |
4 | 4 … | authors = ["Michael Williams <michael.williams@enspiral.com>"] |
5 | 5 … | |
6 | 6 … | [dependencies] |
7 … | +# ctrlc = { version = "3.0", features = ["termination"] } | |
8 … | +# ncurses = { version = "5.91.0", features = "wide" } | |
9 … | + | |
10 … | +[dependencies.ncurses] | |
11 … | +version = "5.91.0" | |
12 … | +features = ["wide"] |
src/main.rs | ||
---|---|---|
@@ -1,28 +1,114 @@ | ||
1 … | +/* | |
1 | 2 … | use std::io; |
2 | 3 … | use std::io::prelude::*; |
3 | 4 … | |
5 … | +use std::sync::mpsc; | |
4 | 6 … | use std::thread::sleep; |
5 | 7 … | use std::time::{Duration}; |
6 | 8 … | |
7 | 9 … | fn main () { |
10 … | + let metronome = Metronone::new(); | |
8 | 11 … | metronome().unwrap(); |
9 | 12 … | } |
10 | 13 … | |
11 | -fn metronome () -> io::Result<()> { | |
12 | - let stdin = io::stdin(); | |
13 | - let mut buffer = vec![0_u8; 2_usize.pow(8)]; | |
14 … | +pub struct Metronone {} | |
14 | 15 … | |
16 … | +impl Metronome () { | |
17 … | + pub fn new () -> <()> { | |
18 … | + let stdin = io::stdin(); | |
19 … | + let mut buffer = vec![0_u8; 2_usize.pow(8)]; | |
20 … | + | |
21 … | + loop { | |
22 … | + let mut handle = stdin.lock(); | |
23 … | + match handle.read(&mut buffer) { | |
24 … | + Ok(num_bytes) => { | |
25 … | + println!("{} bytes read", num_bytes); | |
26 … | + let string = String::from_utf8(buffer.clone()).unwrap(); | |
27 … | + }, | |
28 … | + Err(error) => println!("error: {}", error), | |
29 … | + } | |
30 … | + | |
31 … | + sleep(Duration::new(0, 30 * 1000 * 1000)); | |
32 … | + } | |
33 … | + } | |
34 … | +*/ | |
35 … | + | |
36 … | +/* | |
37 … | + Copyright © 2013 Free Software Foundation, Inc | |
38 … | + See licensing in LICENSE file | |
39 … | + File: examples/ex_7.rs | |
40 … | + Author: Jesse 'Jeaye' Wilkerson | |
41 … | + Description: | |
42 … | + Basic input and attribute example, using the Unicode-aware get_wch functions. | |
43 … | +*/ | |
44 … | + | |
45 … | +extern crate ncurses; | |
46 … | +// extern crate ctrlc; | |
47 … | + | |
48 … | +use std::char; | |
49 … | +use ncurses::{WchResult}; | |
50 … | +// use std::sync::atomic::{AtomicBool, Ordering}; | |
51 … | +// use std::sync::Arc; | |
52 … | + | |
53 … | + | |
54 … | +// https://unicode.org/charts/PDF/U0000.pdf | |
55 … | +static CHAR_SPACE: u32 = 0x0020; | |
56 … | +static CHAR_RETURN: u32 = 0x000D; | |
57 … | +static CHAR_NEWLINE: u32 = 0x000A; | |
58 … | + | |
59 … | +fn main() { | |
60 … | + // let locale_conf = LcCategory::all; | |
61 … | + // setlocale(locale_conf, "en_US.UTF-8"); | |
62 … | + | |
63 … | + /* Setup ncurses. */ | |
64 … | + ncurses::initscr(); | |
65 … | + | |
66 … | + /* Enable mouse events. */ | |
67 … | + ncurses::mousemask(ncurses::ALL_MOUSE_EVENTS as ncurses::mmask_t, None); | |
68 … | + | |
69 … | + /* Allow for extended keyboard (like F1). */ | |
70 … | + ncurses::keypad(ncurses::stdscr(), true); | |
71 … | + ncurses::noecho(); | |
72 … | + | |
73 … | + | |
74 … | + /* | |
75 … | + let running = Arc::new(AtomicBool::new(true)); | |
76 … | + let r = running.clone(); | |
77 … | + ctrlc::set_handler(move || { | |
78 … | + r.store(false, Ordering::SeqCst); | |
79 … | + }).expect("Error setting Ctrl-C handler"); | |
80 … | + | |
81 … | + while running.load(Ordering::SeqCst) { | |
82 … | + */ | |
15 | 83 … | loop { |
16 | - let mut handle = stdin.lock(); | |
84 … | + let ch = ncurses::wget_wch(ncurses::stdscr()); | |
17 | 85 … | |
18 | - match handle.read(&mut buffer) { | |
19 | - Ok(num_bytes) => { | |
20 | - println!("{} bytes read", num_bytes); | |
21 | - let string = String::from_utf8(buffer.clone()).unwrap(); | |
22 | - }, | |
23 | - Err(error) => println!("error: {}", error), | |
86 … | + match ch { | |
87 … | + Some(WchResult::KeyCode(ncurses::KEY_MOUSE)) => { | |
88 … | + tap(); | |
89 … | + } | |
90 … | + | |
91 … | + // https://github.com/jeaye/ncurses-rs/blob/master/src/constants.rs | |
92 … | + Some(WchResult::KeyCode(_)) => {} | |
93 … | + | |
94 … | + // Some(WchResult::KeyCode(KEY_ENTER)) => beat(), | |
95 … | + Some(WchResult::Char(ch)) => { | |
96 … | + if (ch == CHAR_SPACE || ch == CHAR_NEWLINE) { | |
97 … | + tap(); | |
98 … | + } | |
99 … | + } | |
100 … | + | |
101 … | + None => {} | |
24 | 102 … | } |
25 | 103 … | |
26 | - sleep(Duration::new(0, 30 * 1000)); | |
104 … | + ncurses::refresh(); | |
27 | 105 … | } |
106 … | + | |
107 … | + ncurses::endwin(); | |
28 | 108 … | } |
109 … | + | |
110 … | +fn tap () { | |
111 … | + ncurses::attron(ncurses::A_BOLD()); | |
112 … | + ncurses::printw("\nBeat"); | |
113 … | + ncurses::attroff(ncurses::A_BOLD()); | |
114 … | +} |
Built with git-ssb-web