From c5a41244b4bd7575448b9ce75281cf3d9db843f2 Mon Sep 17 00:00:00 2001 From: stjet <49297268+stjet@users.noreply.github.com> Date: Mon, 21 Apr 2025 05:51:07 +0000 Subject: [PATCH 1/7] handle tty raw mode ourselves --- Cargo.toml | 2 +- linux/src/keys.rs | 1 + linux/src/lib.rs | 2 +- linux/src/raw.rs | 65 +++++++++++++++++++++++++++++++++++++++++++++++ src/bin/main.rs | 19 +++++++------- 5 files changed, 78 insertions(+), 11 deletions(-) create mode 100644 linux/src/keys.rs create mode 100644 linux/src/raw.rs diff --git a/Cargo.toml b/Cargo.toml index fcb18be..57e098c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ default-run = "ming" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [workspace] -members = ["linux"] +members = [ "linux" ] [build-dependencies] bmp-rust = "0.5.0" diff --git a/linux/src/keys.rs b/linux/src/keys.rs new file mode 100644 index 0000000..ab0c014 --- /dev/null +++ b/linux/src/keys.rs @@ -0,0 +1 @@ +// \ No newline at end of file diff --git a/linux/src/lib.rs b/linux/src/lib.rs index 049ad2d..138fb7b 100644 --- a/linux/src/lib.rs +++ b/linux/src/lib.rs @@ -1,2 +1,2 @@ pub mod fb; - +pub mod raw; diff --git a/linux/src/raw.rs b/linux/src/raw.rs new file mode 100644 index 0000000..e75e737 --- /dev/null +++ b/linux/src/raw.rs @@ -0,0 +1,65 @@ +use std::io::Stdout; +use std::mem::zeroed; +use std::os::fd::AsRawFd; + +use libc::{ cfmakeraw, c_int, tcgetattr, tcsetattr, termios, TCSAFLUSH }; + +//https://viewsourcecode.org/snaptoken/kilo/02.enteringRawMode.html +//on TCSAFLUSH: "The TCSAFLUSH argument specifies when to apply the change: in this case, it waits for all pending output to be written to the terminal, and also discards any input that hasn't been read." + +//https://www.man7.org/linux/man-pages/man3/termios.3.html +//(use cfmakeraw instead doing all those bitwise stuff manually) + +//enter and exit tty raw mode + +pub struct RawStdout { + pub stdout: Stdout, + old_termios: termios, +} + +impl RawStdout { + pub fn new(stdout: Stdout) -> Self { + RawStdout { + stdout, + old_termios: unsafe { zeroed() }, + } + } + + pub fn get_termios(raw_fd: c_int) -> Result { + let mut termios_struct: termios = unsafe { zeroed() }; + let result = unsafe { + tcgetattr(raw_fd, &mut termios_struct) + }; + if result != -1 { + Ok(termios_struct) + } else { + Err(()) + } + } + + pub fn enter_raw_mode(&mut self) -> Result<(), ()> { + let raw_fd = self.stdout.as_raw_fd(); + let mut termios_struct = Self::get_termios(raw_fd)?; + self.old_termios = termios_struct; + let result = unsafe { + cfmakeraw(&mut termios_struct); + tcsetattr(raw_fd, TCSAFLUSH, &mut termios_struct) + }; + if result != -1 { + Ok(()) + } else { + Err(()) + } + } + + pub fn exit_raw_mode(&mut self) -> Result<(), ()> { + let result = unsafe { + tcsetattr(self.stdout.as_raw_fd(), TCSAFLUSH, &mut self.old_termios) + }; + if result != -1 { + Ok(()) + } else { + Err(()) + } + } +} diff --git a/src/bin/main.rs b/src/bin/main.rs index 4c09208..abf8280 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -7,8 +7,8 @@ use std::process::exit; use std::env; use linux::fb::Framebuffer; +use linux::raw::RawStdout; use termion::input::TermRead; -use termion::raw::IntoRawMode; use termion::event::Key; use ming_wm_lib::window_manager_types::KeyChar; @@ -73,13 +73,14 @@ fn init(framebuffer: Framebuffer, framebuffer_info: FramebufferInfo) { let mut wm: WindowManager = WindowManager::new(writer, framebuffer, dimensions, rotate, grayscale); - let mut stdout = stdout().into_raw_mode().unwrap(); + let mut stdout = RawStdout::new(stdout()); + stdout.enter_raw_mode().unwrap(); - write!(stdout, "{}", CLEAR_ALL).unwrap(); + write!(stdout.stdout, "{}", CLEAR_ALL).unwrap(); - write!(stdout, "{}", HIDE_CURSOR).unwrap(); + write!(stdout.stdout, "{}", HIDE_CURSOR).unwrap(); - stdout.flush().unwrap(); + stdout.stdout.flush().unwrap(); wm.draw(None, false); @@ -154,13 +155,13 @@ fn init(framebuffer: Framebuffer, framebuffer_info: FramebufferInfo) { ThreadMessage::KeyChar(kc) => wm.handle_message(WindowManagerMessage::KeyChar(kc.clone())), ThreadMessage::Touch(x, y) => wm.handle_message(WindowManagerMessage::Touch(x, y)), ThreadMessage::Clear => { - write!(stdout, "{}", CLEAR_ALL).unwrap(); - stdout.flush().unwrap(); + write!(stdout.stdout, "{}", CLEAR_ALL).unwrap(); + stdout.stdout.flush().unwrap(); }, ThreadMessage::Exit => { if !wm.locked { - write!(stdout, "{}", SHOW_CURSOR).unwrap(); - stdout.suspend_raw_mode().unwrap(); + write!(stdout.stdout, "{}", SHOW_CURSOR).unwrap(); + stdout.exit_raw_mode().unwrap(); exit(0); } }, From 667b4cd2d9dabcd6625eaad5294f4a2ed007d8cc Mon Sep 17 00:00:00 2001 From: stjet <49297268+stjet@users.noreply.github.com> Date: Mon, 21 Apr 2025 06:57:42 +0000 Subject: [PATCH 2/7] change project structure to make more sense (move wm only stuff to wm dir) --- Cargo.toml | 14 +++++--------- ming-wm-lib/Cargo.toml | 2 +- .../src}/components/highlight_button.rs | 8 ++++---- {src => ming-wm-lib/src}/components/mod.rs | 6 +++--- .../src}/components/paragraph.rs | 11 +++++------ .../src}/components/press_button.rs | 8 ++++---- .../src}/components/toggle_button.rs | 8 ++++---- ming-wm-lib/src/lib.rs | 1 + ming-wm-lib/src/utils.rs | 13 +++++++++++++ src/bin/audio_player.rs | 3 +-- src/bin/{main.rs => wm.rs} | 18 +++++++++++------- wm/Cargo.toml | 14 ++++++++++++++ {linux => wm/linux}/Cargo.toml | 0 {linux => wm/linux}/src/fb.rs | 0 {linux => wm/linux}/src/keys.rs | 0 {linux => wm/linux}/src/lib.rs | 0 {linux => wm/linux}/src/raw.rs | 0 {src => wm/src}/essential/about.rs | 4 ++-- .../src}/essential/desktop_background.rs | 0 {src => wm/src}/essential/help.rs | 4 ++-- {src => wm/src}/essential/lock_screen.rs | 8 ++++---- {src => wm/src}/essential/mod.rs | 0 {src => wm/src}/essential/onscreen_keyboard.rs | 4 ++-- {src => wm/src}/essential/start_menu.rs | 4 ++-- {src => wm/src}/essential/taskbar.rs | 4 ++-- .../src}/essential/workspace_indicator.rs | 0 {src => wm/src}/framebuffer.rs | 0 {src => wm/src}/fs.rs | 14 -------------- {src => wm/src}/lib.rs | 4 +++- {src => wm/src}/proxy_window_like.rs | 0 {src => wm/src}/window_manager.rs | 6 ++++-- 31 files changed, 87 insertions(+), 71 deletions(-) rename {src => ming-wm-lib/src}/components/highlight_button.rs (91%) rename {src => ming-wm-lib/src}/components/mod.rs (81%) rename {src => ming-wm-lib/src}/components/paragraph.rs (90%) rename {src => ming-wm-lib/src}/components/press_button.rs (90%) rename {src => ming-wm-lib/src}/components/toggle_button.rs (92%) rename src/bin/{main.rs => wm.rs} (93%) create mode 100644 wm/Cargo.toml rename {linux => wm/linux}/Cargo.toml (100%) rename {linux => wm/linux}/src/fb.rs (100%) rename {linux => wm/linux}/src/keys.rs (100%) rename {linux => wm/linux}/src/lib.rs (100%) rename {linux => wm/linux}/src/raw.rs (100%) rename {src => wm/src}/essential/about.rs (95%) rename {src => wm/src}/essential/desktop_background.rs (100%) rename {src => wm/src}/essential/help.rs (97%) rename {src => wm/src}/essential/lock_screen.rs (95%) rename {src => wm/src}/essential/mod.rs (100%) rename {src => wm/src}/essential/onscreen_keyboard.rs (98%) rename {src => wm/src}/essential/start_menu.rs (98%) rename {src => wm/src}/essential/taskbar.rs (97%) rename {src => wm/src}/essential/workspace_indicator.rs (100%) rename {src => wm/src}/framebuffer.rs (100%) rename {src => wm/src}/fs.rs (88%) rename {src => wm/src}/lib.rs (74%) rename {src => wm/src}/proxy_window_like.rs (100%) rename {src => wm/src}/window_manager.rs (99%) diff --git a/Cargo.toml b/Cargo.toml index 57e098c..889c445 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ default-run = "ming" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [workspace] -members = [ "linux" ] +members = [ "wm", "wm/linux" ] [build-dependencies] bmp-rust = "0.5.0" @@ -17,20 +17,16 @@ blake2 = { version = "0.10.6", default-features = false } [dependencies] ming-wm-lib = { path = "ming-wm-lib" } -blake2 = { version = "0.10.6", default-features = false } -linux = { path = "linux" } -termion = { version = "4.0.3", optional = true } +wm = { path = "wm", optional = true } rodio = { version = "0.19.0", default-features = false, features = [ "flac", "mp3", "symphonia-vorbis", "wav" ], optional = true } rand = { version = "0.9.0", default-features = false, features = [ "small_rng" ], optional = true } id3 = { version = "1.10.0", optional = true } mp4ameta = { version = "0.11.0", optional = true } metaflac = { version = "0.2.5", optional = true } -bmp-rust = "0.5.0" pty-process = { version = "0.5.1", optional = true } [features] -default = [ "main", "terminal" ] -main = [ "termion" ] +default = [ "wm", "terminal" ] terminal = [ "pty-process" ] audio_player = [ "id3", "mp4ameta", "metaflac", "rand", "rodio" ] @@ -39,8 +35,8 @@ lto = true [[bin]] name = "ming" -path = "src/bin/main.rs" -required-features = [ "main" ] +path = "src/bin/wm.rs" +required-features = [ "wm" ] [[bin]] name = "mingFiles_Audio_Player" diff --git a/ming-wm-lib/Cargo.toml b/ming-wm-lib/Cargo.toml index 99c25f9..c821a1c 100644 --- a/ming-wm-lib/Cargo.toml +++ b/ming-wm-lib/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ming-wm-lib" -version = "0.1.6" +version = "0.1.7" repository = "https://github.com/stjet/ming-wm" description = "library for building windows for ming-wm in rust" readme = "README.md" diff --git a/src/components/highlight_button.rs b/ming-wm-lib/src/components/highlight_button.rs similarity index 91% rename from src/components/highlight_button.rs rename to ming-wm-lib/src/components/highlight_button.rs index e00368d..4f9cfa6 100644 --- a/src/components/highlight_button.rs +++ b/ming-wm-lib/src/components/highlight_button.rs @@ -2,10 +2,10 @@ use std::vec; use std::vec::Vec; use crate::components::Component; -use ming_wm_lib::framebuffer_types::{ Dimensions, Point }; -use ming_wm_lib::themes::ThemeInfo; -use ming_wm_lib::messages::WindowMessage; -use ming_wm_lib::window_manager_types::DrawInstructions; +use crate::framebuffer_types::{ Dimensions, Point }; +use crate::themes::ThemeInfo; +use crate::messages::WindowMessage; +use crate::window_manager_types::DrawInstructions; pub struct HighlightButton { name_: String, diff --git a/src/components/mod.rs b/ming-wm-lib/src/components/mod.rs similarity index 81% rename from src/components/mod.rs rename to ming-wm-lib/src/components/mod.rs index 4a64068..a9e1e43 100644 --- a/src/components/mod.rs +++ b/ming-wm-lib/src/components/mod.rs @@ -1,8 +1,8 @@ use std::vec::Vec; -use ming_wm_lib::themes::ThemeInfo; -use ming_wm_lib::messages::WindowMessage; -use ming_wm_lib::window_manager_types::DrawInstructions; +use crate::themes::ThemeInfo; +use crate::messages::WindowMessage; +use crate::window_manager_types::DrawInstructions; pub mod toggle_button; pub mod highlight_button; diff --git a/src/components/paragraph.rs b/ming-wm-lib/src/components/paragraph.rs similarity index 90% rename from src/components/paragraph.rs rename to ming-wm-lib/src/components/paragraph.rs index 0102fea..19b3366 100644 --- a/src/components/paragraph.rs +++ b/ming-wm-lib/src/components/paragraph.rs @@ -1,12 +1,11 @@ use std::vec; use std::vec::Vec; - -use ming_wm_lib::framebuffer_types::{ Dimensions, Point }; -use ming_wm_lib::themes::ThemeInfo; -use ming_wm_lib::messages::WindowMessage; -use ming_wm_lib::window_manager_types::DrawInstructions; -use ming_wm_lib::utils::calc_actual_lines; +use crate::framebuffer_types::{ Dimensions, Point }; +use crate::themes::ThemeInfo; +use crate::messages::WindowMessage; +use crate::window_manager_types::DrawInstructions; +use crate::utils::calc_actual_lines; use crate::components::Component; const MONO_WIDTH: u8 = 10; diff --git a/src/components/press_button.rs b/ming-wm-lib/src/components/press_button.rs similarity index 90% rename from src/components/press_button.rs rename to ming-wm-lib/src/components/press_button.rs index 8151db9..d907779 100644 --- a/src/components/press_button.rs +++ b/ming-wm-lib/src/components/press_button.rs @@ -2,10 +2,10 @@ use std::vec; use std::vec::Vec; use crate::components::Component; -use ming_wm_lib::framebuffer_types::{ Dimensions, Point }; -use ming_wm_lib::themes::ThemeInfo; -use ming_wm_lib::messages::WindowMessage; -use ming_wm_lib::window_manager_types::DrawInstructions; +use crate::framebuffer_types::{ Dimensions, Point }; +use crate::themes::ThemeInfo; +use crate::messages::WindowMessage; +use crate::window_manager_types::DrawInstructions; const MONO_WIDTH: u8 = 10; diff --git a/src/components/toggle_button.rs b/ming-wm-lib/src/components/toggle_button.rs similarity index 92% rename from src/components/toggle_button.rs rename to ming-wm-lib/src/components/toggle_button.rs index 105258c..dce7653 100644 --- a/src/components/toggle_button.rs +++ b/ming-wm-lib/src/components/toggle_button.rs @@ -2,10 +2,10 @@ use std::vec; use std::vec::Vec; use crate::components::Component; -use ming_wm_lib::framebuffer_types::{ Dimensions, Point }; -use ming_wm_lib::themes::ThemeInfo; -use ming_wm_lib::messages::WindowMessage; -use ming_wm_lib::window_manager_types::DrawInstructions; +use crate::framebuffer_types::{ Dimensions, Point }; +use crate::themes::ThemeInfo; +use crate::messages::WindowMessage; +use crate::window_manager_types::DrawInstructions; pub struct ToggleButton { name_: String, diff --git a/ming-wm-lib/src/lib.rs b/ming-wm-lib/src/lib.rs index 5ff514f..96cb963 100644 --- a/ming-wm-lib/src/lib.rs +++ b/ming-wm-lib/src/lib.rs @@ -4,6 +4,7 @@ pub mod themes; pub mod serialize; pub mod messages; pub mod ipc; +pub mod components; pub mod dirs; pub mod utils; pub mod logging; diff --git a/ming-wm-lib/src/utils.rs b/ming-wm-lib/src/utils.rs index e32a4d8..68f4dd3 100644 --- a/ming-wm-lib/src/utils.rs +++ b/ming-wm-lib/src/utils.rs @@ -214,3 +214,16 @@ pub fn path_autocomplete(current_path: &str, partial_path: &str) -> Option Vec { + let mut files = Vec::new(); + for entry in read_dir(dir).unwrap() { + let path = entry.unwrap().path(); + if path.is_dir() { + files.extend(get_all_files(path)); + } else { + files.push(path); + } + } + files +} diff --git a/src/bin/audio_player.rs b/src/bin/audio_player.rs index e940b98..e560293 100644 --- a/src/bin/audio_player.rs +++ b/src/bin/audio_player.rs @@ -17,10 +17,9 @@ use ming_wm_lib::window_manager_types::{ DrawInstructions, WindowLike, WindowLik use ming_wm_lib::messages::{ WindowMessage, WindowMessageResponse }; use ming_wm_lib::framebuffer_types::Dimensions; use ming_wm_lib::themes::ThemeInfo; -use ming_wm_lib::utils::{ concat_paths, path_autocomplete, format_seconds, Substring }; +use ming_wm_lib::utils::{ concat_paths, get_all_files, path_autocomplete, format_seconds, Substring }; use ming_wm_lib::dirs::home; use ming_wm_lib::ipc::listen; -use ming_wm::fs::get_all_files; fn get_artist(path: &PathBuf) -> Option { let ext = path.extension().unwrap(); diff --git a/src/bin/main.rs b/src/bin/wm.rs similarity index 93% rename from src/bin/main.rs rename to src/bin/wm.rs index abf8280..b639d13 100644 --- a/src/bin/main.rs +++ b/src/bin/wm.rs @@ -6,15 +6,19 @@ use std::io::{ stdin, stdout, BufReader, BufRead, Write }; use std::process::exit; use std::env; -use linux::fb::Framebuffer; -use linux::raw::RawStdout; -use termion::input::TermRead; -use termion::event::Key; +//termion is an external dep, will be removed eventually +use wm::termion::input::TermRead; +use wm::termion::event::Key; + +use wm::linux::fb::Framebuffer; +use wm::linux::raw::RawStdout; +use wm::framebuffer::{ FramebufferWriter, FramebufferInfo }; +use wm::window_manager::WindowManager; use ming_wm_lib::window_manager_types::KeyChar; use ming_wm_lib::messages::*; -use ming_wm::framebuffer::{ FramebufferWriter, FramebufferInfo }; -use ming_wm::window_manager::WindowManager; + +include!(concat!(env!("OUT_DIR"), "/password.rs")); const CLEAR_ALL: &'static str = "\x1b[2J"; const HIDE_CURSOR: &'static str = "\x1b[?25l"; @@ -71,7 +75,7 @@ fn init(framebuffer: Framebuffer, framebuffer_info: FramebufferInfo) { writer.init(framebuffer_info.clone()); - let mut wm: WindowManager = WindowManager::new(writer, framebuffer, dimensions, rotate, grayscale); + let mut wm: WindowManager = WindowManager::new(writer, framebuffer, dimensions, rotate, grayscale, PASSWORD_HASH); let mut stdout = RawStdout::new(stdout()); stdout.enter_raw_mode().unwrap(); diff --git a/wm/Cargo.toml b/wm/Cargo.toml new file mode 100644 index 0000000..8f99de7 --- /dev/null +++ b/wm/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "wm" +version = "1.0.3" +repository = "https://github.com/stjet/ming-wm" +license = "GPL-3.0-or-later" +edition = "2021" + +[dependencies] +ming-wm-lib = { path = "../ming-wm-lib" } +linux = { path = "linux" } +blake2 = { version = "0.10.6", default-features = false } +termion = { version = "4.0.3" } +bmp-rust = "0.5.0" + diff --git a/linux/Cargo.toml b/wm/linux/Cargo.toml similarity index 100% rename from linux/Cargo.toml rename to wm/linux/Cargo.toml diff --git a/linux/src/fb.rs b/wm/linux/src/fb.rs similarity index 100% rename from linux/src/fb.rs rename to wm/linux/src/fb.rs diff --git a/linux/src/keys.rs b/wm/linux/src/keys.rs similarity index 100% rename from linux/src/keys.rs rename to wm/linux/src/keys.rs diff --git a/linux/src/lib.rs b/wm/linux/src/lib.rs similarity index 100% rename from linux/src/lib.rs rename to wm/linux/src/lib.rs diff --git a/linux/src/raw.rs b/wm/linux/src/raw.rs similarity index 100% rename from linux/src/raw.rs rename to wm/linux/src/raw.rs diff --git a/src/essential/about.rs b/wm/src/essential/about.rs similarity index 95% rename from src/essential/about.rs rename to wm/src/essential/about.rs index fd00b48..b2bf7f1 100644 --- a/src/essential/about.rs +++ b/wm/src/essential/about.rs @@ -7,8 +7,8 @@ use ming_wm_lib::messages::{ WindowMessage, WindowMessageResponse }; use ming_wm_lib::framebuffer_types::Dimensions; use ming_wm_lib::themes::ThemeInfo; use ming_wm_lib::dirs::exe_dir; -use crate::components::Component; -use crate::components::paragraph::Paragraph; +use ming_wm_lib::components::Component; +use ming_wm_lib::components::paragraph::Paragraph; pub struct About { dimensions: Dimensions, diff --git a/src/essential/desktop_background.rs b/wm/src/essential/desktop_background.rs similarity index 100% rename from src/essential/desktop_background.rs rename to wm/src/essential/desktop_background.rs diff --git a/src/essential/help.rs b/wm/src/essential/help.rs similarity index 97% rename from src/essential/help.rs rename to wm/src/essential/help.rs index 9e5786c..c4ddcbf 100644 --- a/src/essential/help.rs +++ b/wm/src/essential/help.rs @@ -8,8 +8,8 @@ use ming_wm_lib::messages::{ WindowMessage, WindowMessageResponse }; use ming_wm_lib::dirs::exe_dir; use ming_wm_lib::framebuffer_types::Dimensions; use ming_wm_lib::themes::ThemeInfo; -use crate::components::paragraph::Paragraph; -use crate::components::Component; +use ming_wm_lib::components::paragraph::Paragraph; +use ming_wm_lib::components::Component; pub struct Help { dimensions: Dimensions, diff --git a/src/essential/lock_screen.rs b/wm/src/essential/lock_screen.rs similarity index 95% rename from src/essential/lock_screen.rs rename to wm/src/essential/lock_screen.rs index dc42165..a508a87 100644 --- a/src/essential/lock_screen.rs +++ b/wm/src/essential/lock_screen.rs @@ -7,13 +7,12 @@ use ming_wm_lib::messages::{ WindowMessage, WindowMessageResponse, WindowManager use ming_wm_lib::window_manager_types::{ DrawInstructions, WindowLike, WindowLikeType }; use blake2::{ Blake2b512, Digest }; -include!(concat!(env!("OUT_DIR"), "/password.rs")); - //const PASSWORD_HASH: [u8; 64] = [220, 88, 183, 188, 240, 27, 107, 181, 58, 191, 198, 170, 114, 38, 7, 148, 6, 179, 75, 128, 231, 171, 172, 220, 85, 38, 36, 113, 116, 146, 70, 197, 163, 179, 158, 192, 130, 53, 247, 48, 47, 209, 95, 96, 179, 211, 4, 122, 254, 127, 21, 165, 139, 199, 151, 226, 216, 176, 123, 41, 194, 221, 58, 69]; pub struct LockScreen { dimensions: Dimensions, input_password: String, + password_hash: [u8; 64], } impl WindowLike for LockScreen { @@ -28,7 +27,7 @@ impl WindowLike for LockScreen { //check password let mut hasher = Blake2b512::new(); hasher.update((self.input_password.clone() + "salt?sorrycryptographers").as_bytes()); - if hasher.finalize() == PASSWORD_HASH.into() { + if hasher.finalize() == self.password_hash.into() { WindowMessageResponse::Request(WindowManagerRequest::Unlock) } else { self.input_password = String::new(); @@ -73,10 +72,11 @@ impl WindowLike for LockScreen { } impl LockScreen { - pub fn new() -> Self { + pub fn new(password_hash: [u8; 64]) -> Self { Self { dimensions: [0, 0], input_password: String::new(), + password_hash, } } } diff --git a/src/essential/mod.rs b/wm/src/essential/mod.rs similarity index 100% rename from src/essential/mod.rs rename to wm/src/essential/mod.rs diff --git a/src/essential/onscreen_keyboard.rs b/wm/src/essential/onscreen_keyboard.rs similarity index 98% rename from src/essential/onscreen_keyboard.rs rename to wm/src/essential/onscreen_keyboard.rs index 3284677..68ac6a7 100644 --- a/src/essential/onscreen_keyboard.rs +++ b/wm/src/essential/onscreen_keyboard.rs @@ -7,8 +7,8 @@ use ming_wm_lib::messages::{ WindowMessage, WindowMessageResponse, WindowManager use ming_wm_lib::framebuffer_types::Dimensions; use ming_wm_lib::themes::ThemeInfo; use ming_wm_lib::utils::point_inside; -use crate::components::Component; -use crate::components::press_button::PressButton; +use ming_wm_lib::components::Component; +use ming_wm_lib::components::press_button::PressButton; //seems like framebuffer only updates if (real) key is pressed... //on mobile, volume down button seems to work but is annoying diff --git a/src/essential/start_menu.rs b/wm/src/essential/start_menu.rs similarity index 98% rename from src/essential/start_menu.rs rename to wm/src/essential/start_menu.rs index 30e517b..972e928 100644 --- a/src/essential/start_menu.rs +++ b/wm/src/essential/start_menu.rs @@ -7,9 +7,9 @@ use ming_wm_lib::messages::{ WindowMessage, WindowMessageResponse, WindowManager use ming_wm_lib::framebuffer_types::Dimensions; use ming_wm_lib::themes::ThemeInfo; use ming_wm_lib::dirs::exe_dir; +use ming_wm_lib::components::Component; +use ming_wm_lib::components::highlight_button::HighlightButton; use crate::fs::{ ExeWindowInfos, get_all_executable_windows }; -use crate::components::Component; -use crate::components::highlight_button::HighlightButton; static CATEGORIES: [&'static str; 9] = ["About", "Utils", "Games", "Editing", "Files", "Internet", "Misc", "Help", "Lock"]; diff --git a/src/essential/taskbar.rs b/wm/src/essential/taskbar.rs similarity index 97% rename from src/essential/taskbar.rs rename to wm/src/essential/taskbar.rs index 478eace..f806590 100644 --- a/src/essential/taskbar.rs +++ b/wm/src/essential/taskbar.rs @@ -6,8 +6,8 @@ use ming_wm_lib::window_manager_types::{ DrawInstructions, WindowLike, WindowLik use ming_wm_lib::messages::{ WindowMessage, WindowMessageResponse, WindowManagerRequest, ShortcutType, InfoType, WindowsVec }; use ming_wm_lib::framebuffer_types::Dimensions; use ming_wm_lib::themes::ThemeInfo; -use crate::components::Component; -use crate::components::toggle_button::ToggleButton; +use ming_wm_lib::components::Component; +use ming_wm_lib::components::toggle_button::ToggleButton; const PADDING: usize = 4; const META_WIDTH: usize = 175; //of the window button diff --git a/src/essential/workspace_indicator.rs b/wm/src/essential/workspace_indicator.rs similarity index 100% rename from src/essential/workspace_indicator.rs rename to wm/src/essential/workspace_indicator.rs diff --git a/src/framebuffer.rs b/wm/src/framebuffer.rs similarity index 100% rename from src/framebuffer.rs rename to wm/src/framebuffer.rs diff --git a/src/fs.rs b/wm/src/fs.rs similarity index 88% rename from src/fs.rs rename to wm/src/fs.rs index 2b9e0c5..30a3185 100644 --- a/src/fs.rs +++ b/wm/src/fs.rs @@ -1,5 +1,4 @@ use std::fs::{ read_dir, File }; -use std::path::PathBuf; use std::io::Read; use std::collections::HashMap; @@ -34,19 +33,6 @@ pub fn get_font_char_from_fonts(fonts: &[String], c: char) -> (char, Vec get_font_char(&p, '?').unwrap_or(('?', vec![vec![0]], 0)) } -pub fn get_all_files(dir: PathBuf) -> Vec { - let mut files = Vec::new(); - for entry in read_dir(dir).unwrap() { - let path = entry.unwrap().path(); - if path.is_dir() { - files.extend(get_all_files(path)); - } else { - files.push(path); - } - } - files -} - //Category, Vec pub type ExeWindowInfos = HashMap>; diff --git a/src/lib.rs b/wm/src/lib.rs similarity index 74% rename from src/lib.rs rename to wm/src/lib.rs index 6564cee..4b3edaa 100644 --- a/src/lib.rs +++ b/wm/src/lib.rs @@ -1,6 +1,8 @@ +pub use linux; +pub use termion; + pub mod framebuffer; pub mod window_manager; -pub mod components; pub mod fs; mod proxy_window_like; mod essential; diff --git a/src/proxy_window_like.rs b/wm/src/proxy_window_like.rs similarity index 100% rename from src/proxy_window_like.rs rename to wm/src/proxy_window_like.rs diff --git a/src/window_manager.rs b/wm/src/window_manager.rs similarity index 99% rename from src/window_manager.rs rename to wm/src/window_manager.rs index 0b5d09c..272d568 100644 --- a/src/window_manager.rs +++ b/wm/src/window_manager.rs @@ -65,12 +65,13 @@ pub struct WindowManager { current_workspace: u8, framebuffer: Framebuffer, clipboard: Option, + password_hash: [u8; 64], } //1 is up, 2 is down impl WindowManager { - pub fn new(writer: FramebufferWriter, framebuffer: Framebuffer, dimensions: Dimensions, rotate: bool, grayscale: bool) -> Self { + pub fn new(writer: FramebufferWriter, framebuffer: Framebuffer, dimensions: Dimensions, rotate: bool, grayscale: bool, password_hash: [u8; 64]) -> Self { //println!("bg: {}x{}", dimensions[0], dimensions[1] - TASKBAR_HEIGHT - INDICATOR_HEIGHT); let mut wm = WindowManager { writer: RefCell::new(writer), @@ -86,6 +87,7 @@ impl WindowManager { current_workspace: 0, framebuffer, clipboard: None, + password_hash, }; wm.lock(); wm.change_theme(); @@ -136,7 +138,7 @@ impl WindowManager { fn lock(&mut self) { self.locked = true; self.window_infos = Vec::new(); - self.add_window_like(Box::new(LockScreen::new()), [0, 0], None); + self.add_window_like(Box::new(LockScreen::new(self.password_hash)), [0, 0], None); } fn unlock(&mut self) { From 7c6a7d6b6d8c33f0b4ccde797976068771f32cdc Mon Sep 17 00:00:00 2001 From: stjet <49297268+stjet@users.noreply.github.com> Date: Fri, 25 Apr 2025 15:01:20 +0000 Subject: [PATCH 3/7] remove termion: inhouse key parsing replace blake2 with sha512, fix C and D in romono, minor terminal and audio player fixes --- Cargo.toml | 2 +- bmps/ming1440x842.bmp | Bin 4849974 -> 0 bytes bmps/nimbus-romono/C0.bmp | Bin 582 -> 534 bytes bmps/nimbus-romono/D0.bmp | Bin 630 -> 534 bytes build.rs | 9 ++-- src/bin/audio_player.rs | 4 +- src/bin/terminal.rs | 3 ++ src/bin/wm.rs | 19 +++---- wm/Cargo.toml | 4 +- wm/linux/src/keys.rs | 90 +++++++++++++++++++++++++++++++- wm/linux/src/lib.rs | 1 + wm/src/essential/lock_screen.rs | 6 +-- wm/src/lib.rs | 1 - 13 files changed, 112 insertions(+), 27 deletions(-) delete mode 100644 bmps/ming1440x842.bmp diff --git a/Cargo.toml b/Cargo.toml index 889c445..abd30d0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ members = [ "wm", "wm/linux" ] [build-dependencies] bmp-rust = "0.5.0" -blake2 = { version = "0.10.6", default-features = false } +bitcoin_hashes = { version = "0.16.0", default-features = false } [dependencies] ming-wm-lib = { path = "ming-wm-lib" } diff --git a/bmps/ming1440x842.bmp b/bmps/ming1440x842.bmp deleted file mode 100644 index 1b4d34f5e216df30e1df0e95a24134803659fffe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4849974 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 z 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 LEhoJeg&7msf>IsGBXPl$(W4GrR(m2kCk0I@0 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
WHcA)rg`m^a*_+6%Y)Ixt&4Gz^JmHwQhc`Z&} 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%0AN@MVRz9ER(FHNx$+PQ_X7wXF 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 z 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 literal 582 zcmZwEuMa^{7{>8KM36AarCk4jViU}afaLFxC7US}?PgUH=mMG`kxUc(2xe2S@3C{X zcXrP9Io|uc&&=Fvs~%OqQ{wg!M*>=m`bSLV&Nb6Hnr_3jml?f}>H0Ev&GcTTn|JMHMsIJr z6`8wcdVSL!y7o4sqyK09%FehWZFlmMyosgGI0c-b-&ygm*Cl&mZgb`sde~uu71o$x GfZz)O^7x_v diff --git a/bmps/nimbus-romono/D0.bmp b/bmps/nimbus-romono/D0.bmp index c4f25c6e59abe5cd9d6ce4814eb58e038756b482..707771287b98e48eb7328e15a679a3e49dc9fe5f 100644 GIT binary patch literal 534 zcmaiwu?oU45QbC5MVuW)Hz(1>sgt{#ui=xp=?DYr4t)X9N02TGYW%KT zp(v8Tcj^84(u4H+)q+V^m)e9fR3I>Qsxg-!-M-71;0+EESi%lg(00z54Ehs@x0Z}m zggHE5kn;}oBG_EkpqDu^qo((NJk4Vqxj*uFTlHd(H&rk3cvii;$IIrPJ>FISXa9Me kx72yEchoy-Hq*XDAA!8zP_qf&FOYY-!2}Q7alsxj=`()j^?8$w1pAixl+Ld$^YSk*+%5AFvTr;r z^EtBe{f=dRqVwZ_d2)F?aYjPt2khm2U8!|X{;`G|cJS_twS@yDFZZ&*3R_H3Mc6#& E102rcdH?_b diff --git a/build.rs b/build.rs index 9f598a4..825ba13 100644 --- a/build.rs +++ b/build.rs @@ -4,7 +4,7 @@ use std::env; use std::path::Path; use std::process::Command; -use blake2::{ Blake2b512, Digest }; +use bitcoin_hashes::Sha512; use bmp_rust::bmp::BMP; fn font_chars_to_alphas(dir: &str) { @@ -47,12 +47,11 @@ fn font_chars_to_alphas(dir: &str) { fn main() { //hash + "salt" password and add to build - let password = read_to_string("password.env").unwrap_or("password".to_string()).replace("\n", "") + "salt?sorrycryptographers"; - let mut hasher = Blake2b512::new(); - hasher.update(password.as_bytes()); + let password = read_to_string("password.env").unwrap_or("password".to_string()).replace("\n", "") + "salt?sorrycryptographers!1!"; + let hash = Sha512::hash(password.as_bytes()).to_byte_array(); let out_dir = env::var_os("OUT_DIR").unwrap(); let dest_path = Path::new(&out_dir).join("password.rs"); - write(&dest_path, format!("pub const PASSWORD_HASH: [u8; 64] = {:?};", hasher.finalize())).unwrap(); + write(&dest_path, format!("pub const PASSWORD_HASH: [u8; 64] = {:?};", hash)).unwrap(); //process bmps for entry in read_dir("./bmps").unwrap() { let path = entry.unwrap().path(); diff --git a/src/bin/audio_player.rs b/src/bin/audio_player.rs index e560293..5c3101a 100644 --- a/src/bin/audio_player.rs +++ b/src/bin/audio_player.rs @@ -109,8 +109,10 @@ impl WindowLike for AudioPlayer { } else { return WindowMessageResponse::DoNothing; } - } else { + } else if key_press.is_regular() { self.command += &key_press.key.to_string(); + } else { + return WindowMessageResponse::DoNothing } WindowMessageResponse::JustRedraw }, diff --git a/src/bin/terminal.rs b/src/bin/terminal.rs index c87f249..912e8bc 100644 --- a/src/bin/terminal.rs +++ b/src/bin/terminal.rs @@ -150,6 +150,9 @@ impl WindowLike for Terminal { } else if char::from(ci) == '\r' { //for now, ignore // + } else if char::from(ci) == '\t' { + //for now, ignore + // } else { self.process_current_line.push(ci); } diff --git a/src/bin/wm.rs b/src/bin/wm.rs index b639d13..4327cdc 100644 --- a/src/bin/wm.rs +++ b/src/bin/wm.rs @@ -6,12 +6,9 @@ use std::io::{ stdin, stdout, BufReader, BufRead, Write }; use std::process::exit; use std::env; -//termion is an external dep, will be removed eventually -use wm::termion::input::TermRead; -use wm::termion::event::Key; - use wm::linux::fb::Framebuffer; use wm::linux::raw::RawStdout; +use wm::linux::keys::{ RawStdin, Key }; use wm::framebuffer::{ FramebufferWriter, FramebufferInfo }; use wm::window_manager::WindowManager; @@ -34,10 +31,10 @@ fn key_to_char(key: Key) -> Option { Key::Ctrl(c) => Some(KeyChar::Ctrl(c)), Key::Backspace => Some(KeyChar::Press('𐘁')), Key::Esc => Some(KeyChar::Press('𐘃')), - Key::Up => Some(KeyChar::Press('𐙘')), - Key::Down => Some(KeyChar::Press('𐘞')), - Key::Left => Some(KeyChar::Press('𐙣')), - Key::Right => Some(KeyChar::Press('𐙥')), + Key::ArrowUp => Some(KeyChar::Press('𐙘')), + Key::ArrowDown => Some(KeyChar::Press('𐘞')), + Key::ArrowLeft => Some(KeyChar::Press('𐙣')), + Key::ArrowRight => Some(KeyChar::Press('𐙥')), _ => None, } } @@ -94,9 +91,9 @@ fn init(framebuffer: Framebuffer, framebuffer_info: FramebufferInfo) { //read key presses thread::spawn(move || { - let stdin = stdin().lock(); - for c in stdin.keys() { - if let Some(kc) = key_to_char(c.unwrap()) { + let stdin = RawStdin::new(stdin()); + for c in stdin { + if let Some(kc) = key_to_char(c) { //do not allow exit when locked unless debugging //if kc == KeyChar::Alt('E') { if kc == KeyChar::Alt('E') { diff --git a/wm/Cargo.toml b/wm/Cargo.toml index 8f99de7..97a13d9 100644 --- a/wm/Cargo.toml +++ b/wm/Cargo.toml @@ -8,7 +8,5 @@ edition = "2021" [dependencies] ming-wm-lib = { path = "../ming-wm-lib" } linux = { path = "linux" } -blake2 = { version = "0.10.6", default-features = false } -termion = { version = "4.0.3" } +bitcoin_hashes = { version = "0.16.0", default-features = false } bmp-rust = "0.5.0" - diff --git a/wm/linux/src/keys.rs b/wm/linux/src/keys.rs index ab0c014..5e8fc59 100644 --- a/wm/linux/src/keys.rs +++ b/wm/linux/src/keys.rs @@ -1 +1,89 @@ -// \ No newline at end of file +use std::io::{ Read, Stdin }; +use std::sync::mpsc::{ channel, Receiver }; +use std::thread; + +//includes a section on reading keys +//https://viewsourcecode.org/snaptoken/kilo/02.enteringRawMode.html + +const ALPHABET: [char; 26] = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; + +pub enum Key { + Char(char), + Alt(char), + Ctrl(char), + Backspace, + Esc, + ArrowUp, + ArrowDown, + ArrowLeft, + ArrowRight, + Other(u8), //we don't get about anything else, lmao +} + +pub struct RawStdin { + //bytes: Peekable>>, + receiver: Receiver, +} + +impl RawStdin { + pub fn new(stdin: Stdin) -> Self { + let (sender, receiver) = channel(); + thread::spawn(move || { + let bytes = stdin.lock().bytes(); + for b in bytes { + sender.send(b.unwrap()).unwrap(); + } + }); + RawStdin { + //bytes: stdin.lock().bytes().peekable(), + receiver, + } + } +} + +impl Iterator for RawStdin { + type Item = Key; + + fn next(&mut self) -> Option { + let first = self.receiver.recv().unwrap(); + Some(match first { + 1..=26 => { + //ctrl + if first == 9 { + Key::Char('\t') + } else if first == 13 { + //ctrl+m and enter give the same thing + Key::Char('\n') + } else { + Key::Ctrl(ALPHABET[first as usize - 1]) + } + }, + 27 => { + //escape sequence + //not handling escape sequences that are 3+ bytes is probably going to come back to bite us + let n = self.receiver.try_recv(); + if let Ok(b'[') = n { + let n = self.receiver.recv().unwrap(); + match n { + b'A' => Key::ArrowUp, + b'B' => Key::ArrowDown, + b'C' => Key::ArrowRight, + b'D' => Key::ArrowLeft, + _ => Key::Other(n), + } + } else if n.is_ok() { + //Alt+ sends Esc+ + Key::Alt(char::from(n.unwrap())) + } else { + Key::Esc + } + }, + 127 => { + Key::Backspace + }, + _ => { + Key::Char(char::from(first)) + }, + }) + } +} diff --git a/wm/linux/src/lib.rs b/wm/linux/src/lib.rs index 138fb7b..83eaee7 100644 --- a/wm/linux/src/lib.rs +++ b/wm/linux/src/lib.rs @@ -1,2 +1,3 @@ pub mod fb; pub mod raw; +pub mod keys; diff --git a/wm/src/essential/lock_screen.rs b/wm/src/essential/lock_screen.rs index a508a87..97b8b66 100644 --- a/wm/src/essential/lock_screen.rs +++ b/wm/src/essential/lock_screen.rs @@ -5,7 +5,7 @@ use ming_wm_lib::framebuffer_types::Dimensions; use ming_wm_lib::themes::ThemeInfo; use ming_wm_lib::messages::{ WindowMessage, WindowMessageResponse, WindowManagerRequest }; use ming_wm_lib::window_manager_types::{ DrawInstructions, WindowLike, WindowLikeType }; -use blake2::{ Blake2b512, Digest }; +use bitcoin_hashes::Sha512; //const PASSWORD_HASH: [u8; 64] = [220, 88, 183, 188, 240, 27, 107, 181, 58, 191, 198, 170, 114, 38, 7, 148, 6, 179, 75, 128, 231, 171, 172, 220, 85, 38, 36, 113, 116, 146, 70, 197, 163, 179, 158, 192, 130, 53, 247, 48, 47, 209, 95, 96, 179, 211, 4, 122, 254, 127, 21, 165, 139, 199, 151, 226, 216, 176, 123, 41, 194, 221, 58, 69]; @@ -25,9 +25,7 @@ impl WindowLike for LockScreen { WindowMessage::KeyPress(key_press) => { if key_press.is_enter() { //check password - let mut hasher = Blake2b512::new(); - hasher.update((self.input_password.clone() + "salt?sorrycryptographers").as_bytes()); - if hasher.finalize() == self.password_hash.into() { + if Sha512::hash((self.input_password.clone() + "salt?sorrycryptographers!1!").as_bytes()).to_byte_array() == self.password_hash { WindowMessageResponse::Request(WindowManagerRequest::Unlock) } else { self.input_password = String::new(); diff --git a/wm/src/lib.rs b/wm/src/lib.rs index 4b3edaa..e927891 100644 --- a/wm/src/lib.rs +++ b/wm/src/lib.rs @@ -1,5 +1,4 @@ pub use linux; -pub use termion; pub mod framebuffer; pub mod window_manager; From 724ffbd49435ba435bd0e1e7191f44cfa7106bae Mon Sep 17 00:00:00 2001 From: stjet <49297268+stjet@users.noreply.github.com> Date: Sat, 26 Apr 2025 05:17:06 +0000 Subject: [PATCH 4/7] multi-line copy/paste, more copy/paste fix C and D in nimbus romono --- Cargo.toml | 2 +- bmps/nimbus-romono/C0.bmp | Bin 534 -> 534 bytes bmps/nimbus-romono/D0.bmp | Bin 534 -> 534 bytes docs/system/writing_windows.md | 2 ++ docs/window-likes/audio-player.md | 2 ++ docs/window-likes/terminal.md | 2 +- ming-wm-lib/Cargo.toml | 2 +- ming-wm-lib/src/ipc.rs | 2 ++ ming-wm-lib/src/serialize.rs | 4 +-- src/bin/audio_player.rs | 24 ++++++++++++++++-- src/bin/malvim.rs | 18 +++++++++++--- src/bin/terminal.rs | 39 ++++++++++++++++++++++++------ 12 files changed, 78 insertions(+), 19 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index abd30d0..fea1aeb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ming-wm" -version = "1.0.3" +version = "1.1.0" repository = "https://github.com/stjet/ming-wm" license = "GPL-3.0-or-later" edition = "2021" diff --git a/bmps/nimbus-romono/C0.bmp b/bmps/nimbus-romono/C0.bmp index 50a59263a28a07a3fbeeaa3b10d8e44829aad7a7..e0fee452d8150375fe8aecf0be70bbf10f710261 100644 GIT binary patch literal 534 zcmZwDKMMh29KiACWRNUUXSu;(P%?Nd;fujoSN?n}r_}PLWP=Zy#99JB%#tda+rc3_8 z3Z7BVk`K{C5ijhJ)HCKuy@3hj;*Qyi$MjFpTrS=-b7tOnnl)R@%mea%j;*h2^be5t z%j=r$q%Yqsb1hq6YOFq7+_1&p-PGj&`_X)z_>M7B`nkkaoUt@&9{C7+_}E~90j6L4 C4%#>fM7{OQRBm+YptOMz&I@{B$%VA`-=V z&t_J}#3awmoO8bHZnoBRV=7!F_5zYf!BHN&QU@nIezqV8lwjpC#SwdKFotVn8q^P5 zQ8oHy>LrTE;RbnVC(1-8y)^n5Kr(M+qPcxC+v(ido|!e7r_T9i-@cQP@0a&(?U`9K z_jT@M_U${Fp3c2E6MyD$`ZHv4fxNr*C)cIFkUpz|JJ$FIsgCw diff --git a/bmps/nimbus-romono/D0.bmp b/bmps/nimbus-romono/D0.bmp index 707771287b98e48eb7328e15a679a3e49dc9fe5f..8ca36a0fcc144570834ae337765d4f341fc4f009 100644 GIT binary patch literal 534 zcma)(y$%6E6h>!N{%VbaLSmo51L#%aLC|^wYNAvsR*OO;N}*9GPmgMGs#9` z%_L{$e)pc)&1UP3LP|xe#_mHF^5Cg5yHZy#I=;6qjXS(y2`kvb7<{d@vXB>WiRCo8 z19HC=>(9tXo9#)j2RA55kM+yTF?&Ei$uqMJ-oe3};)M=gAn$hY_IRfxk9iSZF#6+7 kaO8Wd#+y^0r8YT39>5ctrq`wpL7p%FWeqzRLdD+w059IuDgXcg literal 534 zcmaiwu?oU45QbC5MVuW)Hz(1>sgt{#ui=xp=?DYr4t)X9N02TGYW%KT zp(v8Tcj^84(u4H+)q+V^m)e9fR3I>Qsxg-!-M-71;0+EESi%lg(00z54Ehs@x0Z}m zggHE5kn;}oBG_EkpqDu^qo((NJk4Vqxj*uFTlHd(H&rk3cvii;$IIrPJ>FISXa9Me kx72yEchoy-Hq*XDAA!8zP_qf&FOYY-!2 In the case of `WindowMessage::Request(WindowManagerRequest::ClipboardCopy())`, windows should convert any `\n` into `𐘂` when copying to clipboard and vice versa when pasting, in order to allow for multi-line clipboard contents. + ## Hello, World! A minimal example using `ming-wm-lib`. diff --git a/docs/window-likes/audio-player.md b/docs/window-likes/audio-player.md index e0553ae..ae2bd90 100644 --- a/docs/window-likes/audio-player.md +++ b/docs/window-likes/audio-player.md @@ -14,6 +14,8 @@ Type to write commands, backspace to delete last character, and enter to run com Tab completion is supported for the `` and `` arguments. +The copy shortcut will copy the currently playing song's file name, if there is a currently playing song. + ## Playlists Example playlist file: diff --git a/docs/window-likes/terminal.md b/docs/window-likes/terminal.md index 3a56fbb..d3a7563 100644 --- a/docs/window-likes/terminal.md +++ b/docs/window-likes/terminal.md @@ -25,7 +25,7 @@ To get sudo to read from stdin, the `-S` option will need to be used (eg, `sudo ## Copy / Paste -This window-like supports the paste [shortcut](../system/shortcuts.md) (`Alt+P`) if in INPUT or STDIN mode. +This window-like supports the paste [shortcut](../system/shortcuts.md) (`Alt+P`) if in INPUT or STDIN mode. The copy shortcut will copy the output of the last ran command. ## Notes diff --git a/ming-wm-lib/Cargo.toml b/ming-wm-lib/Cargo.toml index c821a1c..a420e9d 100644 --- a/ming-wm-lib/Cargo.toml +++ b/ming-wm-lib/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ming-wm-lib" -version = "0.1.7" +version = "0.2.0" repository = "https://github.com/stjet/ming-wm" description = "library for building windows for ming-wm in rust" readme = "README.md" diff --git a/ming-wm-lib/src/ipc.rs b/ming-wm-lib/src/ipc.rs index 7b7772e..76cbbf0 100644 --- a/ming-wm-lib/src/ipc.rs +++ b/ming-wm-lib/src/ipc.rs @@ -58,9 +58,11 @@ pub fn listen(mut window_like: impl WindowLike) { let arg = &parts.collect::>().join(" "); let output = match method { "handle_message" => { + //newlines allowed for ClipboardCopy, but represented by the Linear A char window_like.handle_message(WindowMessage::deserialize(arg).unwrap()).serialize().to_string() }, "draw" => { + //newlines never allowed window_like.draw(&ThemeInfo::deserialize(arg).unwrap()).serialize().replace("\n", "").to_string() }, "title" => { diff --git a/ming-wm-lib/src/serialize.rs b/ming-wm-lib/src/serialize.rs index b2aaf4d..12e3ed1 100644 --- a/ming-wm-lib/src/serialize.rs +++ b/ming-wm-lib/src/serialize.rs @@ -146,7 +146,7 @@ impl Serializable for WindowMessageResponse { WindowMessageResponse::Request(req) => { let req = match req { WindowManagerRequest::OpenWindow(name) => format!("OpenWindow/{}", name), - WindowManagerRequest::ClipboardCopy(name) => format!("ClipboardCopy/{}", name), + WindowManagerRequest::ClipboardCopy(copy_string) => format!("ClipboardCopy/{}", copy_string.replace("\n", "𐘂")), //serialised output must be 1 line WindowManagerRequest::CloseStartMenu => "CloseStartMenu".to_string(), WindowManagerRequest::Unlock => "Unlock".to_string(), WindowManagerRequest::Lock => "Lock".to_string(), @@ -646,7 +646,7 @@ impl Serializable for WindowMessage { "FullscreenWindow" => Some(ShortcutType::FullscreenWindow), "HalfWidthWindow" => Some(ShortcutType::HalfWidthWindow), "ClipboardCopy" => Some(ShortcutType::ClipboardCopy), - "ClipboardPaste" => Some(ShortcutType::ClipboardPaste(get_rest_of_split(&mut parts, Some("/")))), + "ClipboardPaste" => Some(ShortcutType::ClipboardPaste(get_rest_of_split(&mut parts, Some("/")).replace("𐘂", "\n"))), _ => None, }; if let Some(shortcut) = shortcut { diff --git a/src/bin/audio_player.rs b/src/bin/audio_player.rs index 5c3101a..ff62d36 100644 --- a/src/bin/audio_player.rs +++ b/src/bin/audio_player.rs @@ -14,7 +14,7 @@ use mp4ameta; use metaflac; use ming_wm_lib::window_manager_types::{ DrawInstructions, WindowLike, WindowLikeType }; -use ming_wm_lib::messages::{ WindowMessage, WindowMessageResponse }; +use ming_wm_lib::messages::{ WindowMessage, WindowMessageResponse, WindowManagerRequest, ShortcutType }; use ming_wm_lib::framebuffer_types::Dimensions; use ming_wm_lib::themes::ThemeInfo; use ming_wm_lib::utils::{ concat_paths, get_all_files, path_autocomplete, format_seconds, Substring }; @@ -79,7 +79,6 @@ pub struct AudioPlayer { impl WindowLike for AudioPlayer { fn handle_message(&mut self, message: WindowMessage) -> WindowMessageResponse { - // match message { WindowMessage::Init(dimensions) => { self.dimensions = dimensions; @@ -116,6 +115,27 @@ impl WindowLike for AudioPlayer { } WindowMessageResponse::JustRedraw }, + WindowMessage::Shortcut(shortcut) => { + match shortcut { + ShortcutType::ClipboardPaste(paste_string) => { + self.command += &paste_string.replace("\n", ""); + WindowMessageResponse::JustRedraw + }, + ShortcutType::ClipboardCopy => { + let internal_locked = self.internal.lock().unwrap(); + let sink_len = internal_locked.sink.len(); + if sink_len > 0 { + let queue = &internal_locked.queue; + let current = &queue[queue.len() - sink_len]; + let current_name = current.0.file_name().unwrap().to_string_lossy().into_owned(); + WindowMessageResponse::Request(WindowManagerRequest::ClipboardCopy(current_name)) + } else { + WindowMessageResponse::DoNothing + } + }, + _ => WindowMessageResponse::DoNothing, + } + }, _ => { WindowMessageResponse::DoNothing }, diff --git a/src/bin/malvim.rs b/src/bin/malvim.rs index 96bbca6..3c4879d 100644 --- a/src/bin/malvim.rs +++ b/src/bin/malvim.rs @@ -457,11 +457,21 @@ impl WindowLike for Malvim { ShortcutType::ClipboardPaste(copy_string) => { if self.mode == Mode::Insert { let current_file = &mut self.files[self.current_file_index]; - let line = ¤t_file.content[current_file.line_pos]; - current_file.content[current_file.line_pos] = line.substring(0, current_file.cursor_pos).to_string() + ©_string + line.substring(current_file.cursor_pos, line.chars().count()); - current_file.cursor_pos += copy_string.len(); + for (i, cs) in copy_string.split("\n").enumerate() { + if i == 0 { + //modify current line + let line = ¤t_file.content[current_file.line_pos]; + current_file.content[current_file.line_pos] = line.substring(0, current_file.cursor_pos).to_string() + &cs + line.substring(current_file.cursor_pos, line.chars().count()); + current_file.cursor_pos += copy_string.len(); + } else { + //insert a new line + current_file.content.insert(current_file.line_pos + 1, cs.to_string()); + current_file.line_pos += 1; + current_file.cursor_pos = cs.chars().count(); + } + } self.calc_top_line_pos(); - self.calc_current(); //too over zealous but whatever + self.calc_current(); self.files[self.current_file_index].changed = true; WindowMessageResponse::JustRedraw } else { diff --git a/src/bin/terminal.rs b/src/bin/terminal.rs index 912e8bc..4a79753 100644 --- a/src/bin/terminal.rs +++ b/src/bin/terminal.rs @@ -11,7 +11,7 @@ use std::fmt; use pty_process::blocking; use ming_wm_lib::window_manager_types::{ DrawInstructions, WindowLike, WindowLikeType }; -use ming_wm_lib::messages::{ WindowMessage, WindowMessageResponse, ShortcutType }; +use ming_wm_lib::messages::{ WindowMessage, WindowMessageResponse, WindowManagerRequest, ShortcutType }; use ming_wm_lib::framebuffer_types::Dimensions; use ming_wm_lib::themes::ThemeInfo; use ming_wm_lib::utils::{ concat_paths, path_autocomplete, Substring }; @@ -46,6 +46,11 @@ fn strip_ansi_escape_codes(line: String) -> String { new_line } +fn bytes_to_string(bytes: Vec) -> String { + let bytes_len = bytes.len(); + String::from_utf8(bytes).unwrap_or("?".repeat(bytes_len)) +} + #[derive(Default, PartialEq)] enum Mode { #[default] @@ -78,6 +83,7 @@ pub struct Terminal { current_path: String, running_process: Option, process_current_line: Vec, //bytes of line + output: String, //current or previous running output of command pty_outerr_rx: Option>, pty_in_tx: Option>, history: Vec, @@ -116,6 +122,7 @@ impl WindowLike for Terminal { self.history_index = None; self.mode = self.process_command(); self.current_input = String::new(); + self.output = String::new(); } else if key_press.key == '\t' { //tab //autocomplete assuming it's a file system path //...mostly working @@ -144,8 +151,10 @@ impl WindowLike for Terminal { loop { if let Ok(ci) = self.pty_outerr_rx.as_mut().unwrap().recv_timeout(Duration::from_millis(5)) { if char::from(ci) == '\n' { - let pcl_len = self.process_current_line.len(); - self.lines.push(strip_ansi_escape_codes(String::from_utf8(self.process_current_line.clone()).unwrap_or("?".repeat(pcl_len)))); + let append_line = strip_ansi_escape_codes(bytes_to_string(self.process_current_line.clone())); + self.output += &append_line; + self.output += "\n"; + self.lines.push(append_line); self.process_current_line = Vec::new(); } else if char::from(ci) == '\r' { //for now, ignore @@ -166,7 +175,14 @@ impl WindowLike for Terminal { //process exited self.pty_outerr_rx = None; self.mode = Mode::Input; - self.process_current_line = Vec::new(); + if self.process_current_line.len() > 0 { + //add to lines + let append_line = strip_ansi_escape_codes(bytes_to_string(self.process_current_line.clone())); + self.output += &append_line; + self.lines.push(append_line); + //only need to reset if not empty + self.process_current_line = Vec::new(); + } changed = true; } else { if key_press.key == 'i' { @@ -187,8 +203,9 @@ impl WindowLike for Terminal { } else if key_press.is_enter() { let _ = self.pty_in_tx.as_mut().unwrap().send(self.current_stdin_input.clone()); self.mode = Mode::Running; - let pcl_len = self.process_current_line.len(); - self.lines.push(strip_ansi_escape_codes(String::from_utf8(self.process_current_line.clone()).unwrap_or("?".repeat(pcl_len))) + &self.current_stdin_input); + let append_line = strip_ansi_escape_codes(bytes_to_string(self.process_current_line.clone()) + &self.current_stdin_input); + self.output += &append_line; + self.lines.push(append_line); self.current_stdin_input = String::new(); self.process_current_line = Vec::new(); } else if key_press.is_backspace() { @@ -210,6 +227,12 @@ impl WindowLike for Terminal { //kills and running_process is now None let _ = self.running_process.take().unwrap().kill(); self.mode = Mode::Input; + if self.process_current_line.len() > 0 { + let append_line = strip_ansi_escape_codes(bytes_to_string(self.process_current_line.clone())); + self.output += &append_line; + self.lines.push(append_line); + self.process_current_line = Vec::new(); + } WindowMessageResponse::JustRedraw } else if self.mode == Mode::Input && (key_press.key == 'p' || key_press.key == 'n') { //only the last command is saved unlike other terminals. good enough for me @@ -231,6 +254,7 @@ impl WindowLike for Terminal { }, WindowMessage::Shortcut(shortcut) => { match shortcut { + ShortcutType::ClipboardCopy => WindowMessageResponse::Request(WindowManagerRequest::ClipboardCopy(self.output.clone())), ShortcutType::ClipboardPaste(copy_string) => { if self.mode == Mode::Input || self.mode == Mode::Stdin { if self.mode == Mode::Input { @@ -381,8 +405,7 @@ impl Terminal { //must_add_current_line will be false "$ ".to_string() + &self.current_input + "█" } else { - let pcl_len = self.process_current_line.len(); - strip_ansi_escape_codes(String::from_utf8(self.process_current_line.clone()).unwrap_or("?".repeat(pcl_len))) + &self.current_stdin_input.clone() + "█" + strip_ansi_escape_codes(bytes_to_string(self.process_current_line.clone()) + &self.current_stdin_input.clone() + "█") } } else { self.lines[line_num].clone() From c1afd3f33e61092057c8a8bcd77ccc87cb407d78 Mon Sep 17 00:00:00 2001 From: stjet <49297268+stjet@users.noreply.github.com> Date: Wed, 30 Apr 2025 04:50:11 +0000 Subject: [PATCH 5/7] inhouse pty --- Cargo.toml | 6 +-- bmps/nimbus-romono/{-8.bmp => -6.bmp} | Bin bmps/nimbus-romono/{<2.bmp => <3.bmp} | Bin bmps/nimbus-romono/{>2.bmp => >3.bmp} | Bin docs/philosophy.md | 9 ++++- docs/system/integration.md | 3 ++ {wm/linux => linux}/Cargo.toml | 0 {wm/linux => linux}/src/fb.rs | 0 {wm/linux => linux}/src/keys.rs | 0 {wm/linux => linux}/src/lib.rs | 1 + linux/src/pty.rs | 55 ++++++++++++++++++++++++++ {wm/linux => linux}/src/raw.rs | 0 src/bin/terminal.rs | 15 ++++--- src/bin/wm.rs | 6 +-- wm/Cargo.toml | 2 +- 15 files changed, 82 insertions(+), 15 deletions(-) rename bmps/nimbus-romono/{-8.bmp => -6.bmp} (100%) rename bmps/nimbus-romono/{<2.bmp => <3.bmp} (100%) rename bmps/nimbus-romono/{>2.bmp => >3.bmp} (100%) create mode 100644 docs/system/integration.md rename {wm/linux => linux}/Cargo.toml (100%) rename {wm/linux => linux}/src/fb.rs (100%) rename {wm/linux => linux}/src/keys.rs (100%) rename {wm/linux => linux}/src/lib.rs (75%) create mode 100644 linux/src/pty.rs rename {wm/linux => linux}/src/raw.rs (100%) diff --git a/Cargo.toml b/Cargo.toml index fea1aeb..51518bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ default-run = "ming" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [workspace] -members = [ "wm", "wm/linux" ] +members = [ "wm", "linux" ] [build-dependencies] bmp-rust = "0.5.0" @@ -18,16 +18,16 @@ bitcoin_hashes = { version = "0.16.0", default-features = false } [dependencies] ming-wm-lib = { path = "ming-wm-lib" } wm = { path = "wm", optional = true } +linux = { path = "linux", optional = true } rodio = { version = "0.19.0", default-features = false, features = [ "flac", "mp3", "symphonia-vorbis", "wav" ], optional = true } rand = { version = "0.9.0", default-features = false, features = [ "small_rng" ], optional = true } id3 = { version = "1.10.0", optional = true } mp4ameta = { version = "0.11.0", optional = true } metaflac = { version = "0.2.5", optional = true } -pty-process = { version = "0.5.1", optional = true } [features] default = [ "wm", "terminal" ] -terminal = [ "pty-process" ] +terminal = [ "linux" ] audio_player = [ "id3", "mp4ameta", "metaflac", "rand", "rodio" ] [profile.release] diff --git a/bmps/nimbus-romono/-8.bmp b/bmps/nimbus-romono/-6.bmp similarity index 100% rename from bmps/nimbus-romono/-8.bmp rename to bmps/nimbus-romono/-6.bmp diff --git a/bmps/nimbus-romono/<2.bmp b/bmps/nimbus-romono/<3.bmp similarity index 100% rename from bmps/nimbus-romono/<2.bmp rename to bmps/nimbus-romono/<3.bmp diff --git a/bmps/nimbus-romono/>2.bmp b/bmps/nimbus-romono/>3.bmp similarity index 100% rename from bmps/nimbus-romono/>2.bmp rename to bmps/nimbus-romono/>3.bmp diff --git a/docs/philosophy.md b/docs/philosophy.md index f7d9d5e..2534d37 100644 --- a/docs/philosophy.md +++ b/docs/philosophy.md @@ -69,5 +69,10 @@ More often than not, not relying on dependencies removes unnecessary bloat and c Expect to see more dependencies in Cargo.toml eliminated soon. PS: -1. `rodio` is unlikely to ever be eliminated (simply because audio is *complex*), and it's optional (if the audio player is not wanted) -2.`bmp-rust` is written by me and so isn't technically an external dependency +1. `rodio` is unlikely to ever be eliminated (simply because audio is *complex*), and it's optional (if the audio player is not wanted). The dependency which provides hashing will also not be removed as I am not a cryptographer and not (quite) stupid enough to pretend being one +2. `bmp-rust` is written by me and so isn't technically an external dependency + +> ### Update +> Ignoring the audio player dependencies and `bmp-rust`, the only dependencies not written by me are now `libc` for libc Rust bindings and `bitcoin-hashes` for SHA-512 password hashing (yes, I know SHA-512 is not the greatest password hash function, but it is lightweight, relatively). +> +> Prior dependencies like `termion`, `linux_framebuffer`, `pty-process`, have been removed and replaced by a me-written version in the `linux` crate. As of v1.1, the dependency removing goal has been achieved. Huzzah! diff --git a/docs/system/integration.md b/docs/system/integration.md new file mode 100644 index 0000000..e9a2119 --- /dev/null +++ b/docs/system/integration.md @@ -0,0 +1,3 @@ +## Launch on Login + +To launch on user login, simply add `ming` as the last line of `~/.profile`. This should work for most shells. diff --git a/wm/linux/Cargo.toml b/linux/Cargo.toml similarity index 100% rename from wm/linux/Cargo.toml rename to linux/Cargo.toml diff --git a/wm/linux/src/fb.rs b/linux/src/fb.rs similarity index 100% rename from wm/linux/src/fb.rs rename to linux/src/fb.rs diff --git a/wm/linux/src/keys.rs b/linux/src/keys.rs similarity index 100% rename from wm/linux/src/keys.rs rename to linux/src/keys.rs diff --git a/wm/linux/src/lib.rs b/linux/src/lib.rs similarity index 75% rename from wm/linux/src/lib.rs rename to linux/src/lib.rs index 83eaee7..45ae7c0 100644 --- a/wm/linux/src/lib.rs +++ b/linux/src/lib.rs @@ -1,3 +1,4 @@ pub mod fb; pub mod raw; pub mod keys; +pub mod pty; diff --git a/linux/src/pty.rs b/linux/src/pty.rs new file mode 100644 index 0000000..922f8a4 --- /dev/null +++ b/linux/src/pty.rs @@ -0,0 +1,55 @@ +use std::ptr; +use std::process::{ Command, Child }; +use std::fs::File; +use std::os::fd::{ OwnedFd, FromRawFd }; + +use libc::openpty; + +//basically the master and slave are linked? slave behaves just like normal terminal +//I don't totally get it, I guess just attach the command's stdout and stderr to ptyslave for reading? + +pub struct PtyMaster { + pub file: File, +} + +impl PtyMaster { + pub fn new(fd: OwnedFd) -> Self { + Self { + file: File::from(fd), + } + } +} + +pub struct PtySlave { + pub file: File, + fd: OwnedFd, +} + +impl PtySlave { + pub fn new(fd: OwnedFd) -> Self { + Self { + file: File::from(fd.try_clone().unwrap()), + fd, + } + } + + //assume stdin is piped + pub fn attach_and_spawn(&self, command: &mut Command) -> std::io::Result { + command.stdout(self.fd.try_clone().unwrap()); + command.stderr(self.fd.try_clone().unwrap()); + command.spawn() + } +} + +pub fn open_pty() -> Result<(PtyMaster, PtySlave), ()> { + let mut master_fd = 0; + let mut slave_fd = 0; + let result = unsafe { openpty(&mut master_fd, &mut slave_fd, ptr::null_mut(), ptr::null_mut(), ptr::null_mut()) }; + if result == -1 { + Err(()) + } else { + let master_fd = unsafe { OwnedFd::from_raw_fd(master_fd) }; + let slave_fd = unsafe { OwnedFd::from_raw_fd(slave_fd) }; + Ok((PtyMaster::new(master_fd), PtySlave::new(slave_fd))) + } +} diff --git a/wm/linux/src/raw.rs b/linux/src/raw.rs similarity index 100% rename from wm/linux/src/raw.rs rename to linux/src/raw.rs diff --git a/src/bin/terminal.rs b/src/bin/terminal.rs index 4a79753..2e27db1 100644 --- a/src/bin/terminal.rs +++ b/src/bin/terminal.rs @@ -3,12 +3,13 @@ use std::vec; use std::sync::mpsc::{ channel, Receiver, Sender }; use std::thread; use std::process::{ Child, Stdio }; +use std::process::Command; use std::io::{ Read, Write }; use std::time::Duration; use std::path::PathBuf; use std::fmt; -use pty_process::blocking; +use linux::pty::open_pty; use ming_wm_lib::window_manager_types::{ DrawInstructions, WindowLike, WindowLikeType }; use ming_wm_lib::messages::{ WindowMessage, WindowMessageResponse, WindowManagerRequest, ShortcutType }; @@ -160,8 +161,8 @@ impl WindowLike for Terminal { //for now, ignore // } else if char::from(ci) == '\t' { - //for now, ignore - // + //for now, interpret as space + self.process_current_line.push(b' '); } else { self.process_current_line.push(ci); } @@ -358,11 +359,13 @@ impl Terminal { } Mode::Input } else { - let (pty, pts) = blocking::open().unwrap(); - self.running_process = Some(blocking::Command::new("sh").arg("-c").arg(&self.current_input).current_dir(&self.current_path).stdin(Stdio::piped()).spawn(pts).unwrap()); + let (pty, pts) = open_pty().unwrap(); + let mut cmd = Command::new("sh"); + let cmd = cmd.arg("-c").arg(&self.current_input).current_dir(&self.current_path).stdin(Stdio::piped()); + self.running_process = Some(pts.attach_and_spawn(cmd).unwrap()); let (tx1, rx1) = channel(); thread::spawn(move || { - for ci in pty.bytes() { + for ci in pty.file.bytes() { if let Ok(ci) = ci { tx1.send(ci).unwrap(); } else { diff --git a/src/bin/wm.rs b/src/bin/wm.rs index 4327cdc..d12c63b 100644 --- a/src/bin/wm.rs +++ b/src/bin/wm.rs @@ -6,9 +6,9 @@ use std::io::{ stdin, stdout, BufReader, BufRead, Write }; use std::process::exit; use std::env; -use wm::linux::fb::Framebuffer; -use wm::linux::raw::RawStdout; -use wm::linux::keys::{ RawStdin, Key }; +use linux::fb::Framebuffer; +use linux::raw::RawStdout; +use linux::keys::{ RawStdin, Key }; use wm::framebuffer::{ FramebufferWriter, FramebufferInfo }; use wm::window_manager::WindowManager; diff --git a/wm/Cargo.toml b/wm/Cargo.toml index 97a13d9..c5a1f46 100644 --- a/wm/Cargo.toml +++ b/wm/Cargo.toml @@ -7,6 +7,6 @@ edition = "2021" [dependencies] ming-wm-lib = { path = "../ming-wm-lib" } -linux = { path = "linux" } +linux = { path = "../linux" } bitcoin_hashes = { version = "0.16.0", default-features = false } bmp-rust = "0.5.0" From dfe065d26a32e487a4303f7773477a1a59bdce62 Mon Sep 17 00:00:00 2001 From: stjet <49297268+stjet@users.noreply.github.com> Date: Fri, 2 May 2025 01:07:15 +0000 Subject: [PATCH 6/7] fix un-fullscreening windows changing the coords, fix touchscreen not redrawing framebuffer --- README.md | 14 ++++++++++---- src/bin/wm.rs | 1 + wm/src/window_manager.rs | 18 +++++++++++------- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 85a1e04..df0ce7b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Ming-wm is a keyboard-based, retro-themed window manager for Linux. It is neither for Wayland or the X Window System - it writes directly to the framebuffer. Inspirations include i3, Haiku, SerenityOS, and Windows98, and it is a conceptual successor to the previous [mingde](https://github.com/stjet/mingde) and [ming-os](https://github.com/stjet/ming-os). +Ming-wm is a keyboard-based, retro-themed window manager for Linux. It is neither for Wayland or the X Window System - it writes directly to the framebuffer. Inspirations include i3, Haiku, SerenityOS, and Windows98, and it is a conceptual successor to my previous projects [ming-de](https://github.com/stjet/mingde) and [ming-os](https://github.com/stjet/ming-os). ![example 1](/docs/images/ws1.png) ![example 2](/docs/images/ws3.png) @@ -49,9 +49,9 @@ Usage for most of the included windows and window-likes are included in `docs/wi ## Running on Mobile Linux -Running with an onscreen keyboard. The framebuffer may not be redrawn to the screen without a (real) key press. The volume down button seems to work. If someone knows why this is the case, and/or how to fix this, please let me know. +More or the less the same, but includes with an onscreen keyboard for touchscreens. -`evtest` needs to be installed. Currently, the input device is assumed to be at `/dev/first-touchscreen`. +`evtest` needs to be installed. Currently, the input device is assumed to be at `/dev/input/by-path/first-touchscreen`, but this is easily editable (see `src/bin/wm.rs`). So, for touchscreen support, the user running `ming` needs to have read permissions for that `dev/input/` file. ``` ming touch @@ -73,12 +73,18 @@ See [/docs/philosophy.md](/docs/philosophy.md) for some hopefully interesting ra Windows (may be called apps in other window managers) can be developed in any language, though it is easiest to do so in Rust because the `ming-wm-lib` crate can be used. -See [koxinga](https://github.com/stjet/koxinga) or `src/bin` for examples. The `docs` directory includes a [brief introduction to writing windows](docs/system/writing_windows.md), and (incomplete) documentation on the workings of ming-wm. +The `docs` directory includes a [brief introduction to writing windows](docs/system/writing_windows.md), and (incomplete) documentation on the workings of ming-wm. + +See [koxinga](https://github.com/stjet/koxinga) or `src/bin` for examples. + +A (very poorly written, and WIP) window is being written in Lisp Scheme: [ming-flashcards](https://github.com/stjet/ming-flashcards). ## Security Make sure the permissions of `password.env` are so other users cannot read or write to it. If there is no plan to recompile, just delete it. +Understand the implications of adding the user to the `video` group. And if the permissions of a `/dev/input/` file was changed for touchscreen support, understand those implications too. + Obviously, don't run the executable with `sudo` or `doas`, or as the root user! ## License diff --git a/src/bin/wm.rs b/src/bin/wm.rs index d12c63b..e097794 100644 --- a/src/bin/wm.rs +++ b/src/bin/wm.rs @@ -118,6 +118,7 @@ fn init(framebuffer: Framebuffer, framebuffer_info: FramebufferInfo) { let mut y: Option = None; for line in reader.lines() { let line = line.unwrap(); + println!(" "); //without any stdout, on my phone, for some reason the framebuffer doesn't get redrawn to the screen if line.contains("ABS_X), value ") || line.contains("ABS_Y), value ") { let value: Vec<_> = line.split("), value ").collect(); let value = value[value.len() - 1].parse::().unwrap(); diff --git a/wm/src/window_manager.rs b/wm/src/window_manager.rs index 272d568..948e259 100644 --- a/wm/src/window_manager.rs +++ b/wm/src/window_manager.rs @@ -24,7 +24,6 @@ use crate::essential::start_menu::StartMenu; use crate::essential::about::About; use crate::essential::help::Help; use crate::essential::onscreen_keyboard::OnscreenKeyboard; -//use crate::logging::log; //todo: a lot of the usize should be changed to u16 @@ -40,6 +39,7 @@ struct WindowLikeInfo { id: usize, window_like: WindowBox, top_left: Point, + old_top_left: Point, dimensions: Dimensions, workspace: Workspace, fullscreen: bool, @@ -105,6 +105,7 @@ impl WindowManager { id, window_like, top_left, + old_top_left: top_left, dimensions, workspace: if subtype == WindowLikeType::Window { Workspace::Workspace(self.current_workspace) @@ -458,17 +459,20 @@ impl WindowManager { let window_like = &self.window_infos[focused_index].window_like; if window_like.subtype() == WindowLikeType::Window && window_like.resizable() { //toggle fullscreen - self.window_infos[focused_index].fullscreen ^= true; + let window_info = &mut self.window_infos[focused_index]; + window_info.fullscreen ^= true; //todo: send message to window about resize let new_dimensions; - if self.window_infos[focused_index].fullscreen { + if window_info.fullscreen { new_dimensions = [self.dimensions[0], self.dimensions[1] - TASKBAR_HEIGHT - INDICATOR_HEIGHT]; - self.window_infos[focused_index].top_left = [0, INDICATOR_HEIGHT]; - redraw_ids = Some(vec![self.window_infos[focused_index].id]); + window_info.old_top_left = window_info.top_left; + window_info.top_left = [0, INDICATOR_HEIGHT]; + redraw_ids = Some(vec![window_info.id]); } else { - new_dimensions = self.window_infos[focused_index].dimensions; + window_info.top_left = window_info.old_top_left; + new_dimensions = window_info.dimensions; } - self.window_infos[focused_index].window_like.handle_message(WindowMessage::ChangeDimensions([new_dimensions[0], new_dimensions[1] - WINDOW_TOP_HEIGHT])); + window_info.window_like.handle_message(WindowMessage::ChangeDimensions([new_dimensions[0], new_dimensions[1] - WINDOW_TOP_HEIGHT])); press_response = WindowMessageResponse::JustRedraw; } } From 6cc8e06e89d15d5acf120f55a8f9a8d4f8a7fbd3 Mon Sep 17 00:00:00 2001 From: Jon Dough <49297268+stjet@users.noreply.github.com> Date: Sun, 4 May 2025 03:00:34 +0000 Subject: [PATCH 7/7] Read /dev/input for touchscreen (#3) --- README.md | 2 +- docs/philosophy.md | 2 +- linux/src/input.rs | 108 +++++++++++++++++++++++++++++++++++++++++++++ linux/src/lib.rs | 1 + src/bin/wm.rs | 54 +++++++++++------------ 5 files changed, 138 insertions(+), 29 deletions(-) create mode 100644 linux/src/input.rs diff --git a/README.md b/README.md index df0ce7b..999fa84 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Usage for most of the included windows and window-likes are included in `docs/wi More or the less the same, but includes with an onscreen keyboard for touchscreens. -`evtest` needs to be installed. Currently, the input device is assumed to be at `/dev/input/by-path/first-touchscreen`, but this is easily editable (see `src/bin/wm.rs`). So, for touchscreen support, the user running `ming` needs to have read permissions for that `dev/input/` file. +Currently, the touchscreen input device is assumed to be at `/dev/input/by-path/first-touchscreen`, but this is easily editable (see `src/bin/wm.rs`). For touchscreen support, the user running `ming` needs to have read permissions for that `/dev/input/` file. ``` ming touch diff --git a/docs/philosophy.md b/docs/philosophy.md index 2534d37..2cdeb74 100644 --- a/docs/philosophy.md +++ b/docs/philosophy.md @@ -75,4 +75,4 @@ PS: > ### Update > Ignoring the audio player dependencies and `bmp-rust`, the only dependencies not written by me are now `libc` for libc Rust bindings and `bitcoin-hashes` for SHA-512 password hashing (yes, I know SHA-512 is not the greatest password hash function, but it is lightweight, relatively). > -> Prior dependencies like `termion`, `linux_framebuffer`, `pty-process`, have been removed and replaced by a me-written version in the `linux` crate. As of v1.1, the dependency removing goal has been achieved. Huzzah! +> Prior dependencies like `termion`, `linux_framebuffer`, `pty-process`, `evtest` have been removed and replaced by a me-written version in the `linux` crate. As of v1.1, the dependency removing goal has been achieved. Huzzah! diff --git a/linux/src/input.rs b/linux/src/input.rs new file mode 100644 index 0000000..1e17910 --- /dev/null +++ b/linux/src/input.rs @@ -0,0 +1,108 @@ +use std::os::fd::RawFd; +use std::mem::size_of; +use std::ffi::CString; + +use libc::{ open, close, read, poll, pollfd, input_event, timeval, __u16, __s32, c_void }; + +//https://stackoverflow.com/questions/15949163/read-from-dev-input#15949311 +//https://www.man7.org/linux/man-pages/man2/poll.2.html + +#[allow(non_camel_case_types)] +#[repr(u16)] +#[derive(Clone, Copy, PartialEq)] +pub enum EventType { + EV_SYN = 0, //event sep + EV_KEY, + EV_REL, + EV_ABS, + //nothing below will probably ever be relevant to ming-wm + EV_MSC, //misc + EV_SW, //switch/toggle + EV_LED, + EV_SND, + EV_REP, + EV_FF, + EV_PWR, + EV_FF_STATUS, + Unknown(__u16), +} + +impl TryFrom<__u16> for EventType { + type Error = (); + + fn try_from(value: __u16) -> Result { + //if the list is any longer should probably somehow make this a macro + let values = [Self::EV_SYN, Self::EV_KEY, Self::EV_REL, Self::EV_ABS, Self::EV_MSC, Self::EV_SW, Self::EV_LED, Self::EV_SND, Self::EV_REP, Self::EV_FF, Self::EV_PWR, Self::EV_FF_STATUS]; + let value = value as usize; + if value >= values.len() { + Err(()) + } else { + Ok(values[value]) + } + } +} + +//we do not care about time. no one cares about time (probably) +pub struct InputEvent { + pub type_: EventType, + pub code: __u16, //depends on EventType + pub value: __s32, +} + +pub struct Input(RawFd); + +impl Input { + pub fn new(input_name: &str) -> Result { + let input_name = CString::new(input_name).unwrap(); + let fd = unsafe { open(input_name.as_ptr(), libc::O_RDONLY | libc::O_NONBLOCK) }; + if fd == -1 { + Err(()) + } else { + Ok(Self(fd)) + } + } +} + +impl Iterator for Input { + type Item = InputEvent; + + fn next(&mut self) -> Option { + //wait until there is something available + let mut fds = vec![pollfd { + fd: self.0, + events: libc::POLLIN, //return when "there is data to read" + revents: 0, + }]; + let poll_result = unsafe { poll(fds.as_mut_ptr(), 1, -1) }; //neg num means no timeout + if poll_result == -1 { + return None; + } + //now read the event + let ie_size = size_of::(); + let mut ie = input_event { + time: timeval { + tv_sec: 0, + tv_usec: 0, + }, + type_: 0, + code: 0, + value: 0, + }; + let read_result = unsafe { read(self.0, &mut ie as *mut _ as *mut c_void, ie_size) }; + if read_result == -1 { + return None; + } + let type_ = ie.type_.try_into().unwrap_or(EventType::Unknown(ie.type_)); + Some(Self::Item { + type_, + code: ie.code, + value: ie.value, + }) + } +} + +impl Drop for Input { + fn drop(&mut self) { + unsafe { close(self.0) }; + } +} diff --git a/linux/src/lib.rs b/linux/src/lib.rs index 45ae7c0..2f4b4b7 100644 --- a/linux/src/lib.rs +++ b/linux/src/lib.rs @@ -2,3 +2,4 @@ pub mod fb; pub mod raw; pub mod keys; pub mod pty; +pub mod input; diff --git a/src/bin/wm.rs b/src/bin/wm.rs index e097794..8b57f92 100644 --- a/src/bin/wm.rs +++ b/src/bin/wm.rs @@ -1,14 +1,14 @@ -use std::process::{ Command, Stdio }; use std::sync::mpsc; use std::thread; use std::time::Duration; -use std::io::{ stdin, stdout, BufReader, BufRead, Write }; +use std::io::{ stdin, stdout, Write }; use std::process::exit; use std::env; use linux::fb::Framebuffer; use linux::raw::RawStdout; use linux::keys::{ RawStdin, Key }; +use linux::input::{ Input, EventType }; use wm::framebuffer::{ FramebufferWriter, FramebufferInfo }; use wm::window_manager::WindowManager; @@ -112,35 +112,35 @@ fn init(framebuffer: Framebuffer, framebuffer_info: FramebufferInfo) { thread::spawn(move || { //spawn evtest, parse it for touch coords if touch { - let mut evtest = Command::new("evtest").arg("/dev/input/by-path/first-touchscreen").stdout(Stdio::piped()).spawn().unwrap(); - let reader = BufReader::new(evtest.stdout.as_mut().unwrap()); + let mut events = Input::new("/dev/input/by-path/first-touchscreen").unwrap(); //panics in threads don't matter in this case let mut x: Option = None; let mut y: Option = None; - for line in reader.lines() { - let line = line.unwrap(); - println!(" "); //without any stdout, on my phone, for some reason the framebuffer doesn't get redrawn to the screen - if line.contains("ABS_X), value ") || line.contains("ABS_Y), value ") { - let value: Vec<_> = line.split("), value ").collect(); - let value = value[value.len() - 1].parse::().unwrap(); - if line.contains("ABS_X") { - x = Some(value); - } else { - y = Some(value); - } - if x.is_some() && y.is_some() { - let (x2, y2) = if rotate { - (dimensions[0] - y.unwrap(), x.unwrap()) + loop { + let event = events.next(); + if let Some(event) = event { + //ABS_X = 0, ABS_Y = 1 + if event.type_ == EventType::EV_ABS && (event.code == 0 || event.code == 1) { + if event.code == 0 { + x = Some(event.value as usize); //event.value is u16 so this should be fine. unless usize is u8, lmao } else { - (x.unwrap(), y.unwrap()) - }; - //top right, clear - //useful sometimes, I think. - if x2 > dimensions[0] - 100 && y2 < 100 { - tx1.send(ThreadMessage::Clear).unwrap(); + y = Some(event.value as usize); + } + if x.is_some() && y.is_some() { + let (x2, y2) = if rotate { + (dimensions[0] - y.unwrap(), x.unwrap()) + } else { + (x.unwrap(), y.unwrap()) + }; + //top right, clear + //useful sometimes, I think. + if x2 > dimensions[0] - 100 && y2 < 100 { + tx1.send(ThreadMessage::Clear).unwrap(); + } + println!(" "); //without any stdout, on my phone, for some reason the framebuffer doesn't get redrawn to the screen + tx1.send(ThreadMessage::Touch(x2, y2)).unwrap(); + x = None; + y = None; } - tx1.send(ThreadMessage::Touch(x2, y2)).unwrap(); - x = None; - y = None; } } thread::sleep(Duration::from_millis(1));