commit
aba71c2e4e
4 changed files with 34 additions and 33 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
//! `Tab`s holds multiple panes. It tracks their coordinates (x/y) and size, as well as how they should be resized
|
//! `Tab`s holds multiple panes. It tracks their coordinates (x/y) and size,
|
||||||
|
//! as well as how they should be resized
|
||||||
|
|
||||||
use crate::common::{AppInstruction, SenderWithContext};
|
use crate::common::{AppInstruction, SenderWithContext};
|
||||||
use crate::panes::{PaneId, PositionAndSize, TerminalPane};
|
use crate::panes::{PaneId, PositionAndSize, TerminalPane};
|
||||||
|
|
@ -296,9 +297,8 @@ impl Tab {
|
||||||
* terminal_to_check.columns();
|
* terminal_to_check.columns();
|
||||||
let terminal_can_be_split = terminal_to_check.columns() >= MIN_TERMINAL_WIDTH
|
let terminal_can_be_split = terminal_to_check.columns() >= MIN_TERMINAL_WIDTH
|
||||||
&& terminal_to_check.rows() >= MIN_TERMINAL_HEIGHT
|
&& terminal_to_check.rows() >= MIN_TERMINAL_HEIGHT
|
||||||
&& ((terminal_to_check.columns() >= terminal_to_check.min_width() * 2 + 1)
|
&& ((terminal_to_check.columns() > terminal_to_check.min_width() * 2)
|
||||||
|| (terminal_to_check.rows()
|
|| (terminal_to_check.rows() > terminal_to_check.min_height() * 2));
|
||||||
>= terminal_to_check.min_height() * 2 + 1));
|
|
||||||
if terminal_can_be_split && terminal_size > current_largest_terminal_size {
|
if terminal_can_be_split && terminal_size > current_largest_terminal_size {
|
||||||
(terminal_size, Some(*id_of_terminal_to_check))
|
(terminal_size, Some(*id_of_terminal_to_check))
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -321,7 +321,7 @@ impl Tab {
|
||||||
y: terminal_to_split.y(),
|
y: terminal_to_split.y(),
|
||||||
};
|
};
|
||||||
if terminal_to_split.rows() * CURSOR_HEIGHT_WIDTH_RATIO > terminal_to_split.columns()
|
if terminal_to_split.rows() * CURSOR_HEIGHT_WIDTH_RATIO > terminal_to_split.columns()
|
||||||
&& terminal_to_split.rows() >= terminal_to_split.min_height() * 2 + 1
|
&& terminal_to_split.rows() > terminal_to_split.min_height() * 2
|
||||||
{
|
{
|
||||||
// FIXME: This could use a second look
|
// FIXME: This could use a second look
|
||||||
if let PaneId::Terminal(term_pid) = pid {
|
if let PaneId::Terminal(term_pid) = pid {
|
||||||
|
|
@ -343,7 +343,7 @@ impl Tab {
|
||||||
}
|
}
|
||||||
self.active_terminal = Some(pid);
|
self.active_terminal = Some(pid);
|
||||||
}
|
}
|
||||||
} else if terminal_to_split.columns() >= terminal_to_split.min_width() * 2 + 1 {
|
} else if terminal_to_split.columns() > terminal_to_split.min_width() * 2 {
|
||||||
// FIXME: This could use a second look
|
// FIXME: This could use a second look
|
||||||
if let PaneId::Terminal(term_pid) = pid {
|
if let PaneId::Terminal(term_pid) = pid {
|
||||||
let (left_winsize, right_winsize) = split_vertically_with_gap(&terminal_ws);
|
let (left_winsize, right_winsize) = split_vertically_with_gap(&terminal_ws);
|
||||||
|
|
@ -1437,7 +1437,7 @@ impl Tab {
|
||||||
p.columns() > increase_by && p.columns() - increase_by >= p.min_width()
|
p.columns() > increase_by && p.columns() - increase_by >= p.min_width()
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
return false;
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn can_increase_pane_and_surroundings_left(
|
fn can_increase_pane_and_surroundings_left(
|
||||||
|
|
@ -1459,7 +1459,7 @@ impl Tab {
|
||||||
p.columns() > increase_by && p.columns() - increase_by >= p.min_width()
|
p.columns() > increase_by && p.columns() - increase_by >= p.min_width()
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
return false;
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn can_increase_pane_and_surroundings_down(
|
fn can_increase_pane_and_surroundings_down(
|
||||||
|
|
@ -1481,7 +1481,7 @@ impl Tab {
|
||||||
p.rows() > increase_by && p.rows() - increase_by >= p.min_height()
|
p.rows() > increase_by && p.rows() - increase_by >= p.min_height()
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
return false;
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn can_increase_pane_and_surroundings_up(&self, pane_id: &PaneId, increase_by: usize) -> bool {
|
fn can_increase_pane_and_surroundings_up(&self, pane_id: &PaneId, increase_by: usize) -> bool {
|
||||||
|
|
@ -1499,7 +1499,7 @@ impl Tab {
|
||||||
p.rows() > increase_by && p.rows() - increase_by >= p.min_height()
|
p.rows() > increase_by && p.rows() - increase_by >= p.min_height()
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
return false;
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn can_reduce_pane_and_surroundings_right(&self, pane_id: &PaneId, reduce_by: usize) -> bool {
|
fn can_reduce_pane_and_surroundings_right(&self, pane_id: &PaneId, reduce_by: usize) -> bool {
|
||||||
|
|
@ -1518,7 +1518,7 @@ impl Tab {
|
||||||
.unwrap_or(true) // no max width, increase to your heart's content
|
.unwrap_or(true) // no max width, increase to your heart's content
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
return false;
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn can_reduce_pane_and_surroundings_left(&self, pane_id: &PaneId, reduce_by: usize) -> bool {
|
fn can_reduce_pane_and_surroundings_left(&self, pane_id: &PaneId, reduce_by: usize) -> bool {
|
||||||
|
|
@ -1537,7 +1537,7 @@ impl Tab {
|
||||||
.unwrap_or(true) // no max width, increase to your heart's content
|
.unwrap_or(true) // no max width, increase to your heart's content
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
return false;
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn can_reduce_pane_and_surroundings_down(&self, pane_id: &PaneId, reduce_by: usize) -> bool {
|
fn can_reduce_pane_and_surroundings_down(&self, pane_id: &PaneId, reduce_by: usize) -> bool {
|
||||||
|
|
@ -1556,7 +1556,7 @@ impl Tab {
|
||||||
.unwrap_or(true) // no max height, increase to your heart's content
|
.unwrap_or(true) // no max height, increase to your heart's content
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
return false;
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn can_reduce_pane_and_surroundings_up(&self, pane_id: &PaneId, reduce_by: usize) -> bool {
|
fn can_reduce_pane_and_surroundings_up(&self, pane_id: &PaneId, reduce_by: usize) -> bool {
|
||||||
|
|
@ -1575,7 +1575,7 @@ impl Tab {
|
||||||
.unwrap_or(true) // no max height, increase to your heart's content
|
.unwrap_or(true) // no max height, increase to your heart's content
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
return false;
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn resize_right(&mut self) {
|
pub fn resize_right(&mut self) {
|
||||||
|
|
|
||||||
|
|
@ -283,34 +283,34 @@ pub fn get_help(mode: InputMode) -> Help {
|
||||||
let mut keybinds: Vec<(String, String)> = vec![];
|
let mut keybinds: Vec<(String, String)> = vec![];
|
||||||
match mode {
|
match mode {
|
||||||
InputMode::Normal | InputMode::Command => {
|
InputMode::Normal | InputMode::Command => {
|
||||||
keybinds.push((format!("p"), format!("PANE")));
|
keybinds.push(("p".to_string(), "PANE".to_string()));
|
||||||
keybinds.push((format!("t"), format!("TAB")));
|
keybinds.push(("t".to_string(), "TAB".to_string()));
|
||||||
keybinds.push((format!("r"), format!("RESIZE")));
|
keybinds.push(("r".to_string(), "RESIZE".to_string()));
|
||||||
keybinds.push((format!("s"), format!("SCROLL")));
|
keybinds.push(("s".to_string(), "SCROLL".to_string()));
|
||||||
}
|
}
|
||||||
InputMode::Resize => {
|
InputMode::Resize => {
|
||||||
keybinds.push((format!("←↓↑→"), format!("Resize")));
|
keybinds.push(("←↓↑→".to_string(), "Resize".to_string()));
|
||||||
}
|
}
|
||||||
InputMode::Pane => {
|
InputMode::Pane => {
|
||||||
keybinds.push((format!("←↓↑→"), format!("Move focus")));
|
keybinds.push(("←↓↑→".to_string(), "Move focus".to_string()));
|
||||||
keybinds.push((format!("p"), format!("Next")));
|
keybinds.push(("p".to_string(), "Next".to_string()));
|
||||||
keybinds.push((format!("n"), format!("New")));
|
keybinds.push(("n".to_string(), "New".to_string()));
|
||||||
keybinds.push((format!("d"), format!("Split down")));
|
keybinds.push(("d".to_string(), "Split down".to_string()));
|
||||||
keybinds.push((format!("r"), format!("Split right")));
|
keybinds.push(("r".to_string(), "Split right".to_string()));
|
||||||
keybinds.push((format!("x"), format!("Close")));
|
keybinds.push(("x".to_string(), "Close".to_string()));
|
||||||
keybinds.push((format!("f"), format!("Fullscreen")));
|
keybinds.push(("f".to_string(), "Fullscreen".to_string()));
|
||||||
}
|
}
|
||||||
InputMode::Tab => {
|
InputMode::Tab => {
|
||||||
keybinds.push((format!("←↓↑→"), format!("Move focus")));
|
keybinds.push(("←↓↑→".to_string(), "Move focus".to_string()));
|
||||||
keybinds.push((format!("n"), format!("New")));
|
keybinds.push(("n".to_string(), "New".to_string()));
|
||||||
keybinds.push((format!("x"), format!("Close")));
|
keybinds.push(("x".to_string(), "Close".to_string()));
|
||||||
}
|
}
|
||||||
InputMode::Scroll => {
|
InputMode::Scroll => {
|
||||||
keybinds.push((format!("↓↑"), format!("Scroll")));
|
keybinds.push(("↓↑".to_string(), "Scroll".to_string()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
keybinds.push((format!("ESC"), format!("BACK")));
|
keybinds.push(("ESC".to_string(), "BACK".to_string()));
|
||||||
keybinds.push((format!("q"), format!("QUIT")));
|
keybinds.push(("q".to_string(), "QUIT".to_string()));
|
||||||
Help { mode, keybinds }
|
Help { mode, keybinds }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -172,7 +172,7 @@ pub fn key_to_actions(
|
||||||
// FIXME in command mode, unbound keystrokes should probably do nothing instead of
|
// FIXME in command mode, unbound keystrokes should probably do nothing instead of
|
||||||
// writing to the terminal. Will be easier to implement after a big refactor of the
|
// writing to the terminal. Will be easier to implement after a big refactor of the
|
||||||
// input system (@categorille)
|
// input system (@categorille)
|
||||||
.unwrap_or(vec![Action::Write(input)])
|
.unwrap_or_else(|| vec![Action::Write(input)])
|
||||||
} else {
|
} else {
|
||||||
unreachable!("Unrecognized mode: {:?}", mode);
|
unreachable!("Unrecognized mode: {:?}", mode);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,7 @@ fn handle_command_exit(mut child: Child) {
|
||||||
|
|
||||||
for signal in signals.pending() {
|
for signal in signals.pending() {
|
||||||
// FIXME: We need to handle more signals here!
|
// FIXME: We need to handle more signals here!
|
||||||
|
#[allow(clippy::single_match)]
|
||||||
match signal {
|
match signal {
|
||||||
signal_hook::SIGINT => {
|
signal_hook::SIGINT => {
|
||||||
child.kill().unwrap();
|
child.kill().unwrap();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue