wip: visually marking the focused pane

This commit is contained in:
denis 2021-03-07 18:39:44 +02:00
parent 845478fe11
commit 1a5d30d17d
4 changed files with 187 additions and 20 deletions

12
Cargo.lock generated
View file

@ -24,6 +24,15 @@ dependencies = [
"winapi",
]
[[package]]
name = "ansi_term"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
dependencies = [
"winapi",
]
[[package]]
name = "arrayvec"
version = "0.5.2"
@ -280,7 +289,7 @@ version = "2.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
dependencies = [
"ansi_term",
"ansi_term 0.11.0",
"atty",
"bitflags",
"strsim 0.8.0",
@ -2240,6 +2249,7 @@ dependencies = [
name = "zellij"
version = "0.2.1"
dependencies = [
"ansi_term 0.12.1",
"async-std",
"backtrace",
"bincode",

View file

@ -13,6 +13,7 @@ publish = []
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
ansi_term = "0.12.1"
backtrace = "0.3.55"
bincode = "1.3.1"
directories-next = "2.0"

View file

@ -1,5 +1,7 @@
use crate::tab::Pane;
use std::collections::HashMap;
use ansi_term::Colour::*;
use super::super::utils::logging::debug_log_to_file;
use std::fmt::{Display, Error, Formatter};
@ -23,27 +25,43 @@ pub type BoundaryType = &'static str; // easy way to refer to boundary_type abov
pub struct BoundarySymbol {
boundary_type: BoundaryType,
invisible: bool,
should_be_colored: bool,
color: ansi_term::Colour
}
impl BoundarySymbol {
pub fn new(boundary_type: BoundaryType) -> Self {
pub fn new(boundary_type: BoundaryType, should_be_colored: bool) -> Self {
BoundarySymbol {
boundary_type,
invisible: false,
should_be_colored,
color: match should_be_colored {
true => ansi_term::Colour::Red,
false => ansi_term::Colour::White
}
}
}
pub fn invisible(mut self) -> Self {
self.invisible = true;
self
}
pub fn color(mut self, color: ansi_term::Colour) -> Self {
self.color = color;
self.should_be_colored = true;
self
}
}
impl Display for BoundarySymbol {
fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
if self.invisible {
write!(f, " ")
} else {
write!(f, "{}", self.boundary_type)
match self.invisible {
true => write!(f, " "),
false => {
match self.should_be_colored {
true => write!(f, "{}", self.color.paint(self.boundary_type)),
false => write!(f, "{}", self.boundary_type)
}
}
}
}
}
@ -53,6 +71,8 @@ fn combine_symbols(
next_symbol: BoundarySymbol,
) -> Option<BoundarySymbol> {
let invisible = current_symbol.invisible || next_symbol.invisible;
let should_be_colored = current_symbol.should_be_colored || next_symbol.should_be_colored;
let color = next_symbol.color;
let current_symbol = current_symbol.boundary_type;
let next_symbol = next_symbol.boundary_type;
match (current_symbol, next_symbol) {
@ -62,6 +82,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_RIGHT, boundary_type::VERTICAL) => {
@ -70,6 +92,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_RIGHT, boundary_type::HORIZONTAL) => {
@ -78,6 +102,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_RIGHT, boundary_type::TOP_LEFT) => {
@ -86,6 +112,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_RIGHT, boundary_type::BOTTOM_RIGHT) => {
@ -94,6 +122,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_RIGHT, boundary_type::BOTTOM_LEFT) => {
@ -102,6 +132,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_RIGHT, boundary_type::VERTICAL_LEFT) => {
@ -110,6 +142,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_RIGHT, boundary_type::VERTICAL_RIGHT) => {
@ -118,6 +152,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_RIGHT, boundary_type::HORIZONTAL_DOWN) => {
@ -126,6 +162,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_RIGHT, boundary_type::HORIZONTAL_UP) => {
@ -134,6 +172,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_RIGHT, boundary_type::CROSS) => {
@ -142,6 +182,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::HORIZONTAL, boundary_type::HORIZONTAL) => {
@ -150,6 +192,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::HORIZONTAL, boundary_type::VERTICAL) => {
@ -158,6 +202,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::HORIZONTAL, boundary_type::TOP_LEFT) => {
@ -166,6 +212,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::HORIZONTAL, boundary_type::BOTTOM_RIGHT) => {
@ -174,6 +222,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::HORIZONTAL, boundary_type::BOTTOM_LEFT) => {
@ -182,6 +232,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::HORIZONTAL, boundary_type::VERTICAL_LEFT) => {
@ -190,6 +242,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::HORIZONTAL, boundary_type::VERTICAL_RIGHT) => {
@ -198,6 +252,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::HORIZONTAL, boundary_type::HORIZONTAL_DOWN) => {
@ -206,6 +262,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::HORIZONTAL, boundary_type::HORIZONTAL_UP) => {
@ -214,6 +272,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::HORIZONTAL, boundary_type::CROSS) => {
@ -222,6 +282,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL, boundary_type::VERTICAL) => {
@ -230,6 +292,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL, boundary_type::TOP_LEFT) => {
@ -238,6 +302,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL, boundary_type::BOTTOM_RIGHT) => {
@ -246,6 +312,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL, boundary_type::BOTTOM_LEFT) => {
@ -254,6 +322,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL, boundary_type::VERTICAL_LEFT) => {
@ -262,6 +332,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL, boundary_type::VERTICAL_RIGHT) => {
@ -270,6 +342,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL, boundary_type::HORIZONTAL_DOWN) => {
@ -278,6 +352,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL, boundary_type::HORIZONTAL_UP) => {
@ -286,6 +362,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL, boundary_type::CROSS) => {
@ -294,6 +372,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_LEFT, boundary_type::TOP_LEFT) => {
@ -302,6 +382,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_LEFT, boundary_type::BOTTOM_RIGHT) => {
@ -310,6 +392,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_LEFT, boundary_type::BOTTOM_LEFT) => {
@ -318,6 +402,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_LEFT, boundary_type::VERTICAL_LEFT) => {
@ -326,6 +412,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_LEFT, boundary_type::VERTICAL_RIGHT) => {
@ -334,6 +422,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_LEFT, boundary_type::HORIZONTAL_DOWN) => {
@ -342,6 +432,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_LEFT, boundary_type::HORIZONTAL_UP) => {
@ -350,6 +442,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::TOP_LEFT, boundary_type::CROSS) => {
@ -358,6 +452,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::BOTTOM_RIGHT, boundary_type::BOTTOM_RIGHT) => {
@ -366,6 +462,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::BOTTOM_RIGHT, boundary_type::BOTTOM_LEFT) => {
@ -374,6 +472,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::BOTTOM_RIGHT, boundary_type::VERTICAL_LEFT) => {
@ -382,6 +482,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::BOTTOM_RIGHT, boundary_type::VERTICAL_RIGHT) => {
@ -390,6 +492,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::BOTTOM_RIGHT, boundary_type::HORIZONTAL_DOWN) => {
@ -398,6 +502,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::BOTTOM_RIGHT, boundary_type::HORIZONTAL_UP) => {
@ -406,6 +512,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::BOTTOM_RIGHT, boundary_type::CROSS) => {
@ -414,6 +522,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::BOTTOM_LEFT, boundary_type::BOTTOM_LEFT) => {
@ -422,6 +532,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::BOTTOM_LEFT, boundary_type::VERTICAL_LEFT) => {
@ -430,6 +542,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::BOTTOM_LEFT, boundary_type::VERTICAL_RIGHT) => {
@ -438,6 +552,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::BOTTOM_LEFT, boundary_type::HORIZONTAL_DOWN) => {
@ -446,6 +562,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::BOTTOM_LEFT, boundary_type::HORIZONTAL_UP) => {
@ -454,6 +572,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::BOTTOM_LEFT, boundary_type::CROSS) => {
@ -462,6 +582,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL_LEFT, boundary_type::VERTICAL_LEFT) => {
@ -470,6 +592,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL_LEFT, boundary_type::VERTICAL_RIGHT) => {
@ -478,6 +602,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL_LEFT, boundary_type::HORIZONTAL_DOWN) => {
@ -486,6 +612,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL_LEFT, boundary_type::HORIZONTAL_UP) => {
@ -494,6 +622,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL_LEFT, boundary_type::CROSS) => {
@ -502,6 +632,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL_RIGHT, boundary_type::VERTICAL_RIGHT) => {
@ -510,6 +642,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL_RIGHT, boundary_type::HORIZONTAL_DOWN) => {
@ -518,6 +652,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL_RIGHT, boundary_type::HORIZONTAL_UP) => {
@ -526,6 +662,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::VERTICAL_RIGHT, boundary_type::CROSS) => {
@ -534,6 +672,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::HORIZONTAL_DOWN, boundary_type::HORIZONTAL_DOWN) => {
@ -542,6 +682,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::HORIZONTAL_DOWN, boundary_type::HORIZONTAL_UP) => {
@ -550,6 +692,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::HORIZONTAL_DOWN, boundary_type::CROSS) => {
@ -558,6 +702,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::HORIZONTAL_UP, boundary_type::HORIZONTAL_UP) => {
@ -566,6 +712,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::HORIZONTAL_UP, boundary_type::CROSS) => {
@ -574,6 +722,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(boundary_type::CROSS, boundary_type::CROSS) => {
@ -582,6 +732,8 @@ fn combine_symbols(
Some(BoundarySymbol {
boundary_type,
invisible,
should_be_colored,
color
})
}
(_, _) => None,
@ -677,7 +829,8 @@ impl Boundaries {
boundary_characters: HashMap::new(),
}
}
pub fn add_rect(&mut self, rect: &dyn Pane) {
pub fn add_rect(&mut self, rect: &dyn Pane, should_be_colored: bool) {
debug_log_to_file(format!("colored? {}", should_be_colored));
if rect.x() > 0 {
let boundary_x_coords = rect.x() - 1;
let first_row_coordinates = self.rect_right_boundary_row_start(rect);
@ -685,11 +838,11 @@ impl Boundaries {
for row in first_row_coordinates..last_row_coordinates {
let coordinates = Coordinates::new(boundary_x_coords, row);
let mut symbol_to_add = if row == first_row_coordinates && row != 0 {
BoundarySymbol::new(boundary_type::TOP_LEFT)
BoundarySymbol::new(boundary_type::TOP_LEFT, should_be_colored)
} else if row == last_row_coordinates - 1 && row != self.rows - 1 {
BoundarySymbol::new(boundary_type::BOTTOM_LEFT)
BoundarySymbol::new(boundary_type::BOTTOM_LEFT, should_be_colored)
} else {
BoundarySymbol::new(boundary_type::VERTICAL)
BoundarySymbol::new(boundary_type::VERTICAL, should_be_colored)
};
if rect.invisible_borders() {
symbol_to_add = symbol_to_add.invisible();
@ -709,11 +862,11 @@ impl Boundaries {
for col in first_col_coordinates..last_col_coordinates {
let coordinates = Coordinates::new(col, boundary_y_coords);
let mut symbol_to_add = if col == first_col_coordinates && col != 0 {
BoundarySymbol::new(boundary_type::TOP_LEFT)
BoundarySymbol::new(boundary_type::TOP_LEFT, should_be_colored)
} else if col == last_col_coordinates - 1 && col != self.columns - 1 {
BoundarySymbol::new(boundary_type::TOP_RIGHT)
BoundarySymbol::new(boundary_type::TOP_RIGHT, should_be_colored)
} else {
BoundarySymbol::new(boundary_type::HORIZONTAL)
BoundarySymbol::new(boundary_type::HORIZONTAL, should_be_colored)
};
if rect.invisible_borders() {
symbol_to_add = symbol_to_add.invisible();
@ -734,11 +887,11 @@ impl Boundaries {
for row in first_row_coordinates..last_row_coordinates {
let coordinates = Coordinates::new(boundary_x_coords, row);
let mut symbol_to_add = if row == first_row_coordinates && row != 0 {
BoundarySymbol::new(boundary_type::TOP_RIGHT)
BoundarySymbol::new(boundary_type::TOP_RIGHT, should_be_colored)
} else if row == last_row_coordinates - 1 && row != self.rows - 1 {
BoundarySymbol::new(boundary_type::BOTTOM_RIGHT)
BoundarySymbol::new(boundary_type::BOTTOM_RIGHT, should_be_colored)
} else {
BoundarySymbol::new(boundary_type::VERTICAL)
BoundarySymbol::new(boundary_type::VERTICAL, should_be_colored)
};
if rect.invisible_borders() {
symbol_to_add = symbol_to_add.invisible();
@ -758,11 +911,11 @@ impl Boundaries {
for col in first_col_coordinates..last_col_coordinates {
let coordinates = Coordinates::new(col, boundary_y_coords);
let mut symbol_to_add = if col == first_col_coordinates && col != 0 {
BoundarySymbol::new(boundary_type::BOTTOM_LEFT)
BoundarySymbol::new(boundary_type::BOTTOM_LEFT, should_be_colored)
} else if col == last_col_coordinates - 1 && col != self.columns - 1 {
BoundarySymbol::new(boundary_type::BOTTOM_RIGHT)
BoundarySymbol::new(boundary_type::BOTTOM_RIGHT, should_be_colored)
} else {
BoundarySymbol::new(boundary_type::HORIZONTAL)
BoundarySymbol::new(boundary_type::HORIZONTAL, should_be_colored)
};
if rect.invisible_borders() {
symbol_to_add = symbol_to_add.invisible();

View file

@ -625,7 +625,10 @@ impl Tab {
.expect("cannot write to stdout");
for (kind, terminal) in self.panes.iter_mut() {
if !self.panes_to_hide.contains(&terminal.pid()) {
boundaries.add_rect(terminal.as_ref());
match self.active_terminal.unwrap() == terminal.pid() {
true => boundaries.add_rect(terminal.as_ref(), true),
false => boundaries.add_rect(terminal.as_ref(), false)
}
if let Some(vte_output) = terminal.render() {
let vte_output = if let PaneId::Terminal(_) = kind {
vte_output