diff options
author | Jesse Luehrs <doy@tozt.net> | 2021-11-12 16:56:55 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2021-11-12 17:15:55 -0500 |
commit | aab5793085c16cc27805a800cc623806887158c6 (patch) | |
tree | 9a1d5efa8bd2e25f46a328f750cba1da26eea474 /src/history.rs | |
parent | 5b303aa3a8a1185ccd8ea6059436a8273731275a (diff) | |
download | nbsh-aab5793085c16cc27805a800cc623806887158c6.tar.gz nbsh-aab5793085c16cc27805a800cc623806887158c6.zip |
focusing an app using the alternate screen should full-screen it
Diffstat (limited to 'src/history.rs')
-rw-r--r-- | src/history.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/history.rs b/src/history.rs index 0ffb6ea..06678bf 100644 --- a/src/history.rs +++ b/src/history.rs @@ -160,6 +160,28 @@ impl History { repl_lines: usize, focus: Option<usize>, ) -> anyhow::Result<()> { + if let Some(idx) = focus { + let mut entry = self.entries[idx].lock_arc().await; + let screen = entry.vt.screen(); + if screen.alternate_screen() { + let new_audible_bell_state = screen.audible_bell_count(); + let new_visual_bell_state = screen.visual_bell_count(); + + out.write(&screen.state_formatted()); + + if entry.audible_bell_state != new_audible_bell_state { + out.write(b"\x07"); + entry.audible_bell_state = new_audible_bell_state; + } + + if entry.visual_bell_state != new_visual_bell_state { + out.write(b"\x1bg"); + entry.visual_bell_state = new_visual_bell_state; + } + + return Ok(()); + } + } let mut used_lines = repl_lines; let mut pos = None; for (idx, entry) in self.entries.iter().enumerate().rev() { @@ -252,6 +274,8 @@ struct HistoryEntry { cmd: String, pid: nix::unistd::Pid, vt: vt100::Parser, + audible_bell_state: usize, + visual_bell_state: usize, input: async_std::channel::Sender<Vec<u8>>, resize: async_std::channel::Sender<(u16, u16)>, running: bool, // option end time @@ -270,6 +294,8 @@ impl HistoryEntry { cmd: cmd.into(), pid: nix::unistd::Pid::from_raw(pid), vt: vt100::Parser::new(size.0, size.1, 0), + audible_bell_state: 0, + visual_bell_state: 0, input, resize, running: true, |