From 7f64ca182281709fb515fa41c4747a11c967ebf1 Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Sun, 13 Apr 2025 02:26:12 +0200 Subject: [PATCH] Improved handling of non pseudo-terminal sessions --- src/handler.rs | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/handler.rs b/src/handler.rs index e8abec6..2b8dc40 100644 --- a/src/handler.rs +++ b/src/handler.rs @@ -241,18 +241,11 @@ impl russh::server::Handler for Handler { async fn channel_open_session( &mut self, - channel: russh::Channel, - session: &mut Session, + _channel: russh::Channel, + _session: &mut Session, ) -> Result { trace!("channel_open_session"); - let terminal_handle = TerminalHandle::start(session.handle(), channel.id()).await?; - let backend = CrosstermBackend::new(terminal_handle); - let options = TerminalOptions { - viewport: Viewport::Fixed(Rect::default()), - }; - self.terminal = Some(Terminal::with_options(backend, options)?); - Ok(true) } @@ -385,7 +378,19 @@ impl russh::server::Handler for Handler { ) -> Result<(), Self::Error> { trace!(col_width, row_height, ?channel, "pty_request"); - self.resize(col_width, row_height).await?; + let rect = Rect { + x: 0, + y: 0, + width: col_width as u16, + height: row_height as u16, + }; + let terminal_handle = TerminalHandle::start(session.handle(), channel).await?; + let backend = CrosstermBackend::new(terminal_handle); + let options = TerminalOptions { + viewport: Viewport::Fixed(rect), + }; + self.terminal = Some(Terminal::with_options(backend, options)?); + self.redraw().await?; self.pty_channel = Some(channel);