From 00e923cfdcf29b093928d706b213f738bfe75000 Mon Sep 17 00:00:00 2001 From: auronandace <81362994+auronandace@users.noreply.github.com> Date: Mon, 3 Jan 2022 14:50:00 +0000 Subject: [PATCH] Implement passing the bell signal to the terminal (#981) * implement passing the bell signal to the terminal * Add files via upload add fixture to test against --- src/tests/fixtures/ring_bell | 6 ++++++ zellij-server/src/panes/grid.rs | 5 +++++ zellij-server/src/panes/terminal_pane.rs | 5 +++++ zellij-server/src/panes/unit/grid_tests.rs | 12 ++++++++++++ 4 files changed, 28 insertions(+) create mode 100644 src/tests/fixtures/ring_bell diff --git a/src/tests/fixtures/ring_bell b/src/tests/fixtures/ring_bell new file mode 100644 index 00000000..ae218f4d --- /dev/null +++ b/src/tests/fixtures/ring_bell @@ -0,0 +1,6 @@ +[?2004h +zellij on  main [!] is 📦 v0.24.0 via 🦀 v1.57.0  +❯ ❯ bell +[?2004l [?2004h +zellij on  main [!] is 📦 v0.24.0 via 🦀 v1.57.0 took 5s +❯ \ No newline at end of file diff --git a/zellij-server/src/panes/grid.rs b/zellij-server/src/panes/grid.rs index 77e2bb39..c1b40b14 100644 --- a/zellij-server/src/panes/grid.rs +++ b/zellij-server/src/panes/grid.rs @@ -399,6 +399,7 @@ pub struct Grid { pub title: Option, pub is_scrolled: bool, pub link_handler: LinkHandler, + pub ring_bell: bool, scrollback_buffer_lines: usize, } @@ -446,6 +447,7 @@ impl Grid { changed_colors: None, is_scrolled: false, link_handler: Default::default(), + ring_bell: false, scrollback_buffer_lines: 0, } } @@ -1506,6 +1508,9 @@ impl Perform for Grid { fn execute(&mut self, byte: u8) { match byte { + 7 => { + self.ring_bell = true; + } 8 => { // backspace self.move_cursor_back(1); diff --git a/zellij-server/src/panes/terminal_pane.rs b/zellij-server/src/panes/terminal_pane.rs index 284d6fe9..bf39229f 100644 --- a/zellij-server/src/panes/terminal_pane.rs +++ b/zellij-server/src/panes/terminal_pane.rs @@ -273,6 +273,11 @@ impl Pane for TerminalPane { } character_styles.clear(); } + if self.grid.ring_bell { + let ring_bell = '\u{7}'; + vte_output.push(ring_bell); + self.grid.ring_bell = false; + } self.set_should_render(false); Some(vte_output) } else { diff --git a/zellij-server/src/panes/unit/grid_tests.rs b/zellij-server/src/panes/unit/grid_tests.rs index c8570021..45fdb776 100644 --- a/zellij-server/src/panes/unit/grid_tests.rs +++ b/zellij-server/src/panes/unit/grid_tests.rs @@ -1078,3 +1078,15 @@ pub fn full_screen_scroll_region_and_scroll_up() { grid.scroll_up_one_line(); assert_snapshot!(format!("{:?}", grid)); } + +#[test] +pub fn ring_bell() { + let mut vte_parser = vte::Parser::new(); + let mut grid = Grid::new(134, 64, Palette::default()); + let fixture_name = "ring_bell"; + let content = read_fixture(fixture_name); + for byte in content { + vte_parser.advance(&mut grid, byte); + } + assert!(grid.ring_bell); +}