feat(scroll): Restore scroll position on SIGINT

Fixes #606

Currently scroll down to bottom then exits scroll mode.
This commit is contained in:
Sagittarius-a 2021-07-24 21:28:19 +02:00
parent f5734f2bf1
commit 7da214fcca
6 changed files with 29 additions and 0 deletions

View file

@ -127,6 +127,12 @@ fn route_action(
.send_to_screen(ScreenInstruction::ScrollDownAt(point)) .send_to_screen(ScreenInstruction::ScrollDownAt(point))
.unwrap(); .unwrap();
} }
Action::ScrollToBottom => {
session
.senders
.send_to_screen(ScreenInstruction::ScrollToBottom)
.unwrap();
}
Action::PageScrollUp => { Action::PageScrollUp => {
session session
.senders .senders

View file

@ -50,6 +50,7 @@ pub(crate) enum ScreenInstruction {
ScrollUpAt(Position), ScrollUpAt(Position),
ScrollDown, ScrollDown,
ScrollDownAt(Position), ScrollDownAt(Position),
ScrollToBottom,
PageScrollUp, PageScrollUp,
PageScrollDown, PageScrollDown,
ClearScroll, ClearScroll,
@ -103,6 +104,7 @@ impl From<&ScreenInstruction> for ScreenContext {
ScreenInstruction::Exit => ScreenContext::Exit, ScreenInstruction::Exit => ScreenContext::Exit,
ScreenInstruction::ScrollUp => ScreenContext::ScrollUp, ScreenInstruction::ScrollUp => ScreenContext::ScrollUp,
ScreenInstruction::ScrollDown => ScreenContext::ScrollDown, ScreenInstruction::ScrollDown => ScreenContext::ScrollDown,
ScreenInstruction::ScrollToBottom => ScreenContext::ScrollToBottom,
ScreenInstruction::PageScrollUp => ScreenContext::PageScrollUp, ScreenInstruction::PageScrollUp => ScreenContext::PageScrollUp,
ScreenInstruction::PageScrollDown => ScreenContext::PageScrollDown, ScreenInstruction::PageScrollDown => ScreenContext::PageScrollDown,
ScreenInstruction::ClearScroll => ScreenContext::ClearScroll, ScreenInstruction::ClearScroll => ScreenContext::ClearScroll,
@ -569,6 +571,12 @@ pub(crate) fn screen_thread_main(
.unwrap() .unwrap()
.scroll_terminal_down(&point, 3); .scroll_terminal_down(&point, 3);
} }
ScreenInstruction::ScrollToBottom => {
screen
.get_active_tab_mut()
.unwrap()
.scroll_active_terminal_to_bottom();
}
ScreenInstruction::PageScrollUp => { ScreenInstruction::PageScrollUp => {
screen screen
.get_active_tab_mut() .get_active_tab_mut()

View file

@ -2280,6 +2280,16 @@ impl Tab {
self.render(); self.render();
} }
} }
pub fn scroll_active_terminal_to_bottom(&mut self) {
if let Some(active_terminal_id) = self.get_active_terminal_id() {
let active_terminal = self
.panes
.get_mut(&PaneId::Terminal(active_terminal_id))
.unwrap();
active_terminal.clear_scroll();
self.render();
}
}
pub fn clear_active_terminal_scroll(&mut self) { pub fn clear_active_terminal_scroll(&mut self) {
if let Some(active_terminal_id) = self.get_active_terminal_id() { if let Some(active_terminal_id) = self.get_active_terminal_id() {
let active_terminal = self let active_terminal = self

View file

@ -178,6 +178,8 @@ keybinds:
key: [Ctrl: 'p',] key: [Ctrl: 'p',]
- action: [SwitchToMode: Session,] - action: [SwitchToMode: Session,]
key: [Ctrl: 'o',] key: [Ctrl: 'o',]
- action: [ScrollToBottom, SwitchToMode: Normal,]
key: [Ctrl: 'c',]
- action: [Quit,] - action: [Quit,]
key: [Ctrl: 'q',] key: [Ctrl: 'q',]
- action: [ScrollDown,] - action: [ScrollDown,]

View file

@ -202,6 +202,7 @@ pub enum ScreenContext {
ScrollUpAt, ScrollUpAt,
ScrollDown, ScrollDown,
ScrollDownAt, ScrollDownAt,
ScrollToBottom,
PageScrollUp, PageScrollUp,
PageScrollDown, PageScrollDown,
ClearScroll, ClearScroll,

View file

@ -48,6 +48,8 @@ pub enum Action {
ScrollDown, ScrollDown,
/// Scroll down at point /// Scroll down at point
ScrollDownAt(Position), ScrollDownAt(Position),
/// Scroll down to bottom in focus pane.
ScrollToBottom,
/// Scroll up one page in focus pane. /// Scroll up one page in focus pane.
PageScrollUp, PageScrollUp,
/// Scroll down one page in focus pane. /// Scroll down one page in focus pane.