parent
5ddf95a16c
commit
cf43736656
15 changed files with 511 additions and 504 deletions
|
|
@ -432,7 +432,7 @@ pub fn start(mut os_input: Box<dyn OsApi>, opts: Opt) {
|
||||||
}
|
}
|
||||||
// cleanup();
|
// cleanup();
|
||||||
let reset_style = "\u{1b}[m";
|
let reset_style = "\u{1b}[m";
|
||||||
let goto_start_of_last_line = format!("\u{1b}[{};{}H", full_screen_ws.ws_row, 1);
|
let goto_start_of_last_line = format!("\u{1b}[{};{}H", full_screen_ws.rows, 1);
|
||||||
let goodbye_message = format!(
|
let goodbye_message = format!(
|
||||||
"{}\n{}Bye from Mosaic!",
|
"{}\n{}Bye from Mosaic!",
|
||||||
goto_start_of_last_line, reset_style
|
goto_start_of_last_line, reset_style
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
use crate::terminal_pane::PositionAndSize;
|
||||||
use nix::fcntl::{fcntl, FcntlArg, OFlag};
|
use nix::fcntl::{fcntl, FcntlArg, OFlag};
|
||||||
use nix::pty::{forkpty, Winsize};
|
use nix::pty::{forkpty, Winsize};
|
||||||
use nix::sys::signal::{kill, Signal};
|
use nix::sys::signal::{kill, Signal};
|
||||||
|
|
@ -28,7 +29,7 @@ fn unset_raw_mode(pid: RawFd, mut orig_termios: Termios) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_terminal_size_using_fd(fd: RawFd) -> Winsize {
|
pub fn get_terminal_size_using_fd(fd: RawFd) -> PositionAndSize {
|
||||||
// TODO: do this with the nix ioctl
|
// TODO: do this with the nix ioctl
|
||||||
use libc::ioctl;
|
use libc::ioctl;
|
||||||
use libc::TIOCGWINSZ;
|
use libc::TIOCGWINSZ;
|
||||||
|
|
@ -41,7 +42,7 @@ pub fn get_terminal_size_using_fd(fd: RawFd) -> Winsize {
|
||||||
};
|
};
|
||||||
|
|
||||||
unsafe { ioctl(fd, TIOCGWINSZ.into(), &mut winsize) };
|
unsafe { ioctl(fd, TIOCGWINSZ.into(), &mut winsize) };
|
||||||
winsize
|
PositionAndSize::from(winsize)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_terminal_size_using_fd(fd: RawFd, columns: u16, rows: u16) {
|
pub fn set_terminal_size_using_fd(fd: RawFd, columns: u16, rows: u16) {
|
||||||
|
|
@ -137,7 +138,7 @@ pub struct OsInputOutput {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait OsApi: Send + Sync {
|
pub trait OsApi: Send + Sync {
|
||||||
fn get_terminal_size_using_fd(&self, pid: RawFd) -> Winsize;
|
fn get_terminal_size_using_fd(&self, pid: RawFd) -> PositionAndSize;
|
||||||
fn set_terminal_size_using_fd(&mut self, pid: RawFd, cols: u16, rows: u16);
|
fn set_terminal_size_using_fd(&mut self, pid: RawFd, cols: u16, rows: u16);
|
||||||
fn into_raw_mode(&mut self, pid: RawFd);
|
fn into_raw_mode(&mut self, pid: RawFd);
|
||||||
fn unset_raw_mode(&mut self, pid: RawFd);
|
fn unset_raw_mode(&mut self, pid: RawFd);
|
||||||
|
|
@ -152,7 +153,7 @@ pub trait OsApi: Send + Sync {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl OsApi for OsInputOutput {
|
impl OsApi for OsInputOutput {
|
||||||
fn get_terminal_size_using_fd(&self, pid: RawFd) -> Winsize {
|
fn get_terminal_size_using_fd(&self, pid: RawFd) -> PositionAndSize {
|
||||||
get_terminal_size_using_fd(pid)
|
get_terminal_size_using_fd(pid)
|
||||||
}
|
}
|
||||||
fn set_terminal_size_using_fd(&mut self, pid: RawFd, cols: u16, rows: u16) {
|
fn set_terminal_size_using_fd(&mut self, pid: RawFd, cols: u16, rows: u16) {
|
||||||
|
|
|
||||||
137
src/screen.rs
137
src/screen.rs
|
|
@ -1,4 +1,3 @@
|
||||||
use nix::pty::Winsize;
|
|
||||||
use std::collections::{BTreeMap, HashSet};
|
use std::collections::{BTreeMap, HashSet};
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use std::os::unix::io::RawFd;
|
use std::os::unix::io::RawFd;
|
||||||
|
|
@ -23,29 +22,29 @@ const CURSOR_HEIGHT_WIDTH_RATIO: usize = 4; // this is not accurate and kind of
|
||||||
|
|
||||||
type BorderAndPaneIds = (usize, Vec<RawFd>);
|
type BorderAndPaneIds = (usize, Vec<RawFd>);
|
||||||
|
|
||||||
fn split_vertically_with_gap(rect: &Winsize) -> (Winsize, Winsize) {
|
fn split_vertically_with_gap(rect: &PositionAndSize) -> (PositionAndSize, PositionAndSize) {
|
||||||
let width_of_each_half = (rect.ws_col - 1) / 2;
|
let width_of_each_half = (rect.columns - 1) / 2;
|
||||||
let mut first_rect = rect.clone();
|
let mut first_rect = rect.clone();
|
||||||
let mut second_rect = rect.clone();
|
let mut second_rect = rect.clone();
|
||||||
if rect.ws_col % 2 == 0 {
|
if rect.columns % 2 == 0 {
|
||||||
first_rect.ws_col = width_of_each_half + 1;
|
first_rect.columns = width_of_each_half + 1;
|
||||||
} else {
|
} else {
|
||||||
first_rect.ws_col = width_of_each_half;
|
first_rect.columns = width_of_each_half;
|
||||||
}
|
}
|
||||||
second_rect.ws_col = width_of_each_half;
|
second_rect.columns = width_of_each_half;
|
||||||
(first_rect, second_rect)
|
(first_rect, second_rect)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn split_horizontally_with_gap(rect: &Winsize) -> (Winsize, Winsize) {
|
fn split_horizontally_with_gap(rect: &PositionAndSize) -> (PositionAndSize, PositionAndSize) {
|
||||||
let height_of_each_half = (rect.ws_row - 1) / 2;
|
let height_of_each_half = (rect.rows - 1) / 2;
|
||||||
let mut first_rect = rect.clone();
|
let mut first_rect = rect.clone();
|
||||||
let mut second_rect = rect.clone();
|
let mut second_rect = rect.clone();
|
||||||
if rect.ws_row % 2 == 0 {
|
if rect.rows % 2 == 0 {
|
||||||
first_rect.ws_row = height_of_each_half + 1;
|
first_rect.rows = height_of_each_half + 1;
|
||||||
} else {
|
} else {
|
||||||
first_rect.ws_row = height_of_each_half;
|
first_rect.rows = height_of_each_half;
|
||||||
}
|
}
|
||||||
second_rect.ws_row = height_of_each_half;
|
second_rect.rows = height_of_each_half;
|
||||||
(first_rect, second_rect)
|
(first_rect, second_rect)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -77,7 +76,7 @@ pub struct Screen {
|
||||||
max_panes: Option<usize>,
|
max_panes: Option<usize>,
|
||||||
send_pty_instructions: Sender<PtyInstruction>,
|
send_pty_instructions: Sender<PtyInstruction>,
|
||||||
send_app_instructions: Sender<AppInstruction>,
|
send_app_instructions: Sender<AppInstruction>,
|
||||||
full_screen_ws: Winsize,
|
full_screen_ws: PositionAndSize,
|
||||||
terminals: BTreeMap<RawFd, TerminalPane>, // BTreeMap because we need a predictable order when changing focus
|
terminals: BTreeMap<RawFd, TerminalPane>, // BTreeMap because we need a predictable order when changing focus
|
||||||
panes_to_hide: HashSet<RawFd>,
|
panes_to_hide: HashSet<RawFd>,
|
||||||
active_terminal: Option<RawFd>,
|
active_terminal: Option<RawFd>,
|
||||||
|
|
@ -90,7 +89,7 @@ impl Screen {
|
||||||
receive_screen_instructions: Receiver<ScreenInstruction>,
|
receive_screen_instructions: Receiver<ScreenInstruction>,
|
||||||
send_pty_instructions: Sender<PtyInstruction>,
|
send_pty_instructions: Sender<PtyInstruction>,
|
||||||
send_app_instructions: Sender<AppInstruction>,
|
send_app_instructions: Sender<AppInstruction>,
|
||||||
full_screen_ws: &Winsize,
|
full_screen_ws: &PositionAndSize,
|
||||||
os_api: Box<dyn OsApi>,
|
os_api: Box<dyn OsApi>,
|
||||||
max_panes: Option<usize>,
|
max_panes: Option<usize>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
|
|
@ -114,8 +113,8 @@ impl Screen {
|
||||||
let free_space = PositionAndSize {
|
let free_space = PositionAndSize {
|
||||||
x: 0,
|
x: 0,
|
||||||
y: 0,
|
y: 0,
|
||||||
rows: self.full_screen_ws.ws_row as usize,
|
rows: self.full_screen_ws.rows,
|
||||||
columns: self.full_screen_ws.ws_col as usize,
|
columns: self.full_screen_ws.columns,
|
||||||
};
|
};
|
||||||
let positions_in_layout = layout.position_panes_in_space(&free_space);
|
let positions_in_layout = layout.position_panes_in_space(&free_space);
|
||||||
let mut positions_and_size = positions_in_layout.iter();
|
let mut positions_and_size = positions_in_layout.iter();
|
||||||
|
|
@ -204,56 +203,48 @@ impl Screen {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
let terminal_to_split = self.terminals.get_mut(&terminal_id_to_split).unwrap();
|
let terminal_to_split = self.terminals.get_mut(&terminal_id_to_split).unwrap();
|
||||||
let terminal_ws = Winsize {
|
let terminal_ws = PositionAndSize {
|
||||||
ws_row: terminal_to_split.get_rows() as u16,
|
rows: terminal_to_split.get_rows(),
|
||||||
ws_col: terminal_to_split.get_columns() as u16,
|
columns: terminal_to_split.get_columns(),
|
||||||
ws_xpixel: terminal_to_split.get_x() as u16,
|
x: terminal_to_split.get_x(),
|
||||||
ws_ypixel: terminal_to_split.get_y() as u16,
|
y: terminal_to_split.get_y(),
|
||||||
};
|
};
|
||||||
if terminal_to_split.get_rows() * CURSOR_HEIGHT_WIDTH_RATIO
|
if terminal_to_split.get_rows() * CURSOR_HEIGHT_WIDTH_RATIO
|
||||||
> terminal_to_split.get_columns()
|
> terminal_to_split.get_columns()
|
||||||
{
|
{
|
||||||
let (top_winsize, bottom_winsize) = split_horizontally_with_gap(&terminal_ws);
|
let (top_winsize, bottom_winsize) = split_horizontally_with_gap(&terminal_ws);
|
||||||
let bottom_half_y = terminal_ws.ws_ypixel + top_winsize.ws_row + 1;
|
let bottom_half_y = terminal_ws.y + top_winsize.rows + 1;
|
||||||
let new_terminal = TerminalPane::new(
|
let new_terminal =
|
||||||
pid,
|
TerminalPane::new(pid, bottom_winsize, terminal_ws.x, bottom_half_y);
|
||||||
bottom_winsize,
|
|
||||||
terminal_ws.ws_xpixel as usize,
|
|
||||||
bottom_half_y as usize,
|
|
||||||
);
|
|
||||||
self.os_api.set_terminal_size_using_fd(
|
self.os_api.set_terminal_size_using_fd(
|
||||||
new_terminal.pid,
|
new_terminal.pid,
|
||||||
bottom_winsize.ws_col,
|
bottom_winsize.columns as u16,
|
||||||
bottom_winsize.ws_row,
|
bottom_winsize.rows as u16,
|
||||||
);
|
);
|
||||||
terminal_to_split.change_size(&top_winsize);
|
terminal_to_split.change_size(&top_winsize);
|
||||||
self.terminals.insert(pid, new_terminal);
|
self.terminals.insert(pid, new_terminal);
|
||||||
self.os_api.set_terminal_size_using_fd(
|
self.os_api.set_terminal_size_using_fd(
|
||||||
terminal_id_to_split,
|
terminal_id_to_split,
|
||||||
top_winsize.ws_col,
|
top_winsize.columns as u16,
|
||||||
top_winsize.ws_row,
|
top_winsize.rows as u16,
|
||||||
);
|
);
|
||||||
self.active_terminal = Some(pid);
|
self.active_terminal = Some(pid);
|
||||||
} else {
|
} else {
|
||||||
let (left_winszie, right_winsize) = split_vertically_with_gap(&terminal_ws);
|
let (left_winszie, right_winsize) = split_vertically_with_gap(&terminal_ws);
|
||||||
let right_side_x = (terminal_ws.ws_xpixel + left_winszie.ws_col + 1) as usize;
|
let right_side_x = (terminal_ws.x + left_winszie.columns + 1) as usize;
|
||||||
let new_terminal = TerminalPane::new(
|
let new_terminal =
|
||||||
pid,
|
TerminalPane::new(pid, right_winsize, right_side_x, terminal_ws.y);
|
||||||
right_winsize,
|
|
||||||
right_side_x,
|
|
||||||
terminal_ws.ws_ypixel as usize,
|
|
||||||
);
|
|
||||||
self.os_api.set_terminal_size_using_fd(
|
self.os_api.set_terminal_size_using_fd(
|
||||||
new_terminal.pid,
|
new_terminal.pid,
|
||||||
right_winsize.ws_col,
|
right_winsize.columns as u16,
|
||||||
right_winsize.ws_row,
|
right_winsize.rows as u16,
|
||||||
);
|
);
|
||||||
terminal_to_split.change_size(&left_winszie);
|
terminal_to_split.change_size(&left_winszie);
|
||||||
self.terminals.insert(pid, new_terminal);
|
self.terminals.insert(pid, new_terminal);
|
||||||
self.os_api.set_terminal_size_using_fd(
|
self.os_api.set_terminal_size_using_fd(
|
||||||
terminal_id_to_split,
|
terminal_id_to_split,
|
||||||
left_winszie.ws_col,
|
left_winszie.columns as u16,
|
||||||
left_winszie.ws_row,
|
left_winszie.rows as u16,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
self.active_terminal = Some(pid);
|
self.active_terminal = Some(pid);
|
||||||
|
|
@ -281,24 +272,24 @@ impl Screen {
|
||||||
let (active_terminal_ws, active_terminal_x, active_terminal_y) = {
|
let (active_terminal_ws, active_terminal_x, active_terminal_y) = {
|
||||||
let active_terminal = &self.get_active_terminal().unwrap();
|
let active_terminal = &self.get_active_terminal().unwrap();
|
||||||
(
|
(
|
||||||
Winsize {
|
PositionAndSize {
|
||||||
ws_row: active_terminal.get_rows() as u16,
|
rows: active_terminal.get_rows(),
|
||||||
ws_col: active_terminal.get_columns() as u16,
|
columns: active_terminal.get_columns(),
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
},
|
},
|
||||||
active_terminal.get_x(),
|
active_terminal.get_x(),
|
||||||
active_terminal.get_y(),
|
active_terminal.get_y(),
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
let (top_winsize, bottom_winsize) = split_horizontally_with_gap(&active_terminal_ws);
|
let (top_winsize, bottom_winsize) = split_horizontally_with_gap(&active_terminal_ws);
|
||||||
let bottom_half_y = active_terminal_y + top_winsize.ws_row as usize + 1;
|
let bottom_half_y = active_terminal_y + top_winsize.rows + 1;
|
||||||
let new_terminal =
|
let new_terminal =
|
||||||
TerminalPane::new(pid, bottom_winsize, active_terminal_x, bottom_half_y);
|
TerminalPane::new(pid, bottom_winsize, active_terminal_x, bottom_half_y);
|
||||||
self.os_api.set_terminal_size_using_fd(
|
self.os_api.set_terminal_size_using_fd(
|
||||||
new_terminal.pid,
|
new_terminal.pid,
|
||||||
bottom_winsize.ws_col,
|
bottom_winsize.columns as u16,
|
||||||
bottom_winsize.ws_row,
|
bottom_winsize.rows as u16,
|
||||||
);
|
);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
@ -311,8 +302,8 @@ impl Screen {
|
||||||
let active_terminal_pid = self.get_active_terminal_id().unwrap();
|
let active_terminal_pid = self.get_active_terminal_id().unwrap();
|
||||||
self.os_api.set_terminal_size_using_fd(
|
self.os_api.set_terminal_size_using_fd(
|
||||||
active_terminal_pid,
|
active_terminal_pid,
|
||||||
top_winsize.ws_col,
|
top_winsize.columns as u16,
|
||||||
top_winsize.ws_row,
|
top_winsize.rows as u16,
|
||||||
);
|
);
|
||||||
self.active_terminal = Some(pid);
|
self.active_terminal = Some(pid);
|
||||||
self.render();
|
self.render();
|
||||||
|
|
@ -339,24 +330,24 @@ impl Screen {
|
||||||
let (active_terminal_ws, active_terminal_x, active_terminal_y) = {
|
let (active_terminal_ws, active_terminal_x, active_terminal_y) = {
|
||||||
let active_terminal = &self.get_active_terminal().unwrap();
|
let active_terminal = &self.get_active_terminal().unwrap();
|
||||||
(
|
(
|
||||||
Winsize {
|
PositionAndSize {
|
||||||
ws_row: active_terminal.get_rows() as u16,
|
rows: active_terminal.get_rows(),
|
||||||
ws_col: active_terminal.get_columns() as u16,
|
columns: active_terminal.get_columns(),
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
},
|
},
|
||||||
active_terminal.get_x(),
|
active_terminal.get_x(),
|
||||||
active_terminal.get_y(),
|
active_terminal.get_y(),
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
let (left_winszie, right_winsize) = split_vertically_with_gap(&active_terminal_ws);
|
let (left_winszie, right_winsize) = split_vertically_with_gap(&active_terminal_ws);
|
||||||
let right_side_x = active_terminal_x + left_winszie.ws_col as usize + 1;
|
let right_side_x = active_terminal_x + left_winszie.columns + 1;
|
||||||
let new_terminal =
|
let new_terminal =
|
||||||
TerminalPane::new(pid, right_winsize, right_side_x, active_terminal_y);
|
TerminalPane::new(pid, right_winsize, right_side_x, active_terminal_y);
|
||||||
self.os_api.set_terminal_size_using_fd(
|
self.os_api.set_terminal_size_using_fd(
|
||||||
new_terminal.pid,
|
new_terminal.pid,
|
||||||
right_winsize.ws_col,
|
right_winsize.columns as u16,
|
||||||
right_winsize.ws_row,
|
right_winsize.rows as u16,
|
||||||
);
|
);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
@ -369,8 +360,8 @@ impl Screen {
|
||||||
let active_terminal_pid = self.get_active_terminal_id().unwrap();
|
let active_terminal_pid = self.get_active_terminal_id().unwrap();
|
||||||
self.os_api.set_terminal_size_using_fd(
|
self.os_api.set_terminal_size_using_fd(
|
||||||
active_terminal_pid,
|
active_terminal_pid,
|
||||||
left_winszie.ws_col,
|
left_winszie.columns as u16,
|
||||||
left_winszie.ws_row,
|
left_winszie.rows as u16,
|
||||||
);
|
);
|
||||||
self.active_terminal = Some(pid);
|
self.active_terminal = Some(pid);
|
||||||
self.render();
|
self.render();
|
||||||
|
|
@ -464,8 +455,10 @@ impl Screen {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let mut stdout = self.os_api.get_stdout_writer();
|
let mut stdout = self.os_api.get_stdout_writer();
|
||||||
let mut boundaries =
|
let mut boundaries = Boundaries::new(
|
||||||
Boundaries::new(self.full_screen_ws.ws_col, self.full_screen_ws.ws_row);
|
self.full_screen_ws.columns as u16,
|
||||||
|
self.full_screen_ws.rows as u16,
|
||||||
|
);
|
||||||
for (pid, terminal) in self.terminals.iter_mut() {
|
for (pid, terminal) in self.terminals.iter_mut() {
|
||||||
if !self.panes_to_hide.contains(pid) {
|
if !self.panes_to_hide.contains(pid) {
|
||||||
boundaries.add_rect(&terminal);
|
boundaries.add_rect(&terminal);
|
||||||
|
|
@ -658,7 +651,7 @@ impl Screen {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// bottom-most border aligned with a pane border to the right
|
// bottom-most border aligned with a pane border to the right
|
||||||
let mut bottom_resize_border = self.full_screen_ws.ws_row as usize;
|
let mut bottom_resize_border = self.full_screen_ws.rows;
|
||||||
for terminal in &terminals {
|
for terminal in &terminals {
|
||||||
let top_terminal_boundary = terminal.get_y();
|
let top_terminal_boundary = terminal.get_y();
|
||||||
if terminal_borders_to_the_right
|
if terminal_borders_to_the_right
|
||||||
|
|
@ -736,7 +729,7 @@ impl Screen {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// bottom-most border aligned with a pane border to the left
|
// bottom-most border aligned with a pane border to the left
|
||||||
let mut bottom_resize_border = self.full_screen_ws.ws_row as usize;
|
let mut bottom_resize_border = self.full_screen_ws.rows;
|
||||||
for terminal in &terminals {
|
for terminal in &terminals {
|
||||||
let top_terminal_boundary = terminal.get_y();
|
let top_terminal_boundary = terminal.get_y();
|
||||||
if terminal_borders_to_the_left
|
if terminal_borders_to_the_left
|
||||||
|
|
@ -817,7 +810,7 @@ impl Screen {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// rightmost border aligned with a pane border above
|
// rightmost border aligned with a pane border above
|
||||||
let mut right_resize_border = self.full_screen_ws.ws_col as usize;
|
let mut right_resize_border = self.full_screen_ws.columns;
|
||||||
for terminal in &terminals {
|
for terminal in &terminals {
|
||||||
let left_terminal_boundary = terminal.get_x();
|
let left_terminal_boundary = terminal.get_x();
|
||||||
if terminal_borders_above
|
if terminal_borders_above
|
||||||
|
|
@ -896,7 +889,7 @@ impl Screen {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// leftmost border aligned with a pane border above
|
// leftmost border aligned with a pane border above
|
||||||
let mut right_resize_border = self.full_screen_ws.ws_col as usize;
|
let mut right_resize_border = self.full_screen_ws.columns;
|
||||||
for terminal in &terminals {
|
for terminal in &terminals {
|
||||||
let left_terminal_boundary = terminal.get_x();
|
let left_terminal_boundary = terminal.get_x();
|
||||||
if terminal_borders_below
|
if terminal_borders_below
|
||||||
|
|
@ -1217,11 +1210,11 @@ impl Screen {
|
||||||
}
|
}
|
||||||
fn panes_exist_below(&self, pane_id: &RawFd) -> bool {
|
fn panes_exist_below(&self, pane_id: &RawFd) -> bool {
|
||||||
let pane = self.terminals.get(pane_id).expect("pane does not exist");
|
let pane = self.terminals.get(pane_id).expect("pane does not exist");
|
||||||
pane.get_y() + pane.get_rows() < self.full_screen_ws.ws_row as usize
|
pane.get_y() + pane.get_rows() < self.full_screen_ws.rows
|
||||||
}
|
}
|
||||||
fn panes_exist_to_the_right(&self, pane_id: &RawFd) -> bool {
|
fn panes_exist_to_the_right(&self, pane_id: &RawFd) -> bool {
|
||||||
let pane = self.terminals.get(pane_id).expect("pane does not exist");
|
let pane = self.terminals.get(pane_id).expect("pane does not exist");
|
||||||
pane.get_x() + pane.get_columns() < self.full_screen_ws.ws_col as usize
|
pane.get_x() + pane.get_columns() < self.full_screen_ws.columns
|
||||||
}
|
}
|
||||||
fn panes_exist_to_the_left(&self, pane_id: &RawFd) -> bool {
|
fn panes_exist_to_the_left(&self, pane_id: &RawFd) -> bool {
|
||||||
let pane = self.terminals.get(pane_id).expect("pane does not exist");
|
let pane = self.terminals.get(pane_id).expect("pane does not exist");
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,17 @@ pub struct PositionAndSize {
|
||||||
pub columns: usize,
|
pub columns: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl PositionAndSize {
|
||||||
|
pub fn from(winsize: Winsize) -> PositionAndSize {
|
||||||
|
PositionAndSize {
|
||||||
|
columns: winsize.ws_col as usize,
|
||||||
|
rows: winsize.ws_row as usize,
|
||||||
|
x: winsize.ws_xpixel as usize,
|
||||||
|
y: winsize.ws_ypixel as usize,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct TerminalPane {
|
pub struct TerminalPane {
|
||||||
pub pid: RawFd,
|
pub pid: RawFd,
|
||||||
|
|
@ -44,14 +55,14 @@ impl Rect for &mut TerminalPane {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TerminalPane {
|
impl TerminalPane {
|
||||||
pub fn new(pid: RawFd, ws: Winsize, x: usize, y: usize) -> TerminalPane {
|
pub fn new(pid: RawFd, ws: PositionAndSize, x: usize, y: usize) -> TerminalPane {
|
||||||
let scroll = Scroll::new(ws.ws_col as usize, ws.ws_row as usize);
|
let scroll = Scroll::new(ws.columns, ws.rows);
|
||||||
let pending_styles = CharacterStyles::new();
|
let pending_styles = CharacterStyles::new();
|
||||||
let position_and_size = PositionAndSize {
|
let position_and_size = PositionAndSize {
|
||||||
x,
|
x,
|
||||||
y,
|
y,
|
||||||
rows: ws.ws_row as usize,
|
rows: ws.rows,
|
||||||
columns: ws.ws_col as usize,
|
columns: ws.columns,
|
||||||
};
|
};
|
||||||
TerminalPane {
|
TerminalPane {
|
||||||
pid,
|
pid,
|
||||||
|
|
@ -145,9 +156,9 @@ impl TerminalPane {
|
||||||
self.mark_for_rerender();
|
self.mark_for_rerender();
|
||||||
}
|
}
|
||||||
// TODO: merge these two methods
|
// TODO: merge these two methods
|
||||||
pub fn change_size(&mut self, ws: &Winsize) {
|
pub fn change_size(&mut self, ws: &PositionAndSize) {
|
||||||
self.position_and_size.columns = ws.ws_col as usize;
|
self.position_and_size.columns = ws.columns;
|
||||||
self.position_and_size.rows = ws.ws_row as usize;
|
self.position_and_size.rows = ws.rows;
|
||||||
self.reflow_lines();
|
self.reflow_lines();
|
||||||
self.mark_for_rerender();
|
self.mark_for_rerender();
|
||||||
}
|
}
|
||||||
|
|
@ -247,12 +258,12 @@ impl TerminalPane {
|
||||||
self.scroll.reset_viewport();
|
self.scroll.reset_viewport();
|
||||||
self.mark_for_rerender();
|
self.mark_for_rerender();
|
||||||
}
|
}
|
||||||
pub fn override_size_and_position(&mut self, x: usize, y: usize, size: &Winsize) {
|
pub fn override_size_and_position(&mut self, x: usize, y: usize, size: &PositionAndSize) {
|
||||||
let position_and_size_override = PositionAndSize {
|
let position_and_size_override = PositionAndSize {
|
||||||
x,
|
x,
|
||||||
y,
|
y,
|
||||||
rows: size.ws_row as usize,
|
rows: size.rows,
|
||||||
columns: size.ws_col as usize,
|
columns: size.columns,
|
||||||
};
|
};
|
||||||
self.position_and_size_override = Some(position_and_size_override);
|
self.position_and_size_override = Some(position_and_size_override);
|
||||||
self.reflow_lines();
|
self.reflow_lines();
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use ::nix::pty::Winsize;
|
use crate::terminal_pane::PositionAndSize;
|
||||||
use ::std::collections::HashMap;
|
use ::std::collections::HashMap;
|
||||||
use ::std::io::{Read, Write};
|
use ::std::io::{Read, Write};
|
||||||
use ::std::os::unix::io::RawFd;
|
use ::std::os::unix::io::RawFd;
|
||||||
|
|
@ -80,12 +80,12 @@ pub struct FakeInputOutput {
|
||||||
stdin_writes: Arc<Mutex<HashMap<RawFd, Vec<u8>>>>,
|
stdin_writes: Arc<Mutex<HashMap<RawFd, Vec<u8>>>>,
|
||||||
pub stdout_writer: FakeStdoutWriter, // stdout_writer.output is already an arc/mutex
|
pub stdout_writer: FakeStdoutWriter, // stdout_writer.output is already an arc/mutex
|
||||||
io_events: Arc<Mutex<Vec<IoEvent>>>,
|
io_events: Arc<Mutex<Vec<IoEvent>>>,
|
||||||
win_sizes: Arc<Mutex<HashMap<RawFd, Winsize>>>,
|
win_sizes: Arc<Mutex<HashMap<RawFd, PositionAndSize>>>,
|
||||||
possible_tty_inputs: HashMap<u16, Bytes>,
|
possible_tty_inputs: HashMap<u16, Bytes>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FakeInputOutput {
|
impl FakeInputOutput {
|
||||||
pub fn new(winsize: Winsize) -> Self {
|
pub fn new(winsize: PositionAndSize) -> Self {
|
||||||
let mut win_sizes = HashMap::new();
|
let mut win_sizes = HashMap::new();
|
||||||
win_sizes.insert(0, winsize); // 0 is the current terminal
|
win_sizes.insert(0, winsize); // 0 is the current terminal
|
||||||
FakeInputOutput {
|
FakeInputOutput {
|
||||||
|
|
@ -111,7 +111,7 @@ impl FakeInputOutput {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl OsApi for FakeInputOutput {
|
impl OsApi for FakeInputOutput {
|
||||||
fn get_terminal_size_using_fd(&self, pid: RawFd) -> Winsize {
|
fn get_terminal_size_using_fd(&self, pid: RawFd) -> PositionAndSize {
|
||||||
let win_sizes = self.win_sizes.lock().unwrap();
|
let win_sizes = self.win_sizes.lock().unwrap();
|
||||||
let winsize = win_sizes.get(&pid).unwrap();
|
let winsize = win_sizes.get(&pid).unwrap();
|
||||||
*winsize
|
*winsize
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
|
use crate::terminal_pane::PositionAndSize;
|
||||||
use ::insta::assert_snapshot;
|
use ::insta::assert_snapshot;
|
||||||
use ::nix::pty::Winsize;
|
|
||||||
|
|
||||||
use crate::tests::fakes::FakeInputOutput;
|
use crate::tests::fakes::FakeInputOutput;
|
||||||
use crate::tests::utils::commands::{
|
use crate::tests::utils::commands::{
|
||||||
|
|
@ -9,17 +9,17 @@ use crate::tests::utils::commands::{
|
||||||
use crate::tests::utils::get_output_frame_snapshots;
|
use crate::tests::utils::get_output_frame_snapshots;
|
||||||
use crate::{start, Opt};
|
use crate::{start, Opt};
|
||||||
|
|
||||||
fn get_fake_os_input(fake_win_size: &Winsize) -> FakeInputOutput {
|
fn get_fake_os_input(fake_win_size: &PositionAndSize) -> FakeInputOutput {
|
||||||
FakeInputOutput::new(fake_win_size.clone())
|
FakeInputOutput::new(fake_win_size.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn starts_with_one_terminal() {
|
pub fn starts_with_one_terminal() {
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[QUIT]);
|
fake_input_output.add_terminal_input(&[QUIT]);
|
||||||
|
|
@ -37,11 +37,11 @@ pub fn starts_with_one_terminal() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn split_terminals_vertically() {
|
pub fn split_terminals_vertically() {
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[SPLIT_VERTICALLY, QUIT]);
|
fake_input_output.add_terminal_input(&[SPLIT_VERTICALLY, QUIT]);
|
||||||
|
|
@ -59,11 +59,11 @@ pub fn split_terminals_vertically() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn split_terminals_horizontally() {
|
pub fn split_terminals_horizontally() {
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[SPLIT_HORIZONTALLY, QUIT]);
|
fake_input_output.add_terminal_input(&[SPLIT_HORIZONTALLY, QUIT]);
|
||||||
|
|
@ -82,11 +82,11 @@ pub fn split_terminals_horizontally() {
|
||||||
#[test]
|
#[test]
|
||||||
pub fn split_largest_terminal() {
|
pub fn split_largest_terminal() {
|
||||||
// this finds the largest pane and splits along its longest edge (vertically or horizontally)
|
// this finds the largest pane and splits along its longest edge (vertically or horizontally)
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[SPAWN_TERMINAL, SPAWN_TERMINAL, SPAWN_TERMINAL, QUIT]);
|
fake_input_output.add_terminal_input(&[SPAWN_TERMINAL, SPAWN_TERMINAL, SPAWN_TERMINAL, QUIT]);
|
||||||
|
|
@ -119,11 +119,11 @@ pub fn resize_right_and_up_on_the_same_axis() {
|
||||||
// │█████│ │ │█████│ │
|
// │█████│ │ │█████│ │
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 40,
|
rows: 40,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -153,11 +153,11 @@ pub fn resize_right_and_up_on_the_same_axis() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn scrolling_inside_a_pane() {
|
pub fn scrolling_inside_a_pane() {
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -185,11 +185,11 @@ pub fn scrolling_inside_a_pane() {
|
||||||
pub fn max_panes() {
|
pub fn max_panes() {
|
||||||
// with the --max-panes option, we only allow a certain amount of panes on screen
|
// with the --max-panes option, we only allow a certain amount of panes on screen
|
||||||
// simultaneously, new panes beyond this limit will close older panes on screen
|
// simultaneously, new panes beyond this limit will close older panes on screen
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -215,11 +215,11 @@ pub fn max_panes() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn toggle_focused_pane_fullscreen() {
|
pub fn toggle_focused_pane_fullscreen() {
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
|
use crate::terminal_pane::PositionAndSize;
|
||||||
use ::insta::assert_snapshot;
|
use ::insta::assert_snapshot;
|
||||||
use ::nix::pty::Winsize;
|
|
||||||
|
|
||||||
use crate::tests::fakes::FakeInputOutput;
|
use crate::tests::fakes::FakeInputOutput;
|
||||||
use crate::tests::utils::get_output_frame_snapshots;
|
use crate::tests::utils::get_output_frame_snapshots;
|
||||||
|
|
@ -10,7 +10,7 @@ use crate::tests::utils::commands::{
|
||||||
SPLIT_VERTICALLY,
|
SPLIT_VERTICALLY,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn get_fake_os_input(fake_win_size: &Winsize) -> FakeInputOutput {
|
fn get_fake_os_input(fake_win_size: &PositionAndSize) -> FakeInputOutput {
|
||||||
FakeInputOutput::new(fake_win_size.clone())
|
FakeInputOutput::new(fake_win_size.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -24,11 +24,11 @@ pub fn close_pane_with_another_pane_above_it() {
|
||||||
// │███████████│ │xxxxxxxxxxx│
|
// │███████████│ │xxxxxxxxxxx│
|
||||||
// └───────────┘ └───────────┘
|
// └───────────┘ └───────────┘
|
||||||
// █ == pane being closed
|
// █ == pane being closed
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[SPLIT_HORIZONTALLY, CLOSE_FOCUSED_PANE, QUIT]);
|
fake_input_output.add_terminal_input(&[SPLIT_HORIZONTALLY, CLOSE_FOCUSED_PANE, QUIT]);
|
||||||
|
|
@ -55,11 +55,11 @@ pub fn close_pane_with_another_pane_below_it() {
|
||||||
// │xxxxxxxxxxx│ │xxxxxxxxxxx│
|
// │xxxxxxxxxxx│ │xxxxxxxxxxx│
|
||||||
// └───────────┘ └───────────┘
|
// └───────────┘ └───────────┘
|
||||||
// █ == pane being closed
|
// █ == pane being closed
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -89,11 +89,11 @@ pub fn close_pane_with_another_pane_to_the_left() {
|
||||||
// │xxxxx│█████│ │xxxxxxxxxx│
|
// │xxxxx│█████│ │xxxxxxxxxx│
|
||||||
// └─────┴─────┘ └──────────┘
|
// └─────┴─────┘ └──────────┘
|
||||||
// █ == pane being closed
|
// █ == pane being closed
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[SPLIT_VERTICALLY, CLOSE_FOCUSED_PANE, QUIT]);
|
fake_input_output.add_terminal_input(&[SPLIT_VERTICALLY, CLOSE_FOCUSED_PANE, QUIT]);
|
||||||
|
|
@ -118,11 +118,11 @@ pub fn close_pane_with_another_pane_to_the_right() {
|
||||||
// │█████│xxxxx│ │xxxxxxxxxx│
|
// │█████│xxxxx│ │xxxxxxxxxx│
|
||||||
// └─────┴─────┘ └──────────┘
|
// └─────┴─────┘ └──────────┘
|
||||||
// █ == pane being closed
|
// █ == pane being closed
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[SPLIT_VERTICALLY, MOVE_FOCUS, CLOSE_FOCUSED_PANE, QUIT]);
|
fake_input_output.add_terminal_input(&[SPLIT_VERTICALLY, MOVE_FOCUS, CLOSE_FOCUSED_PANE, QUIT]);
|
||||||
|
|
@ -149,11 +149,11 @@ pub fn close_pane_with_multiple_panes_above_it() {
|
||||||
// │███████████│ │xxxxx│xxxxx│
|
// │███████████│ │xxxxx│xxxxx│
|
||||||
// └───────────┘ └─────┴─────┘
|
// └───────────┘ └─────┴─────┘
|
||||||
// █ == pane being closed
|
// █ == pane being closed
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -188,11 +188,11 @@ pub fn close_pane_with_multiple_panes_below_it() {
|
||||||
// │xxxxx│xxxxx│ │xxxxx│xxxxx│
|
// │xxxxx│xxxxx│ │xxxxx│xxxxx│
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == pane being closed
|
// █ == pane being closed
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -225,11 +225,11 @@ pub fn close_pane_with_multiple_panes_to_the_left() {
|
||||||
// │xxxxx│█████│ │xxxxxxxxxx│
|
// │xxxxx│█████│ │xxxxxxxxxx│
|
||||||
// └─────┴─────┘ └──────────┘
|
// └─────┴─────┘ └──────────┘
|
||||||
// █ == pane being closed
|
// █ == pane being closed
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -264,11 +264,11 @@ pub fn close_pane_with_multiple_panes_to_the_right() {
|
||||||
// │█████│xxxxx│ │xxxxxxxxxx│
|
// │█████│xxxxx│ │xxxxxxxxxx│
|
||||||
// └─────┴─────┘ └──────────┘
|
// └─────┴─────┘ └──────────┘
|
||||||
// █ == pane being closed
|
// █ == pane being closed
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -301,11 +301,11 @@ pub fn close_pane_with_multiple_panes_above_it_away_from_screen_edges() {
|
||||||
// │xxx│███████│xxx│ │xxx│xxx│xxx│xxx│
|
// │xxx│███████│xxx│ │xxx│xxx│xxx│xxx│
|
||||||
// └───┴───────┴───┘ └───┴───┴───┴───┘
|
// └───┴───────┴───┘ └───┴───┴───┴───┘
|
||||||
// █ == pane being closed
|
// █ == pane being closed
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -352,11 +352,11 @@ pub fn close_pane_with_multiple_panes_below_it_away_from_screen_edges() {
|
||||||
// │xxx│xxx│xxx│xxx│ │xxx│xxx│xxx│xxx│
|
// │xxx│xxx│xxx│xxx│ │xxx│xxx│xxx│xxx│
|
||||||
// └───┴───┴───┴───┘ └───┴───┴───┴───┘
|
// └───┴───┴───┴───┘ └───┴───┴───┴───┘
|
||||||
// █ == pane being closed
|
// █ == pane being closed
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -405,11 +405,11 @@ pub fn close_pane_with_multiple_panes_to_the_left_away_from_screen_edges() {
|
||||||
// │xxxx│xxxxxx│ │xxxx│xxxxxx│
|
// │xxxx│xxxxxx│ │xxxx│xxxxxx│
|
||||||
// └────┴──────┘ └────┴──────┘
|
// └────┴──────┘ └────┴──────┘
|
||||||
// █ == pane being closed
|
// █ == pane being closed
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -458,11 +458,11 @@ pub fn close_pane_with_multiple_panes_to_the_right_away_from_screen_edges() {
|
||||||
// │xxxx│xxxxxx│ │xxxx│xxxxxx│
|
// │xxxx│xxxxxx│ │xxxx│xxxxxx│
|
||||||
// └────┴──────┘ └────┴──────┘
|
// └────┴──────┘ └────┴──────┘
|
||||||
// █ == pane being closed
|
// █ == pane being closed
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -501,11 +501,11 @@ pub fn close_pane_with_multiple_panes_to_the_right_away_from_screen_edges() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn closing_last_pane_exits_app() {
|
pub fn closing_last_pane_exits_app() {
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,13 @@
|
||||||
use ::insta::assert_snapshot;
|
use ::insta::assert_snapshot;
|
||||||
use ::nix::pty::Winsize;
|
|
||||||
use ::std::collections::HashMap;
|
use ::std::collections::HashMap;
|
||||||
|
|
||||||
|
use crate::terminal_pane::PositionAndSize;
|
||||||
use crate::tests::fakes::FakeInputOutput;
|
use crate::tests::fakes::FakeInputOutput;
|
||||||
use crate::tests::possible_tty_inputs::Bytes;
|
use crate::tests::possible_tty_inputs::Bytes;
|
||||||
|
use crate::tests::utils::commands::QUIT;
|
||||||
use crate::tests::utils::get_output_frame_snapshots;
|
use crate::tests::utils::get_output_frame_snapshots;
|
||||||
use crate::{start, Opt};
|
use crate::{start, Opt};
|
||||||
|
|
||||||
use crate::tests::utils::commands::QUIT;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These tests are general compatibility tests for non-trivial scenarios running in the terminal.
|
* These tests are general compatibility tests for non-trivial scenarios running in the terminal.
|
||||||
* They use fake TTY input replicated from these scenarios (and so don't actually interact with the
|
* They use fake TTY input replicated from these scenarios (and so don't actually interact with the
|
||||||
|
|
@ -22,20 +21,20 @@ use crate::tests::utils::commands::QUIT;
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
fn get_fake_os_input(fake_win_size: &Winsize, fixture_name: &str) -> FakeInputOutput {
|
fn get_fake_os_input(fake_win_size: &PositionAndSize, fixture_name: &str) -> FakeInputOutput {
|
||||||
let mut tty_inputs = HashMap::new();
|
let mut tty_inputs = HashMap::new();
|
||||||
let fixture_bytes = Bytes::from_file_in_fixtures(&fixture_name);
|
let fixture_bytes = Bytes::from_file_in_fixtures(&fixture_name);
|
||||||
tty_inputs.insert(fake_win_size.ws_col, fixture_bytes);
|
tty_inputs.insert(fake_win_size.columns as u16, fixture_bytes);
|
||||||
FakeInputOutput::new(fake_win_size.clone()).with_tty_inputs(tty_inputs)
|
FakeInputOutput::new(fake_win_size.clone()).with_tty_inputs(tty_inputs)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn run_bandwhich_from_fish_shell() {
|
pub fn run_bandwhich_from_fish_shell() {
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 116,
|
columns: 116,
|
||||||
ws_row: 28,
|
rows: 28,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let fixture_name = "fish_and_bandwhich";
|
let fixture_name = "fish_and_bandwhich";
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size, fixture_name);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size, fixture_name);
|
||||||
|
|
@ -54,11 +53,11 @@ pub fn run_bandwhich_from_fish_shell() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn fish_tab_completion_options() {
|
pub fn fish_tab_completion_options() {
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 116,
|
columns: 116,
|
||||||
ws_row: 28,
|
rows: 28,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let fixture_name = "fish_tab_completion_options";
|
let fixture_name = "fish_tab_completion_options";
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size, fixture_name);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size, fixture_name);
|
||||||
|
|
@ -82,11 +81,11 @@ pub fn fish_select_tab_completion_options() {
|
||||||
// changes.
|
// changes.
|
||||||
// this is not clearly seen in the snapshot because it does not include styles,
|
// this is not clearly seen in the snapshot because it does not include styles,
|
||||||
// but we can see the command line change and the cursor staying in place
|
// but we can see the command line change and the cursor staying in place
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 116,
|
columns: 116,
|
||||||
ws_row: 28,
|
rows: 28,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let fixture_name = "fish_select_tab_completion_options";
|
let fixture_name = "fish_select_tab_completion_options";
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size, fixture_name);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size, fixture_name);
|
||||||
|
|
@ -114,11 +113,11 @@ pub fn vim_scroll_region_down() {
|
||||||
// this tests also has other steps afterwards that fills the line with the next line in the
|
// this tests also has other steps afterwards that fills the line with the next line in the
|
||||||
// file
|
// file
|
||||||
// experience appear to the user
|
// experience appear to the user
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 116,
|
columns: 116,
|
||||||
ws_row: 28,
|
rows: 28,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let fixture_name = "vim_scroll_region_down";
|
let fixture_name = "vim_scroll_region_down";
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size, fixture_name);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size, fixture_name);
|
||||||
|
|
@ -144,11 +143,11 @@ pub fn vim_ctrl_d() {
|
||||||
// what happens here is that 13 lines are deleted and instead 13 empty lines are added at the
|
// what happens here is that 13 lines are deleted and instead 13 empty lines are added at the
|
||||||
// end of the scroll region
|
// end of the scroll region
|
||||||
// vim makes sure to fill these empty lines with the rest of the file
|
// vim makes sure to fill these empty lines with the rest of the file
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 116,
|
columns: 116,
|
||||||
ws_row: 28,
|
rows: 28,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let fixture_name = "vim_ctrl_d";
|
let fixture_name = "vim_ctrl_d";
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size, fixture_name);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size, fixture_name);
|
||||||
|
|
@ -172,11 +171,11 @@ pub fn vim_ctrl_u() {
|
||||||
// this case) lines at the cursor, pushing away (deleting) the last line in the scroll region
|
// this case) lines at the cursor, pushing away (deleting) the last line in the scroll region
|
||||||
// this causes the effect of scrolling up X lines (vim replaces the lines with the ones in the
|
// this causes the effect of scrolling up X lines (vim replaces the lines with the ones in the
|
||||||
// file above the current content)
|
// file above the current content)
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 116,
|
columns: 116,
|
||||||
ws_row: 28,
|
rows: 28,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let fixture_name = "vim_ctrl_u";
|
let fixture_name = "vim_ctrl_u";
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size, fixture_name);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size, fixture_name);
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,22 @@
|
||||||
use ::insta::assert_snapshot;
|
use ::insta::assert_snapshot;
|
||||||
use ::nix::pty::Winsize;
|
|
||||||
|
|
||||||
|
use crate::terminal_pane::PositionAndSize;
|
||||||
use crate::tests::fakes::FakeInputOutput;
|
use crate::tests::fakes::FakeInputOutput;
|
||||||
use crate::tests::utils::commands::QUIT;
|
use crate::tests::utils::commands::QUIT;
|
||||||
use crate::tests::utils::get_output_frame_snapshots;
|
use crate::tests::utils::get_output_frame_snapshots;
|
||||||
use crate::{start, Opt};
|
use crate::{start, Opt};
|
||||||
|
|
||||||
fn get_fake_os_input(fake_win_size: &Winsize) -> FakeInputOutput {
|
fn get_fake_os_input(fake_win_size: &PositionAndSize) -> FakeInputOutput {
|
||||||
FakeInputOutput::new(fake_win_size.clone())
|
FakeInputOutput::new(fake_win_size.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn accepts_basic_layout() {
|
pub fn accepts_basic_layout() {
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[QUIT]);
|
fake_input_output.add_terminal_input(&[QUIT]);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use ::insta::assert_snapshot;
|
use ::insta::assert_snapshot;
|
||||||
use ::nix::pty::Winsize;
|
|
||||||
|
|
||||||
|
use crate::terminal_pane::PositionAndSize;
|
||||||
use crate::tests::fakes::FakeInputOutput;
|
use crate::tests::fakes::FakeInputOutput;
|
||||||
use crate::tests::utils::get_output_frame_snapshots;
|
use crate::tests::utils::get_output_frame_snapshots;
|
||||||
use crate::{start, Opt};
|
use crate::{start, Opt};
|
||||||
|
|
@ -9,7 +9,7 @@ use crate::tests::utils::commands::{
|
||||||
MOVE_FOCUS, QUIT, RESIZE_DOWN, RESIZE_LEFT, SPLIT_HORIZONTALLY, SPLIT_VERTICALLY,
|
MOVE_FOCUS, QUIT, RESIZE_DOWN, RESIZE_LEFT, SPLIT_HORIZONTALLY, SPLIT_VERTICALLY,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn get_fake_os_input(fake_win_size: &Winsize) -> FakeInputOutput {
|
fn get_fake_os_input(fake_win_size: &PositionAndSize) -> FakeInputOutput {
|
||||||
FakeInputOutput::new(fake_win_size.clone())
|
FakeInputOutput::new(fake_win_size.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -24,11 +24,11 @@ pub fn resize_down_with_pane_above() {
|
||||||
// │███████████│ │███████████│
|
// │███████████│ │███████████│
|
||||||
// └───────────┘ └───────────┘
|
// └───────────┘ └───────────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[SPLIT_HORIZONTALLY, RESIZE_DOWN, QUIT]);
|
fake_input_output.add_terminal_input(&[SPLIT_HORIZONTALLY, RESIZE_DOWN, QUIT]);
|
||||||
|
|
@ -55,11 +55,11 @@ pub fn resize_down_with_pane_below() {
|
||||||
// │ │ │ │
|
// │ │ │ │
|
||||||
// └───────────┘ └───────────┘
|
// └───────────┘ └───────────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[SPLIT_HORIZONTALLY, MOVE_FOCUS, RESIZE_DOWN, QUIT]);
|
fake_input_output.add_terminal_input(&[SPLIT_HORIZONTALLY, MOVE_FOCUS, RESIZE_DOWN, QUIT]);
|
||||||
|
|
@ -89,11 +89,11 @@ pub fn resize_down_with_panes_above_and_below() {
|
||||||
// │ │ │ │
|
// │ │ │ │
|
||||||
// └───────────┘ └───────────┘
|
// └───────────┘ └───────────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -127,11 +127,11 @@ pub fn resize_down_with_multiple_panes_above() {
|
||||||
// │███████████│ │███████████│
|
// │███████████│ │███████████│
|
||||||
// └───────────┘ └───────────┘
|
// └───────────┘ └───────────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -168,11 +168,11 @@ pub fn resize_down_with_panes_above_aligned_left_with_current_pane() {
|
||||||
// │ │█████│ │ │█████│
|
// │ │█████│ │ │█████│
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -211,11 +211,11 @@ pub fn resize_down_with_panes_below_aligned_left_with_current_pane() {
|
||||||
// │ │ │ │ │ │
|
// │ │ │ │ │ │
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -253,11 +253,11 @@ pub fn resize_down_with_panes_above_aligned_right_with_current_pane() {
|
||||||
// │█████│ │ │█████│ │
|
// │█████│ │ │█████│ │
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -293,11 +293,11 @@ pub fn resize_down_with_panes_below_aligned_right_with_current_pane() {
|
||||||
// │ │ │ │ │ │
|
// │ │ │ │ │ │
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -334,11 +334,11 @@ pub fn resize_down_with_panes_above_aligned_left_and_right_with_current_pane() {
|
||||||
// │ │███│ │ │ │███│ │
|
// │ │███│ │ │ │███│ │
|
||||||
// └───┴───┴───┘ └───┴───┴───┘
|
// └───┴───┴───┘ └───┴───┴───┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -378,11 +378,11 @@ pub fn resize_down_with_panes_below_aligned_left_and_right_with_current_pane() {
|
||||||
// │ │ │ │ │ │ │ │
|
// │ │ │ │ │ │ │ │
|
||||||
// └───┴───┴───┘ └───┴───┴───┘
|
// └───┴───┴───┘ └───┴───┴───┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -424,11 +424,11 @@ pub fn resize_down_with_panes_above_aligned_left_and_right_with_panes_to_the_lef
|
||||||
// │ │ │███│ │ │ │ │ │███│ │ │
|
// │ │ │███│ │ │ │ │ │███│ │ │
|
||||||
// └─┴─┴───┴─┴─┘ └─┴─┴───┴─┴─┘
|
// └─┴─┴───┴─┴─┘ └─┴─┴───┴─┴─┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 40,
|
rows: 40,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -485,11 +485,11 @@ pub fn resize_down_with_panes_below_aligned_left_and_right_with_to_the_left_and_
|
||||||
// │ │ │ │ │ │ │ │
|
// │ │ │ │ │ │ │ │
|
||||||
// └─┴───────┴─┘ └─┴───────┴─┘
|
// └─┴───────┴─┘ └─┴───────┴─┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 40,
|
rows: 40,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use ::insta::assert_snapshot;
|
use ::insta::assert_snapshot;
|
||||||
use ::nix::pty::Winsize;
|
|
||||||
|
|
||||||
|
use crate::terminal_pane::PositionAndSize;
|
||||||
use crate::tests::fakes::FakeInputOutput;
|
use crate::tests::fakes::FakeInputOutput;
|
||||||
use crate::tests::utils::get_output_frame_snapshots;
|
use crate::tests::utils::get_output_frame_snapshots;
|
||||||
use crate::{start, Opt};
|
use crate::{start, Opt};
|
||||||
|
|
@ -9,7 +9,7 @@ use crate::tests::utils::commands::{
|
||||||
MOVE_FOCUS, QUIT, RESIZE_LEFT, RESIZE_UP, SPLIT_HORIZONTALLY, SPLIT_VERTICALLY,
|
MOVE_FOCUS, QUIT, RESIZE_LEFT, RESIZE_UP, SPLIT_HORIZONTALLY, SPLIT_VERTICALLY,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn get_fake_os_input(fake_win_size: &Winsize) -> FakeInputOutput {
|
fn get_fake_os_input(fake_win_size: &PositionAndSize) -> FakeInputOutput {
|
||||||
FakeInputOutput::new(fake_win_size.clone())
|
FakeInputOutput::new(fake_win_size.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -21,11 +21,11 @@ pub fn resize_left_with_pane_to_the_left() {
|
||||||
// │ │█████│ │ │███████│
|
// │ │█████│ │ │███████│
|
||||||
// └─────┴─────┘ └───┴───────┘
|
// └─────┴─────┘ └───┴───────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[SPLIT_VERTICALLY, RESIZE_LEFT, QUIT]);
|
fake_input_output.add_terminal_input(&[SPLIT_VERTICALLY, RESIZE_LEFT, QUIT]);
|
||||||
|
|
@ -50,11 +50,11 @@ pub fn resize_left_with_pane_to_the_right() {
|
||||||
// │█████│ │ │███│ │
|
// │█████│ │ │███│ │
|
||||||
// └─────┴─────┘ └───┴───────┘
|
// └─────┴─────┘ └───┴───────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[SPLIT_VERTICALLY, MOVE_FOCUS, RESIZE_LEFT, QUIT]);
|
fake_input_output.add_terminal_input(&[SPLIT_VERTICALLY, MOVE_FOCUS, RESIZE_LEFT, QUIT]);
|
||||||
|
|
@ -79,11 +79,11 @@ pub fn resize_left_with_panes_to_the_left_and_right() {
|
||||||
// │ │█████│ │ │ │███│ │
|
// │ │█████│ │ │ │███│ │
|
||||||
// └─────┴─────┴─────┘ └─────┴───┴───────┘
|
// └─────┴─────┴─────┘ └─────┴───┴───────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -115,11 +115,11 @@ pub fn resize_left_with_multiple_panes_to_the_left() {
|
||||||
// │ │█████│ │ │███████│
|
// │ │█████│ │ │███████│
|
||||||
// └─────┴─────┘ └───┴───────┘
|
// └─────┴─────┘ └───┴───────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -154,11 +154,11 @@ pub fn resize_left_with_panes_to_the_left_aligned_top_with_current_pane() {
|
||||||
// │ │█████│ │ │███████│
|
// │ │█████│ │ │███████│
|
||||||
// └─────┴─────┘ └───┴───────┘
|
// └─────┴─────┘ └───┴───────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -195,11 +195,11 @@ pub fn resize_left_with_panes_to_the_right_aligned_top_with_current_pane() {
|
||||||
// │█████│ │ │███│ │
|
// │█████│ │ │███│ │
|
||||||
// └─────┴─────┘ └───┴───────┘
|
// └─────┴─────┘ └───┴───────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -233,11 +233,11 @@ pub fn resize_left_with_panes_to_the_left_aligned_bottom_with_current_pane() {
|
||||||
// │ │ │ │ │ │
|
// │ │ │ │ │ │
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -273,11 +273,11 @@ pub fn resize_left_with_panes_to_the_right_aligned_bottom_with_current_pane() {
|
||||||
// │ │ │ │ │ │
|
// │ │ │ │ │ │
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -314,11 +314,11 @@ pub fn resize_left_with_panes_to_the_left_aligned_top_and_bottom_with_current_pa
|
||||||
// │ │ │ │ │ │
|
// │ │ │ │ │ │
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -358,11 +358,11 @@ pub fn resize_left_with_panes_to_the_right_aligned_top_and_bottom_with_current_p
|
||||||
// │ │ │ │ │ │
|
// │ │ │ │ │ │
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -404,11 +404,11 @@ pub fn resize_left_with_panes_to_the_left_aligned_top_and_bottom_with_panes_abov
|
||||||
// ├─────┼─────┤ ├───┴─┬─────┤
|
// ├─────┼─────┤ ├───┴─┬─────┤
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 40,
|
rows: 40,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -465,12 +465,12 @@ pub fn resize_left_with_panes_to_the_right_aligned_top_and_bottom_with_panes_abo
|
||||||
// ├─────┼─────┤ ├───┴─┬─────┤
|
// ├─────┼─────┤ ├───┴─┬─────┤
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
// TODO: combine with above
|
// TODO: combine with above
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 40,
|
rows: 40,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use ::insta::assert_snapshot;
|
use ::insta::assert_snapshot;
|
||||||
use ::nix::pty::Winsize;
|
|
||||||
|
|
||||||
|
use crate::terminal_pane::PositionAndSize;
|
||||||
use crate::tests::fakes::FakeInputOutput;
|
use crate::tests::fakes::FakeInputOutput;
|
||||||
use crate::tests::utils::get_output_frame_snapshots;
|
use crate::tests::utils::get_output_frame_snapshots;
|
||||||
use crate::{start, Opt};
|
use crate::{start, Opt};
|
||||||
|
|
@ -9,7 +9,7 @@ use crate::tests::utils::commands::{
|
||||||
MOVE_FOCUS, QUIT, RESIZE_RIGHT, RESIZE_UP, SPLIT_HORIZONTALLY, SPLIT_VERTICALLY,
|
MOVE_FOCUS, QUIT, RESIZE_RIGHT, RESIZE_UP, SPLIT_HORIZONTALLY, SPLIT_VERTICALLY,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn get_fake_os_input(fake_win_size: &Winsize) -> FakeInputOutput {
|
fn get_fake_os_input(fake_win_size: &PositionAndSize) -> FakeInputOutput {
|
||||||
FakeInputOutput::new(fake_win_size.clone())
|
FakeInputOutput::new(fake_win_size.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -21,11 +21,11 @@ pub fn resize_right_with_pane_to_the_left() {
|
||||||
// │ │█████│ │ │███│
|
// │ │█████│ │ │███│
|
||||||
// └─────┴─────┘ └───────┴───┘
|
// └─────┴─────┘ └───────┴───┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[SPLIT_VERTICALLY, RESIZE_RIGHT, QUIT]);
|
fake_input_output.add_terminal_input(&[SPLIT_VERTICALLY, RESIZE_RIGHT, QUIT]);
|
||||||
|
|
@ -50,11 +50,11 @@ pub fn resize_right_with_pane_to_the_right() {
|
||||||
// │█████│ │ │███████│ │
|
// │█████│ │ │███████│ │
|
||||||
// └─────┴─────┘ └───────┴───┘
|
// └─────┴─────┘ └───────┴───┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[SPLIT_VERTICALLY, MOVE_FOCUS, RESIZE_RIGHT, QUIT]);
|
fake_input_output.add_terminal_input(&[SPLIT_VERTICALLY, MOVE_FOCUS, RESIZE_RIGHT, QUIT]);
|
||||||
|
|
@ -79,11 +79,11 @@ pub fn resize_right_with_panes_to_the_left_and_right() {
|
||||||
// │ │█████│ │ │ │███████│ │
|
// │ │█████│ │ │ │███████│ │
|
||||||
// └─────┴─────┴─────┘ └─────┴───────┴───┘
|
// └─────┴─────┴─────┘ └─────┴───────┴───┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -115,11 +115,11 @@ pub fn resize_right_with_multiple_panes_to_the_left() {
|
||||||
// │ │█████│ │ │███│
|
// │ │█████│ │ │███│
|
||||||
// └─────┴─────┘ └───────┴───┘
|
// └─────┴─────┘ └───────┴───┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -154,11 +154,11 @@ pub fn resize_right_with_panes_to_the_left_aligned_top_with_current_pane() {
|
||||||
// │ │█████│ │ │███│
|
// │ │█████│ │ │███│
|
||||||
// └─────┴─────┘ └───────┴───┘
|
// └─────┴─────┘ └───────┴───┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -195,11 +195,11 @@ pub fn resize_right_with_panes_to_the_right_aligned_top_with_current_pane() {
|
||||||
// │█████│ │ │███████│ │
|
// │█████│ │ │███████│ │
|
||||||
// └─────┴─────┘ └───────┴───┘
|
// └─────┴─────┘ └───────┴───┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -233,11 +233,11 @@ pub fn resize_right_with_panes_to_the_left_aligned_bottom_with_current_pane() {
|
||||||
// │ │ │ │ │ │
|
// │ │ │ │ │ │
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -273,11 +273,11 @@ pub fn resize_right_with_panes_to_the_right_aligned_bottom_with_current_pane() {
|
||||||
// │ │ │ │ │ │
|
// │ │ │ │ │ │
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -314,11 +314,11 @@ pub fn resize_right_with_panes_to_the_left_aligned_top_and_bottom_with_current_p
|
||||||
// │ │ │ │ │ │
|
// │ │ │ │ │ │
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -358,11 +358,11 @@ pub fn resize_right_with_panes_to_the_right_aligned_top_and_bottom_with_current_
|
||||||
// │ │ │ │ │ │
|
// │ │ │ │ │ │
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -404,11 +404,11 @@ pub fn resize_right_with_panes_to_the_left_aligned_top_and_bottom_with_panes_abo
|
||||||
// ├─────┼─────┤ ├─────┬─┴───┤
|
// ├─────┼─────┤ ├─────┬─┴───┤
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 40,
|
rows: 40,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -465,11 +465,11 @@ pub fn resize_right_with_panes_to_the_right_aligned_top_and_bottom_with_panes_ab
|
||||||
// ├─────┼─────┤ ├─────┬─┴───┤
|
// ├─────┼─────┤ ├─────┬─┴───┤
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 40,
|
rows: 40,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use ::insta::assert_snapshot;
|
use ::insta::assert_snapshot;
|
||||||
use ::nix::pty::Winsize;
|
|
||||||
|
|
||||||
|
use crate::terminal_pane::PositionAndSize;
|
||||||
use crate::tests::fakes::FakeInputOutput;
|
use crate::tests::fakes::FakeInputOutput;
|
||||||
use crate::tests::utils::get_output_frame_snapshots;
|
use crate::tests::utils::get_output_frame_snapshots;
|
||||||
use crate::{start, Opt};
|
use crate::{start, Opt};
|
||||||
|
|
@ -9,7 +9,7 @@ use crate::tests::utils::commands::{
|
||||||
MOVE_FOCUS, QUIT, RESIZE_LEFT, RESIZE_UP, SPLIT_HORIZONTALLY, SPLIT_VERTICALLY,
|
MOVE_FOCUS, QUIT, RESIZE_LEFT, RESIZE_UP, SPLIT_HORIZONTALLY, SPLIT_VERTICALLY,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn get_fake_os_input(fake_win_size: &Winsize) -> FakeInputOutput {
|
fn get_fake_os_input(fake_win_size: &PositionAndSize) -> FakeInputOutput {
|
||||||
FakeInputOutput::new(fake_win_size.clone())
|
FakeInputOutput::new(fake_win_size.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -23,11 +23,11 @@ pub fn resize_up_with_pane_above() {
|
||||||
// │███████████│ │███████████│
|
// │███████████│ │███████████│
|
||||||
// └───────────┘ └───────────┘
|
// └───────────┘ └───────────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[SPLIT_HORIZONTALLY, RESIZE_UP, QUIT]);
|
fake_input_output.add_terminal_input(&[SPLIT_HORIZONTALLY, RESIZE_UP, QUIT]);
|
||||||
|
|
@ -54,11 +54,11 @@ pub fn resize_up_with_pane_below() {
|
||||||
// │ │ │ │
|
// │ │ │ │
|
||||||
// └───────────┘ └───────────┘
|
// └───────────┘ └───────────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[SPLIT_HORIZONTALLY, MOVE_FOCUS, RESIZE_UP, QUIT]);
|
fake_input_output.add_terminal_input(&[SPLIT_HORIZONTALLY, MOVE_FOCUS, RESIZE_UP, QUIT]);
|
||||||
|
|
@ -88,11 +88,11 @@ pub fn resize_up_with_panes_above_and_below() {
|
||||||
// │ │ │ │
|
// │ │ │ │
|
||||||
// └───────────┘ └───────────┘
|
// └───────────┘ └───────────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -125,11 +125,11 @@ pub fn resize_up_with_multiple_panes_above() {
|
||||||
// │███████████│ │███████████│
|
// │███████████│ │███████████│
|
||||||
// └───────────┘ └───────────┘
|
// └───────────┘ └───────────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -164,11 +164,11 @@ pub fn resize_up_with_panes_above_aligned_left_with_current_pane() {
|
||||||
// │ │█████│ │ │█████│
|
// │ │█████│ │ │█████│
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -207,11 +207,11 @@ pub fn resize_up_with_panes_below_aligned_left_with_current_pane() {
|
||||||
// │ │ │ │ │ │
|
// │ │ │ │ │ │
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -249,11 +249,11 @@ pub fn resize_up_with_panes_above_aligned_right_with_current_pane() {
|
||||||
// │█████│ │ │█████│ │
|
// │█████│ │ │█████│ │
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -289,11 +289,11 @@ pub fn resize_up_with_panes_below_aligned_right_with_current_pane() {
|
||||||
// │ │ │ │ │ │
|
// │ │ │ │ │ │
|
||||||
// └─────┴─────┘ └─────┴─────┘
|
// └─────┴─────┘ └─────┴─────┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -330,11 +330,11 @@ pub fn resize_up_with_panes_above_aligned_left_and_right_with_current_pane() {
|
||||||
// │ │███│ │ │ │███│ │
|
// │ │███│ │ │ │███│ │
|
||||||
// └───┴───┴───┘ └───┴───┴───┘
|
// └───┴───┴───┘ └───┴───┴───┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -374,11 +374,11 @@ pub fn resize_up_with_panes_below_aligned_left_and_right_with_current_pane() {
|
||||||
// │ │ │ │ │ │ │ │
|
// │ │ │ │ │ │ │ │
|
||||||
// └───┴───┴───┘ └───┴───┴───┘
|
// └───┴───┴───┘ └───┴───┴───┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -420,11 +420,11 @@ pub fn resize_up_with_panes_above_aligned_left_and_right_with_panes_to_the_left_
|
||||||
// │ │ │███│ │ │ │ │ │███│ │ │
|
// │ │ │███│ │ │ │ │ │███│ │ │
|
||||||
// └─┴─┴───┴─┴─┘ └─┴─┴───┴─┴─┘
|
// └─┴─┴───┴─┴─┘ └─┴─┴───┴─┴─┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 40,
|
rows: 40,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
@ -481,11 +481,11 @@ pub fn resize_up_with_panes_below_aligned_left_and_right_with_to_the_left_and_ri
|
||||||
// │ │ │ │ │ │ │ │
|
// │ │ │ │ │ │ │ │
|
||||||
// └─┴───────┴─┘ └─┴───────┴─┘
|
// └─┴───────┴─┘ └─┴───────┴─┘
|
||||||
// █ == focused pane
|
// █ == focused pane
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 40,
|
rows: 40,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use ::insta::assert_snapshot;
|
use ::insta::assert_snapshot;
|
||||||
use ::nix::pty::Winsize;
|
|
||||||
|
|
||||||
|
use crate::terminal_pane::PositionAndSize;
|
||||||
use crate::tests::fakes::FakeInputOutput;
|
use crate::tests::fakes::FakeInputOutput;
|
||||||
use crate::tests::utils::get_output_frame_snapshots;
|
use crate::tests::utils::get_output_frame_snapshots;
|
||||||
use crate::{start, Opt};
|
use crate::{start, Opt};
|
||||||
|
|
@ -10,17 +10,17 @@ use crate::tests::utils::commands::{
|
||||||
TOGGLE_ACTIVE_TERMINAL_FULLSCREEN,
|
TOGGLE_ACTIVE_TERMINAL_FULLSCREEN,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn get_fake_os_input(fake_win_size: &Winsize) -> FakeInputOutput {
|
fn get_fake_os_input(fake_win_size: &PositionAndSize) -> FakeInputOutput {
|
||||||
FakeInputOutput::new(fake_win_size.clone())
|
FakeInputOutput::new(fake_win_size.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn adding_new_terminal_in_fullscreen() {
|
pub fn adding_new_terminal_in_fullscreen() {
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
@ -45,11 +45,11 @@ pub fn adding_new_terminal_in_fullscreen() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn move_focus_is_disabled_in_fullscreen() {
|
pub fn move_focus_is_disabled_in_fullscreen() {
|
||||||
let fake_win_size = Winsize {
|
let fake_win_size = PositionAndSize {
|
||||||
ws_col: 121,
|
columns: 121,
|
||||||
ws_row: 20,
|
rows: 20,
|
||||||
ws_xpixel: 0,
|
x: 0,
|
||||||
ws_ypixel: 0,
|
y: 0,
|
||||||
};
|
};
|
||||||
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
let mut fake_input_output = get_fake_os_input(&fake_win_size);
|
||||||
fake_input_output.add_terminal_input(&[
|
fake_input_output.add_terminal_input(&[
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,10 @@
|
||||||
|
use crate::terminal_pane::PositionAndSize;
|
||||||
use crate::terminal_pane::TerminalPane;
|
use crate::terminal_pane::TerminalPane;
|
||||||
use ::nix::pty::Winsize;
|
|
||||||
|
|
||||||
pub fn get_output_frame_snapshots(output_frames: &[Vec<u8>], win_size: &Winsize) -> Vec<String> {
|
pub fn get_output_frame_snapshots(
|
||||||
|
output_frames: &[Vec<u8>],
|
||||||
|
win_size: &PositionAndSize,
|
||||||
|
) -> Vec<String> {
|
||||||
let mut vte_parser = vte::Parser::new();
|
let mut vte_parser = vte::Parser::new();
|
||||||
let main_pid = 0;
|
let main_pid = 0;
|
||||||
let x = 0;
|
let x = 0;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue