diff --git a/README.md b/README.md index be1dab7..873fd0f 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ Commands: reset-everything Reset both pixels and brightness [aliases: r] pixels Commands for manipulating pixels [aliases: p] brightness Commands for manipulating the brightness [aliases: b] - text Commands for sending text to the screen [aliases: t] + stream Continuously send data to the display [aliases: s] help Print this message or the help of the given subcommand(s) Options: @@ -51,6 +51,59 @@ Options: -V, --version Print version ``` +### Stream + +``` +Continuously send data to the display + +Usage: servicepoint-cli stream + +Commands: + stdin Pipe text to the display, example: `journalctl | servicepoint-cli stream stdin` + screen Stream the default source to the display. On Linux Wayland, this pops up a screen or window chooser, but it also may directly start streaming your main screen. +``` + +#### Screen + +``` +Stream the default source to the display. On Linux Wayland, this pops up a screen or window chooser, but it also may directly start streaming your main screen. + +Usage: servicepoint-cli stream screen [OPTIONS] + +Options: + -p, --pointer Show mouse pointer in video feed + --no-hist Disable histogram correction + --no-blur Disable blur + --no-sharp Disable sharpening + --no-dither Disable dithering. Brightness will be adjusted so that around half of the pixels are on. + --no-spacers Do not remove the spacers from the image. + --no-aspect Do not keep aspect ratio when resizing. +``` + +#### Stdin + +``` +Pipe text to the display, example: `journalctl | servicepoint-cli stream stdin` + +Usage: servicepoint-cli stream stdin [OPTIONS] + +Options: + -s, --slow Wait for a short amount of time before sending the next line +``` + +### Brightness + +``` +Commands for manipulating the brightness + +Usage: servicepoint-cli brightness + +Commands: + max Reset brightness to the default (max) level [aliases: r, reset] + set Set one brightness for the whole screen [aliases: s] + min Set brightness to lowest possible level. +``` + ### Pixels ``` @@ -59,11 +112,10 @@ Commands for manipulating pixels Usage: servicepoint-cli pixels Commands: - off Reset all pixels to the default (off) state [aliases: r, reset, clear] - flip Invert the state of all pixels [aliases: f] - on Set all pixels to the on state - image Send an image file (e.g. jpeg or png) to the display. [aliases: i] - screen Stream the default screen capture source to the display. On Linux Wayland, this pops up a screen or window chooser, but it also may directly start streaming your main screen. [aliases: s] + off Reset all pixels to the default (off) state [aliases: r, reset, clear] + flip Invert the state of all pixels [aliases: f] + on Set all pixels to the on state + image Send an image file (e.g. jpeg or png) to the display. [aliases: i] ``` #### Image @@ -85,59 +137,6 @@ Options: --no-aspect Do not keep aspect ratio when resizing. ``` -#### Screen - -``` -Stream the default screen capture source to the display. On Linux Wayland, this pops up a screen or window chooser, but it also may directly start streaming your main screen. - -Usage: servicepoint-cli pixels screen [OPTIONS] - -Options: - -p, --pointer Show mouse pointer in video feed - --no-hist Disable histogram correction - --no-blur Disable blur - --no-sharp Disable sharpening - --no-dither Disable dithering. Brightness will be adjusted so that around half of the pixels are on. - --no-spacers Do not remove the spacers from the image. - --no-aspect Do not keep aspect ratio when resizing. -``` - -### Brightness - -``` -Commands for manipulating the brightness - -Usage: servicepoint-cli brightness - -Commands: - max Reset brightness to the default (max) level [aliases: r, reset] - set Set one brightness for the whole screen [aliases: s] - min Set brightness to lowest possible level. -``` - -### Text - -``` -Commands for sending text to the screen - -Usage: servicepoint-cli text - -Commands: - stdin Pipe text to the display, example: `journalctl | servicepoint-cli stream stdin` -``` - -#### Stdin - -``` -Pipe text to the display, example: `journalctl | servicepoint-cli stream stdin` - -Usage: servicepoint-cli stream stdin [OPTIONS] - -Options: - -s, --slow Wait for a short amount of time before sending the next line -``` - - ## Contributing If you have ideas on how to improve the code, add features or improve documentation feel free to open a pull request. diff --git a/src/cli.rs b/src/cli.rs index 365ff5a..a919664 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -40,10 +40,10 @@ pub enum Mode { #[clap(subcommand)] brightness_command: BrightnessCommand, }, - #[command(visible_alias = "t")] - Text { + #[command(visible_alias = "s")] + Stream { #[clap(subcommand)] - text_command: TextCommand, + stream_command: StreamCommand, }, } @@ -71,18 +71,6 @@ pub enum PixelCommand { #[command(flatten)] image_processing_options: ImageProcessingOptions, }, - #[command( - visible_alias = "s", - about = "Stream the default screen capture source to the display. \ - On Linux Wayland, this pops up a screen or window chooser, \ - but it also may directly start streaming your main screen." - )] - Screen { - #[command(flatten)] - stream_options: StreamScreenOptions, - #[command(flatten)] - image_processing: ImageProcessingOptions, - }, } #[derive(clap::Parser, std::fmt::Debug)] @@ -111,8 +99,8 @@ pub enum Protocol { } #[derive(clap::Parser, std::fmt::Debug)] -#[clap(about = "Commands for sending text to the screen")] -pub enum TextCommand { +#[clap(about = "Continuously send data to the display")] +pub enum StreamCommand { #[command( about = "Pipe text to the display, example: `journalctl | servicepoint-cli stream stdin`" )] @@ -125,6 +113,15 @@ pub enum TextCommand { )] slow: bool, }, + #[command(about = "Stream the default source to the display. \ + On Linux Wayland, this pops up a screen or window chooser, \ + but it also may directly start streaming your main screen.")] + Screen { + #[command(flatten)] + stream_options: StreamScreenOptions, + #[command(flatten)] + image_processing: ImageProcessingOptions, + }, } #[derive(clap::Parser, std::fmt::Debug, Clone)] diff --git a/src/main.rs b/src/main.rs index 4ca1df4..a23a130 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,9 @@ use crate::{ brightness::{brightness, brightness_set}, - cli::{Cli, Mode, Protocol}, + cli::{Cli, Mode, Protocol, StreamCommand}, pixels::{pixels, pixels_off}, - text::text + stream_stdin::stream_stdin, + stream_window::stream_window, }; use clap::Parser; use log::debug; @@ -15,7 +16,6 @@ mod ledwand_dither; mod pixels; mod stream_stdin; mod stream_window; -mod text; fn main() { let cli = Cli::parse(); @@ -36,7 +36,13 @@ pub fn execute_mode(mode: Mode, connection: Connection) { } Mode::Pixels { pixel_command } => pixels(&connection, pixel_command), Mode::Brightness { brightness_command } => brightness(&connection, brightness_command), - Mode::Text { text_command} => text(&connection, text_command), + Mode::Stream { stream_command } => match stream_command { + StreamCommand::Stdin { slow } => stream_stdin(connection, slow), + StreamCommand::Screen { + stream_options, + image_processing, + } => stream_window(&connection, stream_options, image_processing), + }, } } diff --git a/src/pixels.rs b/src/pixels.rs index 0f83151..c92be07 100644 --- a/src/pixels.rs +++ b/src/pixels.rs @@ -1,8 +1,5 @@ -use crate::{ - image_processing::ImageProcessingPipeline, - cli::{ImageProcessingOptions, PixelCommand, SendImageOptions}, - stream_window::stream_window -}; +use crate::cli::{ImageProcessingOptions, PixelCommand, SendImageOptions}; +use crate::image_processing::ImageProcessingPipeline; use log::info; use servicepoint::{BitVec, Command, CompressionCode, Connection, Origin, PIXEL_COUNT}; @@ -15,10 +12,6 @@ pub(crate) fn pixels(connection: &Connection, pixel_command: PixelCommand) { image_processing_options: processing_options, send_image_options: image_options, } => pixels_image(connection, image_options, processing_options), - PixelCommand::Screen { - stream_options, - image_processing, - } => stream_window(&connection, stream_options, image_processing), } } diff --git a/src/stream_stdin.rs b/src/stream_stdin.rs index 2551b70..82109ba 100644 --- a/src/stream_stdin.rs +++ b/src/stream_stdin.rs @@ -2,7 +2,7 @@ use log::warn; use servicepoint::*; use std::thread::sleep; -pub(crate) fn stream_stdin(connection: &Connection, slow: bool) { +pub(crate) fn stream_stdin(connection: Connection, slow: bool) { warn!("This mode will break when using multi-byte characters and does not support ANSI escape sequences yet."); let mut app = App { connection, @@ -13,14 +13,14 @@ pub(crate) fn stream_stdin(connection: &Connection, slow: bool) { app.run() } -struct App<'t> { - connection: &'t Connection, +struct App { + connection: Connection, mirror: CharGrid, y: usize, slow: bool, } -impl<'t> App<'t> { +impl App { fn run(&mut self) { self.connection .send(Command::Clear) @@ -63,9 +63,9 @@ impl<'t> App<'t> { fn send_mirror(&self) { self.connection - .send(Command::Utf8Data( + .send(Command::Cp437Data( Origin::ZERO, - self.mirror.clone(), + Cp437Grid::from(&self.mirror), )) .expect("couldn't send screen to display"); } diff --git a/src/text.rs b/src/text.rs deleted file mode 100644 index 247b9ad..0000000 --- a/src/text.rs +++ /dev/null @@ -1,7 +0,0 @@ -use servicepoint::Connection; -use crate::cli::TextCommand; -use crate::stream_stdin::stream_stdin; - -pub fn text(connection: &Connection, command: TextCommand) { - match command { TextCommand::Stdin { slow } => stream_stdin(connection, slow), } -}