From c80d70156a486aa140e56ddfaa20732e5c76982e Mon Sep 17 00:00:00 2001 From: broccolingual Date: Tue, 12 Aug 2025 21:18:09 +0900 Subject: [PATCH] add: implement a file reader example --- Cargo.toml | 4 + README.md | 10 +- docs/ex_file_reader.png | Bin 0 -> 79428 bytes examples/file_reader.rs | 202 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 docs/ex_file_reader.png create mode 100644 examples/file_reader.rs diff --git a/Cargo.toml b/Cargo.toml index 66ce0df..104e5fc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,3 +35,7 @@ path = "examples/inputs.rs" [[example]] name = "tetris" path = "examples/tetris/src/main.rs" + +[[example]] +name = "file_reader" +path = "examples/file_reader.rs" diff --git a/README.md b/README.md index f5a1624..ad97b32 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,14 @@ cargo run --example tetris ![](docs/ex_tetris.png) +#### File Reader + +```bash +cargo run --example file_reader +``` + +![](docs/ex_file_reader.png) + ## Platform Support Currently supports Unix-like systems: @@ -130,4 +138,4 @@ This project is licensed under the MIT License - see the LICENSE file for detail --- -**Note**: This library is designed for educational purposes and as a foundation for terminal-based applications. For production use, consider established libraries like `crossterm` or `ratatui-rs` depending on your needs. +**Note**: This library is designed for educational purposes and as a foundation for terminal-based applications. For production use, consider established libraries like `crossterm` or `ratatui` depending on your needs. diff --git a/docs/ex_file_reader.png b/docs/ex_file_reader.png new file mode 100644 index 0000000000000000000000000000000000000000..10c64215f4ae3727167ddac2f545c3e197a53042 GIT binary patch literal 79428 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ⅆTxOe4ORH)GLYC3R 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 Result<(), Box> { + let args: Vec = std::env::args().collect(); + let file_path = if args.len() > 1 { + &args[1] + } else { + eprintln!("Usage: file_reader "); + return Ok(()); + }; + + let mut file_reader = FileReader::new(file_path); + + let mut win = Window::new(false)?; + win.initialize(RENDERING_RATE)?; // Initialize the window and start the rendering thread + let input_rx = InputListener::new(INPUT_CAPTURING_RATE); // Create an input listener + + loop { + // Check for key presses + if let Ok(event) = input_rx.try_recv() { + match event { + InputEvent::Key(Key::Char('q')) => break, + InputEvent::Key(Key::ArrowUp) => { + file_reader.scroll_up(); + } + InputEvent::Key(Key::ArrowDown) => { + let visible_lines = win.height.saturating_sub(4); + file_reader.scroll_down(visible_lines); + } + InputEvent::Key(Key::PageUp) => { + let visible_lines = win.height.saturating_sub(4); + file_reader.page_up(visible_lines); + } + InputEvent::Key(Key::PageDown) => { + let visible_lines = win.height.saturating_sub(4); + file_reader.page_down(visible_lines); + } + InputEvent::Key(Key::Home) => { + file_reader.current_line = 0; + file_reader.scroll_offset = 0; + } + InputEvent::Key(Key::End) => { + let visible_lines = win.height.saturating_sub(4); + file_reader.current_line = file_reader.lines.len().saturating_sub(1); + file_reader.scroll_offset = + file_reader.lines.len().saturating_sub(visible_lines); + } + _ => {} + } + } + + // Draw the frame + win.draw(|canvas| { + file_reader.render(canvas); + })?; + + thread::sleep(time::Duration::from_millis(31)); // Sleep to prevent high CPU usage + } + Ok(()) +} + +struct FileReader { + file_path: String, + lines: Vec, + current_line: usize, + scroll_offset: usize, +} + +impl FileReader { + fn new(file_path: &str) -> Self { + let file = File::open(file_path).unwrap(); + let reader = BufReader::new(file); + let lines: Result, io::Error> = reader.lines().collect(); + Self { + file_path: file_path.to_string(), + lines: lines.unwrap(), + current_line: 0, + scroll_offset: 0, + } + } + + fn scroll_up(&mut self) { + if self.current_line > 0 { + self.current_line -= 1; + if self.current_line < self.scroll_offset { + self.scroll_offset = self.current_line; + } + } + } + + fn scroll_down(&mut self, visible_lines: usize) { + if self.current_line + 1 < self.lines.len() { + self.current_line += 1; + if self.current_line >= self.scroll_offset + visible_lines { + self.scroll_offset = self.current_line - visible_lines + 1; + } + } + } + + fn page_up(&mut self, visible_lines: usize) { + let page_size = visible_lines.saturating_sub(1); + self.current_line = self.current_line.saturating_sub(page_size); + self.scroll_offset = self.scroll_offset.saturating_sub(page_size); + } + + fn page_down(&mut self, visible_lines: usize) { + let page_size = visible_lines.saturating_sub(1); + self.current_line = (self.current_line + page_size).min(self.lines.len().saturating_sub(1)); + + if self.current_line >= self.scroll_offset + visible_lines { + self.scroll_offset = self.current_line - visible_lines + 1; + } + } + + fn render(&self, canvas: &mut Framebuffer) { + // ボーダーを設定(ファイル名を表示) + canvas.set_named_border( + &format!("File Reader - {}", self.file_path), + Align::Center, + Attr::NORMAL, + Color::White, + Color::default(), + ); + + // コンテンツ表示領域のサイズを計算(ボーダーを除く) + let content_width = canvas.width.saturating_sub(4); + let content_height = canvas.height.saturating_sub(4); + let start_x = 2; + let start_y = 2; + + // ファイルの内容を表示 + for (i, line_idx) in (self.scroll_offset..self.scroll_offset + content_height).enumerate() { + if line_idx >= self.lines.len() { + break; + } + + let line = &self.lines[line_idx]; + let is_current = line_idx == self.current_line; + + // 現在行のハイライト + let (attrs, fg, bg) = if is_current { + (Attr::NORMAL, Color::Black, Color::White) + } else { + (Attr::NORMAL, Color::White, Color::default()) + }; + + // 行番号を表示 + let line_number = format!("{:4} ", line_idx + 1); + canvas.set_str( + start_x, + start_y + i, + &line_number, + attrs, + Color::Cyan, + bg, + Align::Left, + ); + + // ファイルの内容を表示(長い行は切り詰める) + let display_line = if line.len() > content_width - 5 { + format!("{}...", &line[..content_width - 8]) + } else { + line.clone() + }; + + canvas.set_str( + start_x + 5, + start_y + i, + &display_line, + attrs, + fg, + bg, + Align::Left, + ); + } + + // ステータスバーを表示 + let status = format!( + "Line {}/{} | Press ↑↓ to scroll, PgUp/PgDn for pages, 'q' to quit", + self.current_line + 1, + self.lines.len() + ); + + canvas.set_str( + canvas.width / 2, + canvas.height - 1, + &status, + Attr::NORMAL, + Color::Yellow, + Color::default(), + Align::Center, + ); + } +}