feat(config): switch to kdl (#1759)

* chore(config): default kdl keybindings config

* tests

* work

* refactor(config): move stuff around

* work

* tab merge layout

* work

* work

* layouts working

* work

* layout tests

* work

* work

* feat(parsing): kdl layouts without config

* refactor(kdl): move stuff around

* work

* tests(layout): add cases and fix bugs

* work

* fix(kdl): various bugs

* chore(layouts): move all layouts to kdl

* feat(kdl): shared keybidns

* fix(layout): do not count fixed panes toward percentile

* fix(keybinds): missing keybinds and actions

* fix(config): adjust default tips

* refactor(config): move stuff around

* fix(tests): make e2e tests pass

* fix(kdl): add verbose parsing errors

* fix(kdl): focused tab

* fix(layout): corret default_tab_template behavior

* style(code): fix compile warnings

* feat(cli): send actions through the cli

* fix(cli): exit only when action is done

* fix(cli): open embedded pane from floating pane

* fix(cli): send actions to other sessions

* feat(cli): command alias

* feat(converter): convert old config

* feat(converter): convert old layout and theme files

* feat(kdl): pretty errors

* feat(client): convert old YAML files on startup

* fix: various bugs and styling issues

* fix: e2e tests

* fix(screen): propagate errors after merge

* style(clippy): lower clippy level

* fix(tests): own session_name variable

* style(fmt): rustfmt

* fix(cli): various action fixes

* style(fmt): rustfmt

* fix(themes): loading of theme files

* style(fmt): rustfmt

* fix(tests): theme fixtures

* fix(layouts): better errors on unknown nodes

* fix(kdl): clarify valid node terminator error

* fix(e2e): adjust close tab test

* fix(e2e): adjust close tab test again

* style(code): cleanup some comments
This commit is contained in:
Aram Drevekenin 2022-10-05 07:44:00 +02:00 committed by GitHub
parent 917e9b2ff0
commit 79bf6ab868
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
355 changed files with 42603 additions and 4889 deletions

65
Cargo.lock generated
View file

@ -1225,6 +1225,17 @@ dependencies = [
"wasm-bindgen",
]
[[package]]
name = "kdl"
version = "4.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8388a371e0e2ede18bbd94e476fcd45b4ac65cefcedf0c06fd13bd8389574a6"
dependencies = [
"miette 5.3.0",
"nom 7.1.1",
"thiserror",
]
[[package]]
name = "kv-log-macro"
version = "1.0.7"
@ -1412,7 +1423,7 @@ checksum = "cd2adcfcced5d625bf90a958a82ae5b93231f57f3df1383fee28c9b5096d35ed"
dependencies = [
"atty",
"backtrace",
"miette-derive",
"miette-derive 3.3.0",
"once_cell",
"owo-colors",
"supports-color",
@ -1423,6 +1434,18 @@ dependencies = [
"thiserror",
]
[[package]]
name = "miette"
version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a28d6092d7e94a90bb9ea8e6c26c99d5d112d49dda2afdb4f7ea8cf09e1a5a6d"
dependencies = [
"miette-derive 5.3.0",
"once_cell",
"thiserror",
"unicode-width",
]
[[package]]
name = "miette-derive"
version = "3.3.0"
@ -1434,6 +1457,23 @@ dependencies = [
"syn",
]
[[package]]
name = "miette-derive"
version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f2485ed7d1fe80704928e3eb86387439609bd0c6bb96db8208daa364cfd1e09"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "minimal-lexical"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "miniz_oxide"
version = "0.5.3"
@ -1503,6 +1543,16 @@ dependencies = [
"version_check",
]
[[package]]
name = "nom"
version = "7.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
dependencies = [
"memchr",
"minimal-lexical",
]
[[package]]
name = "ntapi"
version = "0.3.7"
@ -2501,7 +2551,7 @@ checksum = "76971977e6121664ec1b960d1313aacfa75642adc93b9d4d53b247bd4cb1747e"
dependencies = [
"dirs",
"fnv",
"nom",
"nom 5.1.2",
"phf",
"phf_codegen",
]
@ -3312,11 +3362,12 @@ dependencies = [
"dialoguer",
"insta",
"log",
"miette",
"miette 3.3.0",
"names",
"rand 0.8.5",
"ssh2",
"suggest",
"thiserror",
"zellij-client",
"zellij-server",
"zellij-utils",
@ -3329,6 +3380,9 @@ dependencies = [
"insta",
"log",
"mio",
"serde",
"serde_yaml",
"url",
"zellij-utils",
]
@ -3393,19 +3447,20 @@ dependencies = [
"colorsys",
"crossbeam",
"directories-next",
"insta",
"interprocess",
"kdl",
"lazy_static",
"libc",
"log",
"log4rs",
"miette",
"miette 3.3.0",
"nix",
"once_cell",
"regex",
"rmp-serde",
"serde",
"serde_json",
"serde_yaml",
"signal-hook 0.3.14",
"strip-ansi-escapes",
"strum",

View file

@ -14,6 +14,7 @@ rust-version = "1.59"
[dependencies]
anyhow = "1.0"
thiserror = "1.0.30"
names = { version = "0.13.0", default-features = false }
miette = { version = "3.3.0", features = ["fancy"] }
zellij-client = { path = "zellij-client/", version = "0.32.0" }

View file

@ -83,7 +83,7 @@ args = [
# Simple clippy tweak
[tasks.clippy]
args = ["clippy", "--all-targets","--all-features","--","--deny","warnings", "@@split(CARGO_MAKE_TASK_ARGS,;)"]
args = ["clippy", "--all-targets", "--all-features", "@@split(CARGO_MAKE_TASK_ARGS,;)"]
# Release building and installing Zellij
[tasks.install]

View file

@ -180,7 +180,7 @@ fn get_keys_and_hints(mi: &ModeInfo) -> Vec<(String, String, Vec<Key>)> {
vec![
(s("Move focus"), s("Move"), focus_keys),
(s("New"), s("New"), action_key(&km, &[A::NewTab(None), TO_NORMAL])),
(s("New"), s("New"), action_key(&km, &[A::NewTab(None, None), TO_NORMAL])),
(s("Close"), s("Close"), action_key(&km, &[A::CloseTab, TO_NORMAL])),
(s("Rename"), s("Rename"),
action_key(&km, &[A::SwitchToMode(IM::RenameTab), A::TabNameInput(vec![0])])),
@ -242,7 +242,7 @@ fn get_keys_and_hints(mi: &ModeInfo) -> Vec<(String, String, Vec<Key>)> {
(s("Split down"), s("Down"), action_key(&km, &[A::NewPane(Some(Dir::Down)), TO_NORMAL])),
(s("Split right"), s("Right"), action_key(&km, &[A::NewPane(Some(Dir::Right)), TO_NORMAL])),
(s("Fullscreen"), s("Fullscreen"), action_key(&km, &[A::ToggleFocusFullscreen, TO_NORMAL])),
(s("New tab"), s("New"), action_key(&km, &[A::NewTab(None), TO_NORMAL])),
(s("New tab"), s("New"), action_key(&km, &[A::NewTab(None, None), TO_NORMAL])),
(s("Rename tab"), s("Rename"),
action_key(&km, &[A::SwitchToMode(IM::RenameTab), A::TabNameInput(vec![0])])),
(s("Previous Tab"), s("Previous"), action_key(&km, &[A::GoToPreviousTab, TO_NORMAL])),

View file

@ -72,13 +72,18 @@ fn add_keybinds(help: &ModeInfo) -> Keygroups {
style_key_with_modifier(&new_pane_keys, &help.style.colors)
};
let resize_keys = action_key_group(
let mut resize_keys = action_key_group(
&normal_keymap,
&[
&[Action::Resize(ResizeDirection::Increase)],
&[Action::Resize(ResizeDirection::Decrease)],
],
);
if resize_keys.contains(&Key::Alt(CharOrArrow::Char('=')))
&& resize_keys.contains(&Key::Alt(CharOrArrow::Char('+')))
{
resize_keys.retain(|k| k != &Key::Alt(CharOrArrow::Char('=')));
}
let resize = if resize_keys.is_empty() {
vec![Style::new().bold().paint("UNBOUND")]
} else {

View file

@ -1,7 +1,7 @@
# Themes
Please make sure that the theme name and the file name are the same (+`.yaml`).
Please make sure that the theme name and the file name are the same (+`.kdl`).
Example:
- theme: gruvbox
- filename: `gruvbox.yaml`
- filename: `gruvbox.kdl`

View file

@ -0,0 +1,17 @@
// From https://github.com/dracula/zellij
themes {
dracula {
fg 248 248 242
bg 40 42 54
black 0 0 0
red 255 85 85
green 80 250 123
yellow 241 250 140
blue 98 114 164
magenta 255 121 198
cyan 139 233 253
white 255 255 255
orange 255 184 108
}
}

View file

@ -1,16 +0,0 @@
# Dracula Theme
themes:
dracula:
# From https://github.com/dracula/zellij
bg: [40, 42, 54]
red: [255, 85, 85]
green: [80, 250, 123]
yellow: [241, 250, 140]
blue: [98, 114, 164]
magenta: [255, 121, 198]
orange: [255, 184, 108]
fg: [248, 248, 242]
cyan: [139, 233, 253]
black: [0, 0, 0]
white: [255, 255, 255]

View file

@ -0,0 +1,16 @@
themes {
gruvbox-dark {
fg 213 196 161
bg 40 40 40
black 60 56 54
red 204 36 29
green 152 151 26
yellow 215 153 33
blue 69 133 136
magenta 177 98 134
cyan 104 157 106
white 251 241 199
orange 214 93 14
}
}

View file

@ -1,15 +0,0 @@
# Gruvbox theme
themes:
gruvbox-dark:
bg: [40, 40, 40]
red: [204, 36, 29]
green: [152, 151, 26]
yellow: [215, 153, 33]
blue: [69, 133, 136]
magenta: [177, 98, 134]
orange: [214, 93, 14]
fg: [213, 196, 161]
cyan: [104, 157, 106]
black: [60, 56, 54]
white: [251, 241, 199]

View file

@ -0,0 +1,16 @@
themes {
gruvbox-light {
fg 60 56 54
bg 251 82 75
black 40 40 40
red 205 75 69
green 152 151 26
yellow 215 153 33
blue 69 133 136
magenta 177 98 134
cyan 104 157 106
white 213 196 161
orange 214 93 14
}
}

View file

@ -1,15 +0,0 @@
# Gruvbox theme
themes:
gruvbox-light:
bg: [251, 82, 75]
red: [205, 75, 69]
green: [152, 151, 26]
yellow: [215, 153, 33]
blue: [69, 133, 136]
magenta: [177, 98, 134]
orange: [214, 93, 14]
fg: [60, 56, 54]
cyan: [104, 157, 106]
black: [40, 40, 40]
white: [213, 196, 161]

View file

@ -0,0 +1,16 @@
themes {
molokai-dark {
fg 248 248 240
bg 27 29 30
black 0 0 0
red 255 0 0
green 0 140 0
yellow 255 255 0
blue 102 217 239
magenta 174 129 255
cyan 0 255 255
white 255 255 255
orange 253 151 31
}
}

View file

@ -1,15 +0,0 @@
# Molokai Theme
themes:
molokai-dark:
bg: [27, 29, 30]
red: [255, 0, 0]
green: [0, 140, 0]
yellow: [255, 255, 0]
blue: [102, 217, 239]
magenta: [174, 129, 255]
orange: [253, 151, 31]
fg: [248, 248, 240]
cyan: [0, 255, 255]
black: [0, 0, 0]
white: [255, 255, 255]

15
example/themes/nord.kdl Normal file
View file

@ -0,0 +1,15 @@
themes {
nord {
fg 216 222 233 // #D8DEE9
bg 46 52 64 // #2E3440
black 59 66 82 // #3B4252
red 191 97 106 // #BF616A
green 163 190 140 // #A3BE8C
yellow 235 203 139 // #EBCB8B
blue 129 161 193 // #81A1C1
magenta 180 142 173 // #B48EAD
cyan 136 192 208 // #88C0D0
white 229 233 240 // #E5E9F0
orange 208 135 112 // #D08770
}
}

View file

@ -1,16 +0,0 @@
# Nord theme
themes:
nord:
fg: [216, 222, 233] #D8DEE9
bg: [46, 52, 64] #2E3440
black: [59, 66, 82] #3B4252
red: [191, 97, 106] #BF616A
green: [163, 190, 140] #A3BE8C
yellow: [235,203,139] #EBCB8B
blue: [129, 161, 193] #81A1C1
magenta: [180, 142, 173] #B48EAD
cyan: [136, 192, 208] #88C0D0
white: [229, 233, 240] #E5E9F0
orange: [208, 135, 112] #D08770

View file

@ -0,0 +1,16 @@
themes {
one-half-dark {
fg 220 223 228
bg 40 44 52
black 27 29 35
red 227 63 76
green 152 195 121
yellow 229 192 123
blue 97 175 239
magenta 198 120 221
cyan 86 182 194
white 233 225 254
orange 216 133 76
}
}

View file

@ -1,15 +0,0 @@
# One Half Theme
themes:
one-half-dark:
bg: [40, 44, 52]
red: [227, 63, 76]
green: [152, 195, 121]
yellow: [229, 192, 123]
blue: [97, 175, 239]
magenta: [198, 120, 221]
orange: [216, 133, 76]
fg: [220, 223, 228]
cyan: [86, 182, 194]
black: [27, 29, 35]
white: [233, 225, 254]

View file

@ -0,0 +1,16 @@
themes {
solarized-dark {
fg 253 246 227
bg 0 43 54
black 7 54 66
red 220 50 47
green 133 153 0
yellow 181 137 0
blue 38 139 210
magenta 211 54 130
cyan 42 161 152
white 238 232 213
orange 203 75 22
}
}

View file

@ -1,15 +0,0 @@
# Solarized dark
themes:
solarized-dark:
bg: [0, 43, 54]
red: [220, 50, 47]
green: [133, 153, 0]
yellow: [181, 137, 0]
blue: [38, 139, 210]
magenta: [211, 54, 130]
orange: [203, 75, 22]
fg: [253, 246, 227]
cyan: [42, 161, 152]
black: [7, 54, 66]
white: [238, 232, 213]

View file

@ -0,0 +1,16 @@
themes {
solarized-light {
fg 101 123 131
bg 253 246 227
black 7 54 66
red 220 50 47
green 133 153 0
yellow 181 137 0
blue 38 139 210
magenta 211 54 130
cyan 42 161 152
white 238 232 213
orange 203 75 22
}
}

View file

@ -1,15 +0,0 @@
# Solarized light
themes:
solarized-light:
bg: [253, 246, 227]
red: [220, 50, 47]
green: [133, 153, 0]
yellow: [181, 137, 0]
blue: [38, 139, 210]
magenta: [211, 54, 130]
orange: [203, 75, 22]
fg: [101, 123, 131]
cyan: [42, 161, 152]
black: [7, 54, 66]
white: [238, 232, 213]

View file

View file

@ -0,0 +1,16 @@
themes {
tokyo-night-light {
fg 52 59 88
bg 213 214 219
black 15 15 20
red 186 75 96
green 72 94 48
yellow 143 94 21
blue 52 84 138
magenta 90 74 120
cyan 15 75 110
white 130 137 172
orange 150 80 39
}
}

View file

@ -1,16 +0,0 @@
# TokyoNight Theme
# Originally by https://github.com/enkia/tokyo-night-vscode-theme
themes:
tokyo-night-light:
fg: [52,59,88] #343B58
bg: [213,214,219] #D5D6DB
black: [15,15,20] #0F0F14
red: [186,75,96] #BA4B60
green: [72,94,48] #485E30
yellow: [143,94,21] #8F5E15
blue: [52,84,138] #34548A
magenta: [90,74,120] #5A4A78
cyan: [15,75,110] #0F4B6E
white: [130,137,172] #8289AC
orange: [150,80,39] #965027

View file

@ -0,0 +1,16 @@
themes {
tokyo-night-storm {
fg 169 177 214
bg 36 40 59
black 56 62 90
red 249 51 87
green 158 206 106
yellow 224 175 104
blue 122 162 247
magenta 187 154 247
cyan 42 195 222
white 192 202 245
orange 255 158 100
}
}

View file

@ -1,16 +0,0 @@
# TokyoNight Theme
# Originally by https://github.com/enkia/tokyo-night-vscode-theme
themes:
tokyo-night-storm:
fg: [169,177,214] #A9B1D6
bg: [36,40,59] #24283B
black: [56,62,90] #383E5A
red: [249,51,87] #F9334D
green: [158,206,106] #9ECE6A
yellow: [224,175,104] #E0AF68
blue: [122,162,247] #7AA2F7
magenta: [187,154,247] #BB9AF7
cyan: [42,195,222] #2AC3DE
white: [192,202,245] #C0CAF5
orange: [255,158,100] #FF9E64

View file

@ -0,0 +1,16 @@
themes {
tokyo-night {
fg 169 177 214
bg 26 27 38
black 56 62 90
red 249 51 87
green 158 206 106
yellow 224 175 104
blue 122 162 247
magenta 187 154 247
cyan 42 195 222
white 192 202 245
orange 255 158 100
}
}

View file

@ -1,16 +0,0 @@
# TokyoNight Theme
# Originally by https://github.com/enkia/tokyo-night-vscode-theme
themes:
tokyo-night:
fg: [169,177,214] #A9B1D6
bg: [26,27,38] #1A1B26
black: [56,62,90] #383E5A
red: [249,51,87] #F9334D
green: [158,206,106] #9ECE6A
yellow: [224,175,104] #E0AF68
blue: [122,162,247] #7AA2F7
magenta: [187,154,247] #BB9AF7
cyan: [42,195,222] #2AC3DE
white: [192,202,245] #C0CAF5
orange: [255,158,100] #FF9E64

View file

@ -6,13 +6,18 @@ use crate::sessions::{
session_exists, ActiveSession, SessionNameMatch,
};
use dialoguer::Confirm;
use miette::Result;
use miette::{Report, Result};
use std::path::PathBuf;
use std::process;
use zellij_client::old_config_converter::{
config_yaml_to_config_kdl, convert_old_yaml_files, layout_yaml_to_layout_kdl,
};
use zellij_client::start_client as start_client_impl;
use zellij_client::{os_input_output::get_client_os_input, ClientInfo};
use zellij_server::os_input_output::get_server_os_input;
use zellij_server::start_server as start_server_impl;
use zellij_utils::input::actions::Action;
use zellij_utils::input::config::ConfigError;
use zellij_utils::input::options::Options;
use zellij_utils::nix;
use zellij_utils::{
@ -21,10 +26,7 @@ use zellij_utils::{
setup::{get_default_data_dir, Setup},
};
#[cfg(feature = "unstable")]
use miette::IntoDiagnostic;
#[cfg(feature = "unstable")]
use zellij_utils::input::actions::ActionsFromYaml;
use std::{fs::File, io::prelude::*};
pub(crate) use crate::sessions::list_sessions;
@ -118,69 +120,133 @@ fn find_indexed_session(
}
}
/// Send a vec of `[Action]` to a currently running session.
#[cfg(feature = "unstable")]
pub(crate) fn send_action_to_session(opts: zellij_utils::cli::CliArgs) {
pub(crate) fn send_action_to_session(
cli_action: zellij_utils::cli::CliAction,
requested_session_name: Option<String>,
) {
match get_active_session() {
ActiveSession::None => {
eprintln!("There is no active session!");
std::process::exit(1);
},
ActiveSession::One(session_name) => {
attach_with_fake_client(opts, &session_name);
if let Some(requested_session_name) = requested_session_name {
if requested_session_name != session_name {
eprintln!(
"Session '{}' not found. The following sessions are active:",
requested_session_name
);
eprintln!("{}", session_name);
std::process::exit(1);
}
}
attach_with_cli_client(cli_action, &session_name);
},
ActiveSession::Many => {
if let Some(session_name) = opts.session.clone() {
attach_with_fake_client(opts, &session_name);
let existing_sessions = get_sessions().unwrap();
if let Some(session_name) = requested_session_name {
if existing_sessions.contains(&session_name) {
attach_with_cli_client(cli_action, &session_name);
} else {
eprintln!(
"Session '{}' not found. The following sessions are active:",
session_name
);
print_sessions(existing_sessions);
std::process::exit(1);
}
} else if let Ok(session_name) = envs::get_session_name() {
attach_with_fake_client(opts, &session_name);
attach_with_cli_client(cli_action, &session_name);
} else {
println!("Please specify the session name to send actions to. The following sessions are active:");
print_sessions(get_sessions().unwrap());
eprintln!("Please specify the session name to send actions to. The following sessions are active:");
print_sessions(existing_sessions);
std::process::exit(1);
}
},
};
}
pub(crate) fn convert_old_config_file(old_config_file: PathBuf) {
match File::open(&old_config_file) {
Ok(mut handle) => {
let mut raw_config_file = String::new();
let _ = handle.read_to_string(&mut raw_config_file);
match config_yaml_to_config_kdl(&raw_config_file, false) {
Ok(kdl_config) => {
println!("{}", kdl_config);
process::exit(0);
},
Err(e) => {
eprintln!("Failed to convert config: {}", e);
process::exit(1);
},
}
},
Err(e) => {
eprintln!("Failed to open file: {}", e);
process::exit(1);
},
}
}
#[cfg(feature = "unstable")]
fn attach_with_fake_client(opts: zellij_utils::cli::CliArgs, name: &str) {
if let Some(zellij_utils::cli::Command::Sessions(zellij_utils::cli::Sessions::Action {
action: Some(action),
})) = opts.command.clone()
{
let action = format!("[{}]", action);
match zellij_utils::serde_yaml::from_str::<ActionsFromYaml>(&action).into_diagnostic() {
Ok(parsed) => {
let (config, _, config_options) = match Setup::from_options(&opts) {
Ok(results) => results,
Err(e) => {
eprintln!("{}", e);
process::exit(1);
},
};
let os_input = get_os_input(zellij_client::os_input_output::get_client_os_input);
pub(crate) fn convert_old_layout_file(old_layout_file: PathBuf) {
match File::open(&old_layout_file) {
Ok(mut handle) => {
let mut raw_layout_file = String::new();
let _ = handle.read_to_string(&mut raw_layout_file);
match layout_yaml_to_layout_kdl(&raw_layout_file) {
Ok(kdl_layout) => {
println!("{}", kdl_layout);
process::exit(0);
},
Err(e) => {
eprintln!("Failed to convert layout: {}", e);
process::exit(1);
},
}
},
Err(e) => {
eprintln!("Failed to open file: {}", e);
process::exit(1);
},
}
}
let actions = parsed.actions().to_vec();
log::debug!("Starting fake Zellij client!");
zellij_client::fake_client::start_fake_client(
Box::new(os_input),
opts,
*Box::new(config),
config_options,
ClientInfo::New(name.to_string()),
None,
actions,
);
log::debug!("Quitting fake client now.");
std::process::exit(0);
},
Err(e) => {
eprintln!("{:?}", e);
std::process::exit(1);
},
};
};
pub(crate) fn convert_old_theme_file(old_theme_file: PathBuf) {
match File::open(&old_theme_file) {
Ok(mut handle) => {
let mut raw_config_file = String::new();
let _ = handle.read_to_string(&mut raw_config_file);
match config_yaml_to_config_kdl(&raw_config_file, true) {
Ok(kdl_config) => {
println!("{}", kdl_config);
process::exit(0);
},
Err(e) => {
eprintln!("Failed to convert config: {}", e);
process::exit(1);
},
}
},
Err(e) => {
eprintln!("Failed to open file: {}", e);
process::exit(1);
},
}
}
fn attach_with_cli_client(cli_action: zellij_utils::cli::CliAction, session_name: &str) {
let os_input = get_os_input(zellij_client::os_input_output::get_client_os_input);
match Action::actions_from_cli(cli_action) {
Ok(actions) => {
zellij_client::cli_client::start_cli_client(Box::new(os_input), session_name, actions);
std::process::exit(0);
},
Err(e) => {
eprintln!("{}", e);
log::error!("Error sending action: {}", e);
std::process::exit(2);
},
}
}
fn attach_with_session_index(config_options: Options, index: usize, create: bool) -> ClientInfo {
@ -249,10 +315,17 @@ fn attach_with_session_name(
}
pub(crate) fn start_client(opts: CliArgs) {
let (config, layout, config_options) = match Setup::from_options(&opts) {
// look for old YAML config/layout/theme files and convert them to KDL
convert_old_yaml_files(&opts);
let (config, layout, config_options) = match Setup::from_cli_args(&opts) {
Ok(results) => results,
Err(e) => {
eprintln!("{}", e);
if let ConfigError::KdlError(error) = e {
let report: Report = error.into();
eprintln!("{:?}", report);
} else {
eprintln!("{}", e);
}
process::exit(1);
},
};
@ -285,7 +358,7 @@ pub(crate) fn start_client(opts: CliArgs) {
let attach_layout = match client {
ClientInfo::Attach(_, _) => None,
ClientInfo::New(_) => layout,
ClientInfo::New(_) => Some(layout),
};
if create {
@ -314,23 +387,21 @@ pub(crate) fn start_client(opts: CliArgs) {
config,
config_options,
ClientInfo::New(session_name),
layout,
Some(layout),
);
} else {
if let Some(layout_some) = layout.clone() {
if let Some(session_name) = layout_some.session.name {
if layout_some.session.attach.unwrap() {
if let Some(session_name) = config_options.session_name.as_ref() {
match config_options.attach_to_session {
Some(true) => {
let client = attach_with_session_name(
Some(session_name),
Some(session_name.clone()),
config_options.clone(),
true,
);
let attach_layout = match client {
ClientInfo::Attach(_, _) => None,
ClientInfo::New(_) => layout,
ClientInfo::New(_) => Some(layout),
};
start_client_impl(
Box::new(os_input),
opts,
@ -339,20 +410,23 @@ pub(crate) fn start_client(opts: CliArgs) {
client,
attach_layout,
);
} else {
},
_ => {
start_client_plan(session_name.clone());
start_client_impl(
Box::new(os_input),
opts,
config,
config_options,
ClientInfo::New(session_name),
layout,
config_options.clone(),
ClientInfo::New(session_name.clone()),
Some(layout),
);
}
process::exit(0);
},
}
// after we detach, this happens and so we need to exit before the rest of the
// function happens
// TODO: offload this to a different function
process::exit(0);
}
let session_name = names::Generator::default().next().unwrap();
@ -363,7 +437,7 @@ pub(crate) fn start_client(opts: CliArgs) {
config,
config_options,
ClientInfo::New(session_name),
layout,
Some(layout),
);
}
}

View file

@ -6,7 +6,7 @@ mod tests;
use zellij_utils::{
clap::Parser,
cli::{CliArgs, Command, Sessions},
cli::{CliAction, CliArgs, Command, Sessions},
logging::*,
};
@ -14,10 +14,53 @@ fn main() {
configure_logger();
let opts = CliArgs::parse();
#[cfg(feature = "unstable")]
{
if let Some(Command::Sessions(Sessions::Action { .. })) = opts.command {
commands::send_action_to_session(opts);
if let Some(Command::Sessions(Sessions::Action(cli_action))) = opts.command {
commands::send_action_to_session(cli_action, opts.session);
std::process::exit(0);
}
if let Some(Command::Sessions(Sessions::Command {
command,
direction,
cwd,
floating,
})) = opts.command
{
let command_cli_action = CliAction::NewPane {
command,
direction,
cwd,
floating,
};
commands::send_action_to_session(command_cli_action, opts.session);
std::process::exit(0);
}
if let Some(Command::Sessions(Sessions::Edit {
file,
direction,
line_number,
floating,
})) = opts.command
{
let command_cli_action = CliAction::Edit {
file,
direction,
line_number,
floating,
};
commands::send_action_to_session(command_cli_action, opts.session);
std::process::exit(0);
}
if let Some(Command::Sessions(Sessions::ConvertConfig { old_config_file })) = opts.command {
commands::convert_old_config_file(old_config_file);
std::process::exit(0);
}
if let Some(Command::Sessions(Sessions::ConvertLayout { old_layout_file })) = opts.command {
commands::convert_old_layout_file(old_layout_file);
std::process::exit(0);
}
if let Some(Command::Sessions(Sessions::ConvertTheme { old_theme_file })) = opts.command {
commands::convert_old_theme_file(old_theme_file);
std::process::exit(0);
}
}

View file

@ -458,9 +458,8 @@ pub fn close_tab() {
name: "Wait for tab to close",
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
if remote_terminal.cursor_position_is(3, 2)
if remote_terminal.snapshot_contains("Tab #1")
&& !remote_terminal.snapshot_contains("Tab #2")
&& remote_terminal.tip_appears()
{
// cursor is in the first tab again
step_is_complete = true;
@ -475,7 +474,8 @@ pub fn close_tab() {
break last_snapshot;
}
};
assert_snapshot!(last_snapshot);
assert!(last_snapshot.contains("Tab #1"));
assert!(!last_snapshot.contains("Tab #2"));
}
#[test]
@ -948,41 +948,6 @@ pub fn detach_and_attach_session() {
assert_snapshot!(last_snapshot);
}
#[test]
#[ignore]
pub fn accepts_basic_layout() {
let fake_win_size = Size {
cols: 120,
rows: 24,
};
let layout_file_name = "three-panes-with-nesting.yaml";
let mut test_attempts = 10;
let last_snapshot = loop {
RemoteRunner::kill_running_sessions(fake_win_size);
let mut runner = RemoteRunner::new_with_layout(fake_win_size, layout_file_name);
runner.run_all_steps();
let last_snapshot = runner.take_snapshot_after(Step {
name: "Wait for app to load",
instruction: |remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
if remote_terminal.cursor_position_is(3, 1)
&& remote_terminal.snapshot_contains("$ █ ││$")
&& remote_terminal.snapshot_contains("$ ") {
step_is_complete = true;
}
step_is_complete
},
});
if runner.test_timed_out && test_attempts > 0 {
test_attempts -= 1;
continue;
} else {
break last_snapshot;
}
};
assert_snapshot!(last_snapshot);
}
#[test]
#[ignore]
pub fn status_bar_loads_custom_keybindings() {
@ -990,7 +955,7 @@ pub fn status_bar_loads_custom_keybindings() {
cols: 120,
rows: 24,
};
let config_file_name = "changed_keys.yaml";
let config_file_name = "changed_keys.kdl";
let mut test_attempts = 10;
let last_snapshot = loop {
RemoteRunner::kill_running_sessions(fake_win_size);
@ -1718,43 +1683,6 @@ pub fn toggle_floating_panes() {
assert_snapshot!(last_snapshot);
}
#[test]
#[ignore]
pub fn focus_tab_with_layout() {
let fake_win_size = Size {
cols: 120,
rows: 24,
};
let layout_file_name = "focus-tab-layout.yaml";
let mut test_attempts = 10;
let last_snapshot = loop {
RemoteRunner::kill_running_sessions(fake_win_size);
let mut runner = RemoteRunner::new_with_layout(fake_win_size, layout_file_name);
runner.run_all_steps();
let last_snapshot = runner.take_snapshot_after(Step {
name: "Wait for app to load",
instruction: |remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
if remote_terminal.status_bar_appears()
&& remote_terminal.tip_appears()
&& remote_terminal.snapshot_contains("Tab #9")
&& remote_terminal.cursor_position_is(63, 2)
{
step_is_complete = true;
}
step_is_complete
},
});
if runner.test_timed_out && test_attempts > 0 {
test_attempts -= 1;
continue;
} else {
break last_snapshot;
}
};
assert_snapshot!(last_snapshot);
}
#[test]
#[ignore]
pub fn tmux_mode() {

View file

@ -19,7 +19,6 @@ use std::rc::Rc;
const ZELLIJ_EXECUTABLE_LOCATION: &str = "/usr/src/zellij/x86_64-unknown-linux-musl/release/zellij";
const SET_ENV_VARIABLES: &str = "EDITOR=/usr/bin/vi";
const ZELLIJ_LAYOUT_PATH: &str = "/usr/src/zellij/fixtures/layouts";
const ZELLIJ_CONFIG_PATH: &str = "/usr/src/zellij/fixtures/configs";
const ZELLIJ_DATA_DIR: &str = "/usr/src/zellij/e2e-data";
const ZELLIJ_FIXTURE_PATH: &str = "/usr/src/zellij/fixtures";
@ -145,25 +144,6 @@ fn start_zellij_without_frames(channel: &mut ssh2::Channel) {
std::thread::sleep(std::time::Duration::from_secs(1)); // wait until Zellij stops parsing startup ANSI codes from the terminal STDIN
}
fn start_zellij_with_layout(channel: &mut ssh2::Channel, layout_path: &str) {
stop_zellij(channel);
channel
.write_all(
format!(
"{} {} --layout {} --session {} --data-dir {}\n",
SET_ENV_VARIABLES,
ZELLIJ_EXECUTABLE_LOCATION,
layout_path,
SESSION_NAME,
ZELLIJ_DATA_DIR
)
.as_bytes(),
)
.unwrap();
channel.flush().unwrap();
std::thread::sleep(std::time::Duration::from_secs(1)); // wait until Zellij stops parsing startup ANSI codes from the terminal STDIN
}
fn start_zellij_with_config(channel: &mut ssh2::Channel, config_path: &str) {
stop_zellij(channel);
channel
@ -571,42 +551,6 @@ impl RemoteRunner {
reader_thread,
}
}
pub fn new_with_layout(win_size: Size, layout_file_name: &'static str) -> Self {
let remote_path = Path::new(ZELLIJ_LAYOUT_PATH).join(layout_file_name);
let sess = ssh_connect();
let mut channel = sess.channel_session().unwrap();
let mut rows = Dimension::fixed(win_size.rows);
let mut cols = Dimension::fixed(win_size.cols);
rows.set_inner(win_size.rows);
cols.set_inner(win_size.cols);
let pane_geom = PaneGeom {
x: 0,
y: 0,
rows,
cols,
};
setup_remote_environment(&mut channel, win_size);
start_zellij_with_layout(&mut channel, &remote_path.to_string_lossy());
let channel = Arc::new(Mutex::new(channel));
let last_snapshot = Arc::new(Mutex::new(String::new()));
let cursor_coordinates = Arc::new(Mutex::new((0, 0)));
sess.set_blocking(false);
let reader_thread =
read_from_channel(&channel, &last_snapshot, &cursor_coordinates, &pane_geom);
RemoteRunner {
steps: vec![],
channel,
currently_running_step: None,
current_step_index: 0,
retries_left: RETRIES,
retry_pause_ms: 100,
test_timed_out: false,
panic_on_no_retries_left: true,
last_snapshot,
cursor_coordinates,
reader_thread,
}
}
pub fn new_with_config(win_size: Size, config_file_name: &'static str) -> Self {
let remote_path = Path::new(ZELLIJ_CONFIG_PATH).join(config_file_name);
let sess = ssh_connect();

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 1636
assertion_line: 1671
expression: last_snapshot
---
Zellij (e2e-test)  Tab #1 
@ -26,4 +26,4 @@ expression: last_snapshot
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -26,4 +26,4 @@ expression: last_snapshot
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 478
assertion_line: 482
expression: last_snapshot
---
Zellij (e2e-test)  Tab #1 
@ -26,4 +26,4 @@ expression: last_snapshot
│ ││ │
└──────────────────────────────────────────────────────────┘└──────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
<←→> Move focus / <n> New / <x> Close / <r> Rename / <s> Sync / <TAB> Toggle / <ENTER> Select pane

View file

@ -26,4 +26,4 @@ expression: last_snapshot
│ ││ │
└──────────────────────────────────────────────────────────┘└──────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 1042
assertion_line: 1077
expression: last_snapshot
---
Zellij (e2e-test)  Tab #1 
@ -26,4 +26,4 @@ expression: last_snapshot
│ ││ │
└──────────────────────────────────────────────────────────┘└──────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 1307
assertion_line: 1342
expression: first_runner_snapshot
---
Zellij (mirrored_sessions)  Tab #1  Tab #2 
@ -26,4 +26,4 @@ expression: first_runner_snapshot
│ ││ │
└──────────────────────────────────────────────────────────┘└──────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 1486
assertion_line: 1521
expression: second_runner_snapshot
---
Zellij (multiple_users_in_same_pane_and_tab)  Tab #1 [ ]
@ -26,4 +26,4 @@ expression: second_runner_snapshot
│ ││ │
└──────────────────────────────────────────────────────────┘└──────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 1485
assertion_line: 1520
expression: first_runner_snapshot
---
Zellij (multiple_users_in_same_pane_and_tab)  Tab #1 [ ]
@ -26,4 +26,4 @@ expression: first_runner_snapshot
│ ││ │
└──────────────────────────────────────────────────────────┘└──────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 1581
assertion_line: 1616
expression: second_runner_snapshot
---
Zellij (multiple_users_in_different_tabs)  Tab #1 [ ] Tab #2 
@ -26,4 +26,4 @@ expression: second_runner_snapshot
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 1580
assertion_line: 1615
expression: first_runner_snapshot
---
Zellij (multiple_users_in_different_tabs)  Tab #1  Tab #2 [ ]
@ -26,4 +26,4 @@ expression: first_runner_snapshot
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 1396
assertion_line: 1431
expression: second_runner_snapshot
---
Zellij (multiple_users_in_same_pane_and_tab)  Tab #1 [ ]
@ -26,4 +26,4 @@ expression: second_runner_snapshot
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 1395
assertion_line: 1430
expression: first_runner_snapshot
---
Zellij (multiple_users_in_same_pane_and_tab)  Tab #1 [ ]
@ -26,4 +26,4 @@ expression: first_runner_snapshot
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -26,4 +26,4 @@ expression: last_snapshot
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -26,4 +26,4 @@ expression: last_snapshot
│ ││ │
└────────────────────────────────────────────────────┘└────────────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 883
assertion_line: 863
expression: last_snapshot
---
Zellij (e2e-test)  Tab #1 
@ -26,4 +26,4 @@ expression: last_snapshot
│ ││ │
└────────────────────────────────────────────────┘└────────────────────────────────────────────────┘
Ctrl + g  p  t  n  h  s  o  q 
QuickNav: Alt + <n> / Alt + <←↓↑→> or Alt + <hjkl> / Alt + <+|=|->
QuickNav: Alt + <n> / Alt + <←↓↑→> or Alt + <hjkl> / Alt + <+|->

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 1117
assertion_line: 1152
expression: last_snapshot
---
Zellij (e2e-test)  Tab #1 
@ -26,4 +26,4 @@ expression: last_snapshot
│ ││li█e19 │
└──────────────────────────────────────────────────────────┘└──────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -26,4 +26,4 @@ expression: last_snapshot
│ ││ │
└──────────────────────────────────────────────────────────┘└──────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 1163
assertion_line: 1198
expression: last_snapshot
---
Zellij (e2e-test)  Tab #1 
@ -26,4 +26,4 @@ $ │$ █
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -26,4 +26,4 @@ expression: last_snapshot
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 1767
assertion_line: 1802
expression: last_snapshot
---
Zellij (e2e-test)  Tab #1 
@ -26,4 +26,4 @@ expression: last_snapshot
│ ││ │
└──────────────────────────────────────────────────────────┘└──────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -26,4 +26,4 @@ expression: last_snapshot
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 1914
assertion_line: 1949
expression: last_snapshot
---
Zellij (e2e-test)  Tab #1 
@ -26,4 +26,4 @@ expression: last_snapshot
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -1,6 +1,6 @@
---
source: src/tests/e2e/cases.rs
assertion_line: 1865
assertion_line: 1900
expression: last_snapshot
---
Zellij (e2e-test)  Tab #1 
@ -26,4 +26,4 @@ expression: last_snapshot
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Ctrl + <g> LOCK  <p> PANE  <t> TAB  <n> RESIZE  <h> MOVE  <s> SEARCH  <o> SESSION  <q> QUIT 
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|=|-> => resize pane.
Tip: Alt + <n> => new pane. Alt + <←↓↑→> or Alt + <hjkl> => navigate. Alt + <+|-> => resize pane.

View file

@ -0,0 +1,12 @@
keybinds clear-defaults=true {
normal {
bind "F1" { SwitchToMode "Locked"; }
bind "F2" { SwitchToMode "Pane"; }
bind "F3" { SwitchToMode "Tab"; }
bind "F4" { SwitchToMode "Resize"; }
bind "F5" { SwitchToMode "Move"; }
bind "F6" { SwitchToMode "Scroll"; }
bind "F7" { SwitchToMode "Session"; }
bind "F8" { Quit; }
}
}

View file

@ -1,26 +0,0 @@
---
# Configuration for zellij.
# In order to troubleshoot your configuration try using the following command:
# `zellij setup --check`
# It should show current config locations and features that are enabled.
keybinds:
unbind: true
normal:
- action: [SwitchToMode: Locked,]
key: [F: 1]
- action: [SwitchToMode: Pane,]
key: [F: 2]
- action: [SwitchToMode: Tab,]
key: [F: 3]
- action: [SwitchToMode: Resize,]
key: [F: 4]
- action: [SwitchToMode: Move,]
key: [F: 5]
- action: [SwitchToMode: Scroll,]
key: [F: 6]
- action: [SwitchToMode: Session,]
key: [F: 7]
- action: [Quit,]
key: [F: 8]

View file

@ -1,19 +0,0 @@
---
tabs:
- direction: Horizontal
parts:
- direction: Vertical
parts:
- direction: Horizontal
split_size:
Percent: 20
- direction: Horizontal
split_size:
Percent: 50
tabs:
- direction: Horizontal
split_size:
Percent: 80
- direction: Vertical
split_size:
Percent: 20

View file

@ -1,20 +0,0 @@
---
tabs:
- direction: Horizontal
parts:
- direction: Vertical
parts:
- direction: Horizontal
split_size:
Percent: 20
- direction: Horizontal
split_size:
Percent: 90
- direction: Horizontal
tabs:
- direction: Horizontal
split_size:
Percent: 80
- direction: Vertical
split_size:
Percent: 20

View file

@ -1,17 +0,0 @@
---
tabs:
- direction: Horizontal
parts:
- direction: Vertical
parts:
- direction: Horizontal
split_size:
Percent: 20
- direction: Horizontal
split_size:
Percent: 80
split_size:
Percent: 80
- direction: Vertical
split_size:
Percent: 20

View file

@ -10,6 +10,9 @@ license = "MIT"
[dependencies]
mio = { version = "0.7.11", features = ['os-ext'] }
serde = { version = "1.0", features = ["derive"] }
url = { version = "2.2.2", features = ["serde"] }
serde_yaml = "0.8"
zellij-utils = { path = "../zellij-utils/", version = "0.32.0" }
log = "0.4.17"

View file

@ -0,0 +1,34 @@
//! The `[cli_client]` is used to attach to a running server session
//! and dispatch actions, that are specified through the command line.
use std::process;
use std::{fs, path::PathBuf};
use crate::os_input_output::ClientOsApi;
use zellij_utils::{
input::actions::Action,
ipc::{ClientToServerMsg, ServerToClientMsg},
};
pub fn start_cli_client(os_input: Box<dyn ClientOsApi>, session_name: &str, actions: Vec<Action>) {
let zellij_ipc_pipe: PathBuf = {
let mut sock_dir = zellij_utils::consts::ZELLIJ_SOCK_DIR.clone();
fs::create_dir_all(&sock_dir).unwrap();
zellij_utils::shared::set_permissions(&sock_dir, 0o700).unwrap();
sock_dir.push(session_name);
sock_dir
};
os_input.connect_to_server(&*zellij_ipc_pipe);
for action in actions {
let msg = ClientToServerMsg::Action(action, None);
os_input.send_to_server(msg);
}
loop {
match os_input.recv_from_server() {
Some((ServerToClientMsg::UnblockInputThread, _)) => {
os_input.send_to_server(ClientToServerMsg::ClientExited);
process::exit(0);
},
_ => {},
}
}
}

View file

@ -1,184 +0,0 @@
//! The `[fake_client]` is used to attach to a running server session
//! and dispatch actions, that are specified through the command line.
//! Multiple actions at the same time can be dispatched.
use log::debug;
use std::sync::{Arc, Mutex};
use std::{fs, path::PathBuf, thread};
use crate::{
command_is_executing::CommandIsExecuting, input_handler::input_actions,
os_input_output::ClientOsApi, stdin_ansi_parser::StdinAnsiParser, stdin_handler::stdin_loop,
ClientInfo, ClientInstruction, InputInstruction,
};
use zellij_utils::{
channels::{self, ChannelWithContext, SenderWithContext},
cli::CliArgs,
data::{ClientId, Style},
errors::ContextType,
input::{actions::Action, config::Config, layout::LayoutFromYaml, options::Options},
ipc::{ClientAttributes, ClientToServerMsg, ServerToClientMsg},
};
pub fn start_fake_client(
os_input: Box<dyn ClientOsApi>,
_opts: CliArgs,
config: Config,
config_options: Options,
info: ClientInfo,
_layout: Option<LayoutFromYaml>,
actions: Vec<Action>,
) {
debug!("Starting fake Zellij client!");
let session_name = info.get_session_name();
// TODO: Ideally the `fake_client` would not need to specify these options,
// but the `[NewTab:]` action depends on this state being
// even in this client.
let palette = config.themes.clone().map_or_else(
|| os_input.load_palette(),
|t| {
t.theme_config(&config_options)
.unwrap_or_else(|| os_input.load_palette())
},
);
let full_screen_ws = os_input.get_terminal_size_using_fd(0);
let client_attributes = ClientAttributes {
size: full_screen_ws,
style: Style {
colors: palette,
rounded_corners: config.ui.unwrap_or_default().pane_frames.rounded_corners,
},
keybinds: config.keybinds.clone(),
};
let first_msg = ClientToServerMsg::AttachClient(client_attributes, config_options.clone());
let zellij_ipc_pipe: PathBuf = {
let mut sock_dir = zellij_utils::consts::ZELLIJ_SOCK_DIR.clone();
fs::create_dir_all(&sock_dir).unwrap();
zellij_utils::shared::set_permissions(&sock_dir, 0o700).unwrap();
sock_dir.push(session_name);
sock_dir
};
os_input.connect_to_server(&*zellij_ipc_pipe);
os_input.send_to_server(first_msg);
let mut command_is_executing = CommandIsExecuting::new();
let (send_client_instructions, receive_client_instructions): ChannelWithContext<
ClientInstruction,
> = channels::bounded(50);
let send_client_instructions = SenderWithContext::new(send_client_instructions);
let (send_input_instructions, receive_input_instructions): ChannelWithContext<
InputInstruction,
> = channels::bounded(50);
let send_input_instructions = SenderWithContext::new(send_input_instructions);
std::panic::set_hook({
use zellij_utils::errors::handle_panic;
let send_client_instructions = send_client_instructions.clone();
Box::new(move |info| {
handle_panic(info, &send_client_instructions);
})
});
let stdin_ansi_parser = Arc::new(Mutex::new(StdinAnsiParser::new()));
let _stdin_thread = thread::Builder::new()
.name("stdin_handler".to_string())
.spawn({
let os_input = os_input.clone();
let send_input_instructions = send_input_instructions.clone();
move || stdin_loop(os_input, send_input_instructions, stdin_ansi_parser)
});
let clients: Vec<ClientId>;
os_input.send_to_server(ClientToServerMsg::ListClients);
#[allow(clippy::collapsible_match)]
loop {
if let Some((msg, _)) = os_input.recv_from_server() {
if let ServerToClientMsg::ActiveClients(active_clients) = msg {
clients = active_clients;
break;
}
}
}
debug!("The connected client id's are: {:?}.", clients);
let _input_thread = thread::Builder::new()
.name("input_handler".to_string())
.spawn({
let send_client_instructions = send_client_instructions.clone();
let command_is_executing = command_is_executing.clone();
let os_input = os_input.clone();
let default_mode = config_options.default_mode.unwrap_or_default();
let session_name = session_name.to_string();
move || {
input_actions(
os_input,
config,
config_options,
command_is_executing,
clients,
send_client_instructions,
default_mode,
receive_input_instructions,
actions,
session_name,
)
}
});
let router_thread = thread::Builder::new()
.name("router".to_string())
.spawn({
let os_input = os_input.clone();
let mut should_break = false;
move || loop {
if let Some((instruction, err_ctx)) = os_input.recv_from_server() {
err_ctx.update_thread_ctx();
if let ServerToClientMsg::Exit(_) = instruction {
should_break = true;
}
send_client_instructions.send(instruction.into()).unwrap();
if should_break {
break;
}
}
}
})
.unwrap();
loop {
let (client_instruction, mut err_ctx) = receive_client_instructions
.recv()
.expect("failed to receive app instruction on channel");
err_ctx.add_call(ContextType::Client((&client_instruction).into()));
match client_instruction {
ClientInstruction::Exit(_) => {
os_input.send_to_server(ClientToServerMsg::ClientExited);
break;
},
ClientInstruction::Error(_) => {
let _ = os_input.send_to_server(ClientToServerMsg::Action(Action::Quit, None));
// handle_error(backtrace);
},
ClientInstruction::Render(_) => {
// This is a fake client, that doesn't render, but
// dispatches actions.
},
ClientInstruction::UnblockInputThread => {
command_is_executing.unblock_input_thread();
},
ClientInstruction::SwitchToMode(input_mode) => {
send_input_instructions
.send(InputInstruction::SwitchToMode(input_mode))
.unwrap();
},
_ => {},
}
}
router_thread.join().unwrap();
}

View file

@ -11,7 +11,6 @@ use zellij_utils::{
actions::Action,
cast_termwiz_key,
config::Config,
keybinds::Keybinds,
mouse::{MouseButton, MouseEvent},
options::Options,
},
@ -133,7 +132,9 @@ impl InputHandler {
}
fn handle_key(&mut self, key: &Key, raw_bytes: Vec<u8>) {
let keybinds = &self.config.keybinds;
for action in Keybinds::key_to_actions(key, raw_bytes, &self.mode, keybinds) {
for action in
keybinds.get_actions_for_key_in_mode_or_default_action(&self.mode, key, raw_bytes)
{
let should_exit = self.dispatch_action(action, None);
if should_exit {
self.should_exit = true;
@ -230,65 +231,6 @@ impl InputHandler {
},
}
}
fn handle_actions(&mut self, actions: Vec<Action>, session_name: &str, clients: Vec<ClientId>) {
let mut detached = false;
for action in actions {
match action {
Action::Quit => {
crate::sessions::kill_session(session_name);
break;
},
Action::Detach => {
let first = clients.first().unwrap();
let last = clients.last().unwrap();
self.os_input
.send_to_server(ClientToServerMsg::DetachSession(vec![*first, *last]));
detached = true;
break;
},
// Actions, that are independent from the specific client
// and not session idempotent should be specified here
Action::NewTab(_)
| Action::Run(_)
| Action::NewPane(_)
| Action::WriteChars(_)
| Action::EditScrollback
| Action::DumpScreen(_)
| Action::ToggleActiveSyncTab
| Action::ToggleFloatingPanes
| Action::TogglePaneEmbedOrFloating
| Action::TogglePaneFrames
| Action::ToggleFocusFullscreen
| Action::Write(_) => {
let client_id = clients.first().unwrap();
log::debug!("Sending action to client: {}", client_id);
self.dispatch_action(action, Some(*client_id));
},
Action::CloseFocus | Action::CloseTab => {
let client_id = clients.first().unwrap();
log::debug!("Sending action to client: {}", client_id);
log::warn!("Running this action from the focused pane, can lead to unexpected behaviour.");
self.dispatch_action(action, Some(*client_id));
},
_ => {
// FIXME: If a specific `session_id` is specified,
// then only send the actions to that specific `client_id`
for client_id in &clients {
self.dispatch_action(action.clone(), Some(*client_id));
}
},
}
}
self.dispatch_action(Action::Detach, None);
self.should_exit = true;
log::error!("Quitting Now. Dispatched the actions");
if detached {
self.exit(ExitReason::NormalDetached);
} else {
self.exit(ExitReason::Normal);
}
}
/// Dispatches an [`Action`].
///
/// This function's body dictates what each [`Action`] actually does when
@ -329,7 +271,7 @@ impl InputHandler {
| Action::Run(_)
| Action::ToggleFloatingPanes
| Action::TogglePaneEmbedOrFloating
| Action::NewTab(_)
| Action::NewTab(..)
| Action::GoToNextTab
| Action::GoToPreviousTab
| Action::CloseTab
@ -381,29 +323,3 @@ pub(crate) fn input_loop(
)
.handle_input();
}
/// Entry point to the module. Instantiates an [`InputHandler`] and starts
/// its [`InputHandler::handle_input()`] loop.
#[allow(clippy::too_many_arguments)]
pub(crate) fn input_actions(
os_input: Box<dyn ClientOsApi>,
config: Config,
options: Options,
command_is_executing: CommandIsExecuting,
clients: Vec<ClientId>,
send_client_instructions: SenderWithContext<ClientInstruction>,
default_mode: InputMode,
receive_input_instructions: Receiver<(InputInstruction, ErrorContext)>,
actions: Vec<Action>,
session_name: String,
) {
let _handler = InputHandler::new(
os_input,
command_is_executing,
config,
options,
send_client_instructions,
default_mode,
receive_input_instructions,
)
.handle_actions(actions, &session_name, clients);
}

View file

@ -1,9 +1,9 @@
pub mod os_input_output;
pub mod cli_client;
mod command_is_executing;
pub mod fake_client;
mod input_handler;
mod sessions;
pub mod old_config_converter;
mod stdin_ansi_parser;
mod stdin_handler;
@ -30,7 +30,7 @@ use zellij_utils::{
ipc::{ClientAttributes, ClientToServerMsg, ExitReason, ServerToClientMsg},
termwiz::input::InputEvent,
};
use zellij_utils::{cli::CliArgs, input::layout::LayoutFromYaml};
use zellij_utils::{cli::CliArgs, input::layout::Layout};
/// Instructions related to the client-side application
#[derive(Debug, Clone)]
@ -124,7 +124,7 @@ pub fn start_client(
config: Config,
config_options: Options,
info: ClientInfo,
layout: Option<LayoutFromYaml>,
layout: Option<Layout>,
) {
info!("Starting Zellij client!");
let clear_client_terminal_attributes = "\u{1b}[?1l\u{1b}=\u{1b}[r\u{1b}[?1000l\u{1b}[?1002l\u{1b}[?1003l\u{1b}[?1005l\u{1b}[?1006l\u{1b}[?12l";
@ -143,20 +143,16 @@ pub fn start_client(
envs::set_zellij("0".to_string());
config.env.set_vars();
let palette = config.themes.clone().map_or_else(
|| os_input.load_palette(),
|t| {
t.theme_config(&config_options)
.unwrap_or_else(|| os_input.load_palette())
},
);
let palette = config
.theme_config(&config_options)
.unwrap_or_else(|| os_input.load_palette());
let full_screen_ws = os_input.get_terminal_size_using_fd(0);
let client_attributes = ClientAttributes {
size: full_screen_ws,
style: Style {
colors: palette,
rounded_corners: config.ui.unwrap_or_default().pane_frames.rounded_corners,
rounded_corners: config.ui.pane_frames.rounded_corners,
},
keybinds: config.keybinds.clone(),
};

View file

@ -0,0 +1,332 @@
use super::{config_yaml_to_config_kdl, layout_yaml_to_layout_kdl};
use std::path::PathBuf;
use zellij_utils::{
cli::CliArgs,
setup::{find_default_config_dir, get_layout_dir, get_theme_dir},
};
const OLD_CONFIG_NAME: &str = "config.yaml";
pub fn convert_old_yaml_files(opts: &CliArgs) {
let config_dir = opts.config_dir.clone().or_else(find_default_config_dir);
let layout_dir = get_layout_dir(config_dir.clone());
let theme_dir = get_theme_dir(find_default_config_dir());
let specified_config_location = opts.config.as_ref();
let mut layout_files_to_convert = vec![];
let mut theme_files_to_convert = vec![];
if let Some(layout) = opts.layout.as_ref() {
if layout.extension().map(|s| s.to_string_lossy().to_string()) == Some("yaml".into()) {
if layout.exists() {
layout_files_to_convert.push((layout.clone(), true));
}
}
}
layout_files_to_convert.dedup();
if let Some(layout_dir) = layout_dir {
if let Ok(files) = std::fs::read_dir(layout_dir) {
for file in files {
if let Ok(file) = file {
if file
.path()
.extension()
.map(|s| s.to_string_lossy().to_string())
== Some("yaml".into())
{
let mut new_file_path = file.path().clone();
new_file_path.set_extension("kdl");
if !new_file_path.exists() {
layout_files_to_convert.push((file.path().clone(), false));
}
}
}
}
}
}
if let Some(theme_dir) = theme_dir {
if theme_dir.is_dir() {
if let Ok(files) = std::fs::read_dir(theme_dir) {
for entry in files.flatten() {
if let Some(extension) = entry.path().extension() {
if extension == "yaml" {
let mut new_file_path = entry.path().clone();
new_file_path.set_extension("kdl");
if !new_file_path.exists() {
theme_files_to_convert.push(entry.path())
}
}
}
}
}
}
}
if let Some(config_dir) = config_dir {
let yaml_config_location = specified_config_location.cloned().filter(|c| {
c.extension().map(|s| s.to_string_lossy().to_string()) == Some("yaml".into())
});
let specified_yaml_config_location = yaml_config_location.is_some();
let config_location =
yaml_config_location.unwrap_or_else(|| config_dir.join(OLD_CONFIG_NAME));
match convert_yaml(
config_location,
layout_files_to_convert,
theme_files_to_convert,
specified_yaml_config_location,
) {
Ok(should_exit) => {
if should_exit {
std::process::exit(0);
}
},
Err(e) => {
eprintln!("");
eprintln!("\u{1b}[1;31mFailed to convert yaml config\u{1b}[m: {}", e);
eprintln!("");
std::process::exit(1);
},
}
}
}
fn print_conversion_title_message() {
println!("");
println!("\u{1b}[1mZellij has moved to a new configuration format (KDL - https://kdl.dev) and has now been run with an old YAML configuration/layout/theme file.\u{1b}[m");
}
fn print_converting_config_message(old_file_name: String, new_file_name: String) {
println!(
"- Converting configuration file: \u{1b}[1;36m{}\u{1b}[m to the new configuration format at the same location: \u{1b}[1;36m{}\u{1b}[m",
old_file_name,
new_file_name
);
}
fn print_conversion_layouts_message(layout_files_to_convert: Vec<(PathBuf, bool)>) {
println!("- Converting the following layout YAML files to KDL files in the same location:");
for (layout_file, _was_explicitly_set) in layout_files_to_convert.iter() {
let mut new_layout_file_name = layout_file.clone();
new_layout_file_name.set_extension("kdl");
println!(
"\u{1b}[1;36m{}\u{1b}[m => \u{1b}[1;36m{}\u{1b}[m",
layout_file.as_path().as_os_str().to_string_lossy(),
new_layout_file_name.as_path().as_os_str().to_string_lossy()
);
}
}
fn print_conversion_themes_message(theme_files_to_convert: Vec<PathBuf>) {
println!("- Converting the following theme YAML files to KDL files in the same location:");
for theme_file in theme_files_to_convert.iter() {
let mut new_theme_file_name = theme_file.clone();
new_theme_file_name.set_extension("kdl");
println!(
"\u{1b}[1;36m{}\u{1b}[m => \u{1b}[1;36m{}\u{1b}[m",
theme_file.as_path().as_os_str().to_string_lossy(),
new_theme_file_name.as_path().as_os_str().to_string_lossy()
);
}
}
fn print_no_actions_and_wait_for_user_input() -> Result<(), String> {
println!("\u{1b}[1;32mNo actions are required of you. Press ENTER to continue.\u{1b}[m");
std::io::stdin()
.read_line(&mut String::new())
.map_err(|e| format!("Failed to read from STDIN: {:?}", e))?;
Ok(())
}
fn print_remain_unmodified_message(will_exit: bool) {
println!("The original file(s) will remain unmodified.");
if !will_exit {
println!("Will then use the new converted file(s) for this and the next runs.");
}
println!("");
}
fn print_flag_help_message(
layout_files_to_convert: Vec<(PathBuf, bool)>,
yaml_config_file: &PathBuf,
yaml_config_was_explicitly_set: bool,
) -> Result<(), String> {
println!("\u{1b}[1;32mWhat do you need to do?\u{1b}[m");
match layout_files_to_convert
.iter()
.find(|(_f, explicit)| *explicit)
{
Some((explicitly_specified_layout, _)) => {
let mut kdl_config_file_path = yaml_config_file.clone();
let mut kdl_explicitly_specified_layout = explicitly_specified_layout.clone();
kdl_config_file_path.set_extension("kdl");
kdl_explicitly_specified_layout.set_extension("kdl");
if yaml_config_was_explicitly_set {
println!("Since both the YAML config and a YAML layout file were explicitly specified, you'll need to re-run Zellij and point it to the new files:");
println!(
"\u{1b}[1;33mzellij --config {} --layout {}\u{1b}[m",
kdl_config_file_path
.as_path()
.as_os_str()
.to_string_lossy()
.to_string(),
kdl_explicitly_specified_layout
.as_path()
.as_os_str()
.to_string_lossy()
.to_string(),
);
} else {
println!("Since a YAML layout was explicitly specified, you'll need to re-run Zellij and point it to the new layout:");
println!(
"\u{1b}[1;33mzellij --layout {}\u{1b}[m",
kdl_explicitly_specified_layout
.as_path()
.as_os_str()
.to_string_lossy()
.to_string(),
);
}
},
None => {
if yaml_config_was_explicitly_set {
let mut kdl_config_file_path = yaml_config_file.clone();
kdl_config_file_path.set_extension("kdl");
println!("Since the YAML config was explicitly specified, you'll need to re-run Zellij and point it to the new config:");
println!(
"\u{1b}[1;33mzellij --config {}\u{1b}[m",
kdl_config_file_path
.as_path()
.as_os_str()
.to_string_lossy()
.to_string(),
);
}
},
}
println!("");
println!("\u{1b}[1;32mPress ENTER to continue.\u{1b}[m");
std::io::stdin()
.read_line(&mut String::new())
.map_err(|e| format!("Failed to read from STDIN: {:?}", e))?;
Ok(())
}
fn convert_layouts(layout_files_to_convert: Vec<(PathBuf, bool)>) -> Result<(), String> {
for (layout_file, _was_explicitly_set) in layout_files_to_convert {
let raw_layout_file = std::fs::read_to_string(&layout_file)
.map_err(|e| format!("Failed to read layout file {:?}: {:?}", layout_file, e))?;
let kdl_layout = layout_yaml_to_layout_kdl(&raw_layout_file)?;
let mut new_layout_file = layout_file.clone();
new_layout_file.set_extension("kdl");
std::fs::write(&new_layout_file, kdl_layout).map_err(|e| {
format!(
"Failed to write new layout file to {:?}: {:?}",
new_layout_file, e
)
})?;
}
Ok(())
}
fn convert_themes(theme_files_to_convert: Vec<PathBuf>) -> Result<(), String> {
for theme_file in theme_files_to_convert {
let raw_theme_file = std::fs::read_to_string(&theme_file)
.map_err(|e| format!("Failed to read theme file {:?}: {:?}", theme_file, e))?;
let kdl_theme = config_yaml_to_config_kdl(&raw_theme_file, true)?;
let mut new_theme_file = theme_file.clone();
new_theme_file.set_extension("kdl");
std::fs::write(&new_theme_file, kdl_theme).map_err(|e| {
format!(
"Failed to write new theme file to {:?}: {:?}",
new_theme_file, e
)
})?;
}
Ok(())
}
fn convert_config(yaml_config_file: PathBuf, new_config_file: PathBuf) -> Result<(), String> {
if yaml_config_file.exists() && !new_config_file.exists() {
let raw_config_file = std::fs::read_to_string(&yaml_config_file)
.map_err(|e| format!("Failed to read config file {:?}: {:?}", yaml_config_file, e))?;
let kdl_config = config_yaml_to_config_kdl(&raw_config_file, false)?;
std::fs::write(&new_config_file, kdl_config).map_err(|e| {
format!(
"Failed to write new config file to {:?}: {:?}",
new_config_file, e
)
})?;
}
Ok(())
}
fn convert_yaml(
yaml_config_file: PathBuf,
layout_files_to_convert: Vec<(PathBuf, bool)>,
theme_files_to_convert: Vec<PathBuf>,
yaml_config_was_explicitly_set: bool,
) -> Result<bool, String> {
let mut should_exit = false;
let mut new_config_file = yaml_config_file.clone();
new_config_file.set_extension("kdl");
let yaml_config_file_exists = yaml_config_file.exists();
let layout_was_explicitly_set = layout_files_to_convert
.iter()
.find(|(_l, was_explicitly_set)| *was_explicitly_set)
.is_some();
let new_config_file_exists = new_config_file.exists();
let no_need_to_convert_config =
(new_config_file_exists && !yaml_config_was_explicitly_set) || !yaml_config_file_exists;
if no_need_to_convert_config
&& layout_files_to_convert.is_empty()
&& theme_files_to_convert.is_empty()
&& !layout_was_explicitly_set
{
// Nothing to do...
return Ok(should_exit);
}
print_conversion_title_message();
if yaml_config_file_exists && !new_config_file_exists {
print_converting_config_message(
yaml_config_file
.as_path()
.as_os_str()
.to_string_lossy()
.to_string(),
new_config_file
.as_path()
.as_os_str()
.to_string_lossy()
.to_string(),
);
} else if yaml_config_file_exists && new_config_file_exists && yaml_config_was_explicitly_set {
return Err(
format!(
"Specified old YAML format config (--config {}) but a new KDL file exists in that location. To fix, point to it the new file instead: zellij --config {}",
yaml_config_file.as_path().as_os_str().to_string_lossy().to_string(),
new_config_file.as_path().as_os_str().to_string_lossy().to_string()
)
);
}
if !layout_files_to_convert.is_empty() {
print_conversion_layouts_message(layout_files_to_convert.clone());
}
if !theme_files_to_convert.is_empty() {
print_conversion_themes_message(theme_files_to_convert.clone());
}
print_remain_unmodified_message(layout_was_explicitly_set || yaml_config_was_explicitly_set);
if layout_was_explicitly_set || yaml_config_was_explicitly_set {
print_flag_help_message(
layout_files_to_convert.clone(),
&yaml_config_file,
yaml_config_was_explicitly_set,
)?;
should_exit = true;
} else {
print_no_actions_and_wait_for_user_input()?;
}
convert_layouts(layout_files_to_convert)?;
convert_themes(theme_files_to_convert)?;
convert_config(yaml_config_file, new_config_file)?;
Ok(should_exit)
}

View file

@ -0,0 +1,6 @@
mod convert_old_yaml_files;
mod old_config;
mod old_layout;
pub use convert_old_yaml_files::convert_old_yaml_files;
pub use old_config::config_yaml_to_config_kdl;
pub use old_layout::layout_yaml_to_layout_kdl;

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,557 @@
// This is a converter from the old yaml layout to the new KDL layout.
//
// It is supposed to be mostly self containing - please refrain from adding to it, importing
// from it or changing it
use super::old_config::{config_yaml_to_config_kdl, OldConfigFromYaml, OldRunCommand};
use serde::{Deserialize, Serialize};
use std::vec::Vec;
use std::{fmt, path::PathBuf};
use url::Url;
fn pane_line(
pane_name: Option<&String>,
split_size: Option<OldSplitSize>,
focus: Option<bool>,
borderless: bool,
) -> String {
let mut pane_line = format!("pane");
if let Some(pane_name) = pane_name {
pane_line.push_str(&format!(" name=\"{}\"", pane_name));
}
if let Some(split_size) = split_size {
pane_line.push_str(&format!(" size={}", split_size));
}
if let Some(focus) = focus {
pane_line.push_str(&format!(" focus={}", focus));
}
if borderless {
pane_line.push_str(" borderless=true");
}
pane_line
}
fn tab_line(
pane_name: Option<&String>,
split_size: Option<OldSplitSize>,
focus: Option<bool>,
borderless: bool,
) -> String {
let mut pane_line = format!("tab");
if let Some(pane_name) = pane_name {
pane_line.push_str(&format!(" name=\"{}\"", pane_name));
}
if let Some(split_size) = split_size {
pane_line.push_str(&format!(" size={}", split_size));
}
if let Some(focus) = focus {
pane_line.push_str(&format!(" focus={}", focus));
}
if borderless {
pane_line.push_str(" borderless=true");
}
pane_line
}
fn pane_line_with_children(
pane_name: Option<&String>,
split_size: Option<OldSplitSize>,
focus: Option<bool>,
borderless: bool,
split_direction: OldDirection,
) -> String {
let mut pane_line = format!("pane");
if let Some(pane_name) = pane_name {
pane_line.push_str(&format!(" name=\"{}\"", pane_name));
}
if let Some(split_size) = split_size {
pane_line.push_str(&format!(" size={}", split_size));
}
if let Some(focus) = focus {
pane_line.push_str(&format!(" focus={}", focus));
}
pane_line.push_str(&format!(" split_direction=\"{}\"", split_direction));
if borderless {
pane_line.push_str(" borderless=true");
}
pane_line
}
fn pane_command_line(
pane_name: Option<&String>,
split_size: Option<OldSplitSize>,
focus: Option<bool>,
borderless: bool,
command: &PathBuf,
) -> String {
let mut pane_line = format!("pane command={:?}", command);
if let Some(pane_name) = pane_name {
pane_line.push_str(&format!(" name=\"{}\"", pane_name));
}
if let Some(split_size) = split_size {
pane_line.push_str(&format!(" size={}", split_size));
}
if let Some(focus) = focus {
pane_line.push_str(&format!(" focus={}", focus));
}
if borderless {
pane_line.push_str(" borderless=true");
}
pane_line
}
fn tab_line_with_children(
pane_name: Option<&String>,
split_size: Option<OldSplitSize>,
focus: Option<bool>,
borderless: bool,
split_direction: OldDirection,
) -> String {
let mut pane_line = format!("tab");
if let Some(pane_name) = pane_name {
pane_line.push_str(&format!(" name=\"{}\"", pane_name));
}
if let Some(split_size) = split_size {
pane_line.push_str(&format!(" size={}", split_size));
}
if let Some(focus) = focus {
pane_line.push_str(&format!(" focus={}", focus));
}
pane_line.push_str(&format!(" split_direction=\"{}\"", split_direction));
if borderless {
pane_line.push_str(" borderless=true");
}
pane_line
}
fn stringify_template(
template: &OldLayoutTemplate,
indentation: String,
has_no_tabs: bool,
is_base: bool,
) -> String {
let mut stringified = if is_base {
String::new()
} else {
String::from("\n")
};
if is_base && !template.parts.is_empty() && template.direction == OldDirection::Vertical {
// we don't support specifying the split direction in the layout node
// eg. layout split_direction="Vertical" { .. } <== this is not supported!!
// so we need to add a child wrapper with the split direction instead:
// layout {
// pane split_direction="Vertical" { .. }
// }
let child_indentation = format!("{} ", &indentation);
stringified.push_str(&stringify_template(
template,
child_indentation,
has_no_tabs,
false,
));
} else if !template.parts.is_empty() {
if !is_base {
stringified.push_str(&format!(
"{}{} {{",
indentation,
pane_line_with_children(
template.pane_name.as_ref(),
template.split_size,
template.focus,
template.borderless,
template.direction
)
));
}
for part in &template.parts {
let child_indentation = format!("{} ", &indentation);
stringified.push_str(&stringify_template(
&part,
child_indentation,
has_no_tabs,
false,
));
}
if !is_base {
stringified.push_str(&format!("\n{}}}", indentation));
}
} else if template.body && !has_no_tabs {
stringified.push_str(&format!("{}children", indentation));
} else {
match template.run.as_ref() {
Some(OldRunFromYaml::Plugin(plugin_from_yaml)) => {
stringified.push_str(&format!(
"{}{} {{\n",
&indentation,
pane_line(
template.pane_name.as_ref(),
template.split_size,
template.focus,
template.borderless
)
));
stringified.push_str(&format!(
"{} plugin location=\"{}\"\n",
&indentation, plugin_from_yaml.location
));
stringified.push_str(&format!("{}}}", &indentation));
},
Some(OldRunFromYaml::Command(command_from_yaml)) => {
stringified.push_str(&format!(
"{}{}",
&indentation,
&pane_command_line(
template.pane_name.as_ref(),
template.split_size,
template.focus,
template.borderless,
&command_from_yaml.command
)
));
if let Some(cwd) = command_from_yaml.cwd.as_ref() {
stringified.push_str(&format!(" cwd={:?}", cwd));
}
if !command_from_yaml.args.is_empty() {
stringified.push_str(" {\n");
stringified.push_str(&format!(
"{} args {}\n",
&indentation,
command_from_yaml
.args
.iter()
.map(|s| format!("\"{}\"", s))
.collect::<Vec<String>>()
.join(" ")
));
stringified.push_str(&format!("{}}}", &indentation));
}
},
None => {
stringified.push_str(&format!(
"{}{}",
&indentation,
pane_line(
template.pane_name.as_ref(),
template.split_size,
template.focus,
template.borderless
)
));
},
};
}
stringified
}
fn stringify_tabs(tabs: Vec<OldTabLayout>) -> String {
let mut stringified = String::new();
for tab in tabs {
let child_indentation = String::from(" ");
if !tab.parts.is_empty() {
stringified.push_str(&format!(
"\n{}{} {{",
child_indentation,
tab_line_with_children(
tab.pane_name.as_ref(),
tab.split_size,
tab.focus,
tab.borderless,
tab.direction
)
));
let tab_template = OldLayoutTemplate::from(tab);
stringified.push_str(&stringify_template(
&tab_template,
child_indentation.clone(),
true,
true,
));
stringified.push_str(&format!("\n{}}}", child_indentation));
} else {
stringified.push_str(&format!(
"\n{}{}",
child_indentation,
tab_line(
tab.pane_name.as_ref(),
tab.split_size,
tab.focus,
tab.borderless
)
));
}
}
stringified
}
pub fn layout_yaml_to_layout_kdl(raw_yaml_layout: &str) -> Result<String, String> {
// returns the raw kdl config
let layout_from_yaml: OldLayoutFromYamlIntermediate = serde_yaml::from_str(raw_yaml_layout)
.map_err(|e| format!("Failed to parse yaml: {:?}", e))?;
let mut kdl_layout = String::new();
kdl_layout.push_str("layout {");
let template = layout_from_yaml.template;
let tabs = layout_from_yaml.tabs;
let has_no_tabs = tabs.is_empty()
|| tabs.len() == 1 && tabs.get(0).map(|t| t.parts.is_empty()).unwrap_or(false);
if has_no_tabs {
let indentation = String::from("");
kdl_layout.push_str(&stringify_template(
&template,
indentation,
has_no_tabs,
true,
));
} else {
kdl_layout.push_str("\n default_tab_template {");
let indentation = String::from(" ");
kdl_layout.push_str(&stringify_template(
&template,
indentation,
has_no_tabs,
true,
));
kdl_layout.push_str("\n }");
kdl_layout.push_str(&stringify_tabs(tabs));
}
kdl_layout.push_str("\n}");
let layout_config = config_yaml_to_config_kdl(raw_yaml_layout, true)?;
if let Some(session_name) = layout_from_yaml.session.name {
kdl_layout.push_str(&format!("\nsession_name \"{}\"", session_name));
if let Some(attach_to_session) = layout_from_yaml.session.attach {
kdl_layout.push_str(&format!("\nattach_to_session {}", attach_to_session));
}
}
if !layout_config.is_empty() {
kdl_layout.push('\n');
}
kdl_layout.push_str(&layout_config);
Ok(kdl_layout)
}
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Clone, Copy)]
pub enum OldDirection {
#[serde(alias = "horizontal")]
Horizontal,
#[serde(alias = "vertical")]
Vertical,
}
impl fmt::Display for OldDirection {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
match self {
Self::Horizontal => write!(f, "Horizontal"),
Self::Vertical => write!(f, "Vertical"),
}
}
}
#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq)]
pub enum OldSplitSize {
#[serde(alias = "percent")]
Percent(u64), // 1 to 100
#[serde(alias = "fixed")]
Fixed(usize), // An absolute number of columns or rows
}
impl fmt::Display for OldSplitSize {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
match self {
Self::Percent(percent) => write!(f, "\"{}%\"", percent),
Self::Fixed(fixed_size) => write!(f, "{}", fixed_size),
}
}
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
pub enum OldRunFromYaml {
#[serde(rename = "plugin")]
Plugin(OldRunPluginFromYaml),
#[serde(rename = "command")]
Command(OldRunCommand),
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
pub struct OldRunPluginFromYaml {
#[serde(default)]
pub _allow_exec_host_cmd: bool,
pub location: Url,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(default)]
pub struct OldLayoutFromYamlIntermediate {
#[serde(default)]
pub template: OldLayoutTemplate,
#[serde(default)]
pub borderless: bool,
#[serde(default)]
pub tabs: Vec<OldTabLayout>,
#[serde(default)]
pub session: OldSessionFromYaml,
#[serde(flatten)]
pub config: Option<OldConfigFromYaml>,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
#[serde(default)]
pub struct OldLayoutFromYaml {
#[serde(default)]
pub session: OldSessionFromYaml,
#[serde(default)]
pub template: OldLayoutTemplate,
#[serde(default)]
pub borderless: bool,
#[serde(default)]
pub tabs: Vec<OldTabLayout>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)]
pub struct OldSessionFromYaml {
pub name: Option<String>,
#[serde(default = "default_as_some_true")]
pub attach: Option<bool>,
}
fn default_as_some_true() -> Option<bool> {
Some(true)
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
pub struct OldLayoutTemplate {
pub direction: OldDirection,
#[serde(default)]
pub pane_name: Option<String>,
#[serde(default)]
pub borderless: bool,
#[serde(default)]
pub parts: Vec<OldLayoutTemplate>,
#[serde(default)]
pub body: bool,
pub split_size: Option<OldSplitSize>,
pub focus: Option<bool>,
pub run: Option<OldRunFromYaml>,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
pub struct OldTabLayout {
#[serde(default)]
pub direction: OldDirection,
pub pane_name: Option<String>,
#[serde(default)]
pub borderless: bool,
#[serde(default)]
pub parts: Vec<OldTabLayout>,
pub split_size: Option<OldSplitSize>,
#[serde(default)]
pub name: String,
pub focus: Option<bool>,
pub run: Option<OldRunFromYaml>,
}
impl From<OldTabLayout> for OldLayoutTemplate {
fn from(old_tab_layout: OldTabLayout) -> Self {
OldLayoutTemplate {
direction: old_tab_layout.direction,
pane_name: old_tab_layout.pane_name.clone(),
borderless: old_tab_layout.borderless,
parts: old_tab_layout.parts.iter().map(|o| o.into()).collect(),
split_size: old_tab_layout.split_size,
focus: old_tab_layout.focus,
run: old_tab_layout.run.clone(),
body: false,
}
}
}
impl From<&OldTabLayout> for OldLayoutTemplate {
fn from(old_tab_layout: &OldTabLayout) -> Self {
OldLayoutTemplate {
direction: old_tab_layout.direction,
pane_name: old_tab_layout.pane_name.clone(),
borderless: old_tab_layout.borderless,
parts: old_tab_layout.parts.iter().map(|o| o.into()).collect(),
split_size: old_tab_layout.split_size,
focus: old_tab_layout.focus,
run: old_tab_layout.run.clone(),
body: false,
}
}
}
impl From<&mut OldTabLayout> for OldLayoutTemplate {
fn from(old_tab_layout: &mut OldTabLayout) -> Self {
OldLayoutTemplate {
direction: old_tab_layout.direction,
pane_name: old_tab_layout.pane_name.clone(),
borderless: old_tab_layout.borderless,
parts: old_tab_layout.parts.iter().map(|o| o.into()).collect(),
split_size: old_tab_layout.split_size,
focus: old_tab_layout.focus,
run: old_tab_layout.run.clone(),
body: false,
}
}
}
impl From<OldLayoutFromYamlIntermediate> for OldLayoutFromYaml {
fn from(layout_from_yaml_intermediate: OldLayoutFromYamlIntermediate) -> Self {
Self {
template: layout_from_yaml_intermediate.template,
borderless: layout_from_yaml_intermediate.borderless,
tabs: layout_from_yaml_intermediate.tabs,
session: layout_from_yaml_intermediate.session,
}
}
}
impl From<OldLayoutFromYaml> for OldLayoutFromYamlIntermediate {
fn from(layout_from_yaml: OldLayoutFromYaml) -> Self {
Self {
template: layout_from_yaml.template,
borderless: layout_from_yaml.borderless,
tabs: layout_from_yaml.tabs,
config: None,
session: layout_from_yaml.session,
}
}
}
impl Default for OldLayoutFromYamlIntermediate {
fn default() -> Self {
OldLayoutFromYaml::default().into()
}
}
impl Default for OldLayoutTemplate {
fn default() -> Self {
Self {
direction: OldDirection::Horizontal,
pane_name: None,
body: false,
borderless: false,
parts: vec![OldLayoutTemplate {
direction: OldDirection::Horizontal,
pane_name: None,
body: true,
borderless: false,
split_size: None,
focus: None,
run: None,
parts: vec![],
}],
split_size: None,
focus: None,
run: None,
}
}
}
impl Default for OldDirection {
fn default() -> Self {
OldDirection::Horizontal
}
}
// The unit test location.
#[path = "./unit/convert_layout_tests.rs"]
#[cfg(test)]
mod convert_layout_test;

View file

@ -0,0 +1,126 @@
use crate::old_config_converter::config_yaml_to_config_kdl;
use insta::assert_snapshot;
use std::path::PathBuf;
use std::{fs::File, io::prelude::*};
#[test]
fn properly_convert_default_config() -> Result<(), String> {
let fixture = PathBuf::from(format!(
"{}/src/old_config_converter/unit/fixtures/old_default_yaml_config.yaml",
env!("CARGO_MANIFEST_DIR")
));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = config_yaml_to_config_kdl(&raw_config_file, false)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}
#[test]
fn convert_config_with_custom_options() -> Result<(), String> {
let fixture = PathBuf::from(format!(
"{}/src/old_config_converter/unit/fixtures/old_yaml_config_with_custom_options.yaml",
env!("CARGO_MANIFEST_DIR")
));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = config_yaml_to_config_kdl(&raw_config_file, false)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}
#[test]
fn convert_config_with_keybind_unbinds_in_mode() -> Result<(), String> {
let fixture = PathBuf::from(format!(
"{}/src/old_config_converter/unit/fixtures/old_yaml_config_with_unbinds_in_mode.yaml",
env!("CARGO_MANIFEST_DIR")
));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = config_yaml_to_config_kdl(&raw_config_file, false)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}
#[test]
fn convert_config_with_global_keybind_unbinds() -> Result<(), String> {
let fixture = PathBuf::from(format!("{}/src/old_config_converter/unit/fixtures/old_yaml_config_with_global_keybind_unbinds.yaml", env!("CARGO_MANIFEST_DIR")));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = config_yaml_to_config_kdl(&raw_config_file, false)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}
#[test]
fn convert_config_with_unbind_all_keys_per_mode() -> Result<(), String> {
let fixture = PathBuf::from(format!("{}/src/old_config_converter/unit/fixtures/old_yaml_config_with_unbind_all_keys_per_mode.yaml", env!("CARGO_MANIFEST_DIR")));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = config_yaml_to_config_kdl(&raw_config_file, false)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}
#[test]
fn convert_config_with_env_variables() -> Result<(), String> {
let fixture = PathBuf::from(format!(
"{}/src/old_config_converter/unit/fixtures/old_yaml_config_with_env_variables.yaml",
env!("CARGO_MANIFEST_DIR")
));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = config_yaml_to_config_kdl(&raw_config_file, false)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}
#[test]
fn convert_config_with_ui_config() -> Result<(), String> {
let fixture = PathBuf::from(format!(
"{}/src/old_config_converter/unit/fixtures/old_yaml_config_with_ui.yaml",
env!("CARGO_MANIFEST_DIR")
));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = config_yaml_to_config_kdl(&raw_config_file, false)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}
#[test]
fn convert_config_with_themes_config() -> Result<(), String> {
let fixture = PathBuf::from(format!(
"{}/src/old_config_converter/unit/fixtures/old_yaml_config_with_themes.yaml",
env!("CARGO_MANIFEST_DIR")
));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = config_yaml_to_config_kdl(&raw_config_file, false)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}

View file

@ -0,0 +1,142 @@
use crate::old_config_converter::layout_yaml_to_layout_kdl;
use insta::assert_snapshot;
use std::path::PathBuf;
use std::{fs::File, io::prelude::*};
#[test]
fn properly_convert_default_layout() -> Result<(), String> {
let fixture = PathBuf::from(format!(
"{}/src/old_config_converter/unit/fixtures/old_default_yaml_layout.yaml",
env!("CARGO_MANIFEST_DIR")
));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = layout_yaml_to_layout_kdl(&raw_config_file)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}
#[test]
fn properly_convert_layout_with_session_name() -> Result<(), String> {
let fixture = PathBuf::from(format!(
"{}/src/old_config_converter/unit/fixtures/old_yaml_layout_with_session_name.yaml",
env!("CARGO_MANIFEST_DIR")
));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = layout_yaml_to_layout_kdl(&raw_config_file)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}
#[test]
fn properly_convert_layout_with_session_name_and_attach_false() -> Result<(), String> {
let fixture = PathBuf::from(format!("{}/src/old_config_converter/unit/fixtures/old_yaml_layout_with_session_name_and_attach_false.yaml", env!("CARGO_MANIFEST_DIR")));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = layout_yaml_to_layout_kdl(&raw_config_file)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}
#[test]
fn properly_convert_layout_with_config() -> Result<(), String> {
let fixture = PathBuf::from(format!(
"{}/src/old_config_converter/unit/fixtures/old_yaml_layout_with_config.yaml",
env!("CARGO_MANIFEST_DIR")
));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = layout_yaml_to_layout_kdl(&raw_config_file)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}
#[test]
fn properly_convert_layout_with_config_and_session_name() -> Result<(), String> {
let fixture = PathBuf::from(format!("{}/src/old_config_converter/unit/fixtures/old_yaml_layout_with_config_and_session_name.yaml", env!("CARGO_MANIFEST_DIR")));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = layout_yaml_to_layout_kdl(&raw_config_file)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}
#[test]
fn properly_convert_layout_example_1() -> Result<(), String> {
let fixture = PathBuf::from(format!(
"{}/src/old_config_converter/unit/fixtures/multiple_tabs_layout.yaml",
env!("CARGO_MANIFEST_DIR")
));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = layout_yaml_to_layout_kdl(&raw_config_file)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}
#[test]
fn properly_convert_layout_example_2() -> Result<(), String> {
let fixture = PathBuf::from(format!(
"{}/src/old_config_converter/unit/fixtures/multiple_tabs_layout_htop_command.yaml",
env!("CARGO_MANIFEST_DIR")
));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = layout_yaml_to_layout_kdl(&raw_config_file)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}
#[test]
fn properly_convert_layout_example_3() -> Result<(), String> {
let fixture = PathBuf::from(format!(
"{}/src/old_config_converter/unit/fixtures/run_htop_layout.yaml",
env!("CARGO_MANIFEST_DIR")
));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = layout_yaml_to_layout_kdl(&raw_config_file)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}
#[test]
fn properly_convert_layout_example_4() -> Result<(), String> {
let fixture = PathBuf::from(format!(
"{}/src/old_config_converter/unit/fixtures/run_htop_layout_with_plugins.yaml",
env!("CARGO_MANIFEST_DIR")
));
let mut handle = File::open(&fixture).map_err(|e| format!("{}", e))?;
let mut raw_config_file = String::new();
handle
.read_to_string(&mut raw_config_file)
.map_err(|e| format!("{}", e))?;
let kdl_config = layout_yaml_to_layout_kdl(&raw_config_file)?;
assert_snapshot!(format!("{}", kdl_config));
Ok(())
}

View file

@ -30,13 +30,11 @@ tabs:
Percent: 50
- direction: Vertical
- direction: Vertical
focus: true
parts:
- direction: Vertical
split_size:
Percent: 50
- direction: Vertical
focus: true
split_size:
Percent: 50
- direction: Vertical

View file

@ -0,0 +1,93 @@
---
template:
direction: Horizontal
parts:
- direction: Vertical
split_size:
Fixed: 1
run:
plugin:
location: "zellij:tab-bar"
borderless: true
- direction: Vertical
body: true
- direction: Vertical
split_size:
Fixed: 2
run:
plugin:
location: "zellij:status-bar"
borderless: true
tabs:
- direction: Vertical
parts:
- direction: Vertical
split_size:
Percent: 50
run:
command: {cmd: htop}
- direction: Vertical
split_size:
Percent: 50
- direction: Vertical
parts:
- direction: Vertical
split_size:
Percent: 50
- direction: Vertical
split_size:
Percent: 50
- direction: Vertical
parts:
- direction: Vertical
split_size:
Percent: 50
- direction: Horizontal
split_size:
Percent: 50
parts:
- direction: Vertical
split_size:
Percent: 50
- direction: Vertical
split_size:
Percent: 50
- direction: Vertical
- direction: Vertical
run:
command: {cmd: htop, args: ["-C"]}
- direction: Vertical
- direction: Vertical
parts:
- direction: Vertical
split_size:
Percent: 20
run:
plugin:
location: "zellij:strider"
- direction: Horizontal
split_size:
Percent: 80
parts:
- direction: Vertical
split_size:
Percent: 50
- direction: Vertical
split_size:
Percent: 50
- direction: Vertical
parts:
- direction: Vertical
split_size:
Percent: 40
- direction: Horizontal
split_size:
Percent: 60
parts:
- direction: Vertical
split_size:
Percent: 50
- direction: Vertical
split_size:
Percent: 50

View file

@ -573,13 +573,13 @@ plugins:
# Options:
# - detach (Default)
# - quit
#on_force_close: quit
# on_force_close: quit
# Send a request for a simplified ui (without arrow fonts) to plugins
# Options:
# - true
# - false (Default)
#simplified_ui: true
# simplified_ui: true
# Choose the path to the default shell that zellij will use for opening new panes
# Default: $SHELL

View file

@ -0,0 +1,639 @@
---
# Configuration for zellij.
# In order to troubleshoot your configuration try using the following command:
# `zellij setup --check`
# It should show current config locations and features that are enabled.
keybinds:
unbind: true
normal:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [NewPane: ]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right ]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up, ]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
# uncomment this and adjust key if using copy_on_select=false
# - action: [Copy: ]
# key: [ Alt: 'c']
locked:
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'g',]
resize:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'n', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit]
key: [Ctrl: 'q']
- action: [Resize: Left,]
key: [Char: 'h', Left,]
- action: [Resize: Down,]
key: [Char: 'j', Down,]
- action: [Resize: Up,]
key: [Char: 'k', Up, ]
- action: [Resize: Right,]
key: [Char: 'l', Right,]
- action: [Resize: Increase,]
key: [Char: '=']
- action: [Resize: Increase,]
key: [ Char: '+']
- action: [Resize: Decrease,]
key: [Char: '-']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
pane:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'p', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [MoveFocus: Left,]
key: [ Char: 'h', Left,]
- action: [MoveFocus: Right,]
key: [ Char: 'l', Right,]
- action: [MoveFocus: Down,]
key: [ Char: 'j', Down,]
- action: [MoveFocus: Up,]
key: [ Char: 'k', Up,]
- action: [SwitchFocus,]
key: [Char: 'p']
- action: [NewPane: , SwitchToMode: Normal,]
key: [Char: 'n',]
- action: [NewPane: Down, SwitchToMode: Normal,]
key: [Char: 'd',]
- action: [NewPane: Right, SwitchToMode: Normal,]
key: [Char: 'r',]
- action: [CloseFocus, SwitchToMode: Normal,]
key: [Char: 'x',]
- action: [ToggleFocusFullscreen, SwitchToMode: Normal,]
key: [Char: 'f',]
- action: [TogglePaneFrames, SwitchToMode: Normal,]
key: [Char: 'z',]
- action: [ToggleFloatingPanes, SwitchToMode: Normal,]
key: [Char: 'w']
- action: [TogglePaneEmbedOrFloating, SwitchToMode: Normal,]
key: [Char: 'e']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [SwitchToMode: RenamePane, PaneNameInput: [0],]
key: [Char: 'c']
move:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'h', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [Quit]
key: [Ctrl: 'q']
- action: [MovePane: ,]
key: [Char: 'n', Char: "\t",]
- action: [MovePane: Left,]
key: [Char: 'h', Left,]
- action: [MovePane: Down,]
key: [Char: 'j', Down,]
- action: [MovePane: Up,]
key: [Char: 'k', Up, ]
- action: [MovePane: Right,]
key: [Char: 'l', Right,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
tab:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 't', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: RenameTab, TabNameInput: [0],]
key: [Char: 'r']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [GoToPreviousTab,]
key: [ Char: 'h', Left, Up, Char: 'k',]
- action: [GoToNextTab,]
key: [ Char: 'l', Right,Down, Char: 'j']
- action: [NewTab: , SwitchToMode: Normal,]
key: [ Char: 'n',]
- action: [CloseTab, SwitchToMode: Normal,]
key: [ Char: 'x',]
- action: [ToggleActiveSyncTab, SwitchToMode: Normal,]
key: [Char: 's']
- action: [GoToTab: 1, SwitchToMode: Normal,]
key: [ Char: '1',]
- action: [GoToTab: 2, SwitchToMode: Normal,]
key: [ Char: '2',]
- action: [GoToTab: 3, SwitchToMode: Normal,]
key: [ Char: '3',]
- action: [GoToTab: 4, SwitchToMode: Normal,]
key: [ Char: '4',]
- action: [GoToTab: 5, SwitchToMode: Normal,]
key: [ Char: '5',]
- action: [GoToTab: 6, SwitchToMode: Normal,]
key: [ Char: '6',]
- action: [GoToTab: 7, SwitchToMode: Normal,]
key: [ Char: '7',]
- action: [GoToTab: 8, SwitchToMode: Normal,]
key: [ Char: '8',]
- action: [GoToTab: 9, SwitchToMode: Normal,]
key: [ Char: '9',]
- action: [ToggleTab]
key: [ Char: "\t" ]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
scroll:
- action: [EditScrollback, SwitchToMode: Normal]
key: [Char: 'e']
- action: [SwitchToMode: Normal,]
key: [Ctrl: 's', Char: ' ', Char: "\n", Esc]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [ScrollToBottom, SwitchToMode: Normal,]
key: [Ctrl: 'c',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [ScrollDown,]
key: [Char: 'j', Down,]
- action: [ScrollUp,]
key: [Char: 'k', Up,]
- action: [PageScrollDown,]
key: [Ctrl: 'f', PageDown, Right, Char: 'l',]
- action: [PageScrollUp,]
key: [Ctrl: 'b', PageUp, Left, Char: 'h',]
- action: [HalfPageScrollDown,]
key: [Char: 'd',]
- action: [HalfPageScrollUp,]
key: [Char: 'u',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
# uncomment this and adjust key if using copy_on_select=false
# - action: [Copy: ]
# key: [ Alt: 'c']
- action: [SwitchToMode: EnterSearch, SearchInput: [0],]
key: [Char: 's']
entersearch:
- action: [SwitchToMode: Search,]
key: [Char: "\n"]
- action: [SearchInput: [27], SwitchToMode: Scroll,]
key: [Ctrl: 'c', Esc]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
search:
- action: [SwitchToMode: Normal,]
key: [Ctrl: 's', Char: ' ', Char: "\n", Esc]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [ScrollToBottom, SwitchToMode: Normal,]
key: [Ctrl: 'c',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [ScrollDown,]
key: [Char: 'j', Down,]
- action: [ScrollUp,]
key: [Char: 'k', Up,]
- action: [PageScrollDown,]
key: [Ctrl: 'f', PageDown, Right, Char: 'l',]
- action: [PageScrollUp,]
key: [Ctrl: 'b', PageUp, Left, Char: 'h',]
- action: [HalfPageScrollDown,]
key: [Char: 'd',]
- action: [HalfPageScrollUp,]
key: [Char: 'u',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [SwitchToMode: EnterSearch, SearchInput: [0],]
key: [Char: 's']
- action: [Search: Down]
key: [Char: 'n']
- action: [Search: Up]
key: [Char: 'p']
- action: [SearchToggleOption: CaseSensitivity]
key: [Char: 'c']
- action: [SearchToggleOption: Wrap]
key: [Char: 'w']
- action: [SearchToggleOption: WholeWord]
key: [Char: 'o']
renametab:
- action: [SwitchToMode: Normal,]
key: [Char: "\n", Ctrl: 'c', Esc]
- action: [UndoRenameTab , SwitchToMode: Tab,]
key: [Esc,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
renamepane:
- action: [SwitchToMode: Normal,]
key: [Char: "\n", Ctrl: 'c', Esc]
- action: [UndoRenamePane , SwitchToMode: Pane,]
key: [Esc,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
session:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'o', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [Detach,]
key: [Char: 'd',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
tmux:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'o', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Scroll,]
key: [ Char: '[']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [Write: [2,], SwitchToMode: Normal]
key: [Ctrl: 'b']
- action: [NewPane: Down, SwitchToMode: Normal,]
key: [Char: "\"",]
- action: [NewPane: Right, SwitchToMode: Normal,]
key: [Char: '%',]
- action: [ToggleFocusFullscreen, SwitchToMode: Normal,]
key: [Char: 'z',]
- action: [NewTab: , SwitchToMode: Normal,]
key: [ Char: 'c',]
- action: [SwitchToMode: RenameTab, TabNameInput: [0],]
key: [Char: ',']
- action: [GoToPreviousTab, SwitchToMode: Normal,]
key: [ Char: 'p']
- action: [GoToNextTab, SwitchToMode: Normal,]
key: [ Char: 'n']
- action: [MoveFocus: Left, SwitchToMode: Normal,]
key: [ Left,]
- action: [MoveFocus: Right, SwitchToMode: Normal,]
key: [ Right,]
- action: [MoveFocus: Down, SwitchToMode: Normal,]
key: [ Down,]
- action: [MoveFocus: Up, SwitchToMode: Normal,]
key: [ Up,]
- action: [MoveFocus: Left, SwitchToMode: Normal,]
key: [ Char: 'h']
- action: [MoveFocus: Right, SwitchToMode: Normal,]
key: [ Char: 'l']
- action: [MoveFocus: Down, SwitchToMode: Normal,]
key: [ Char: 'j']
- action: [MoveFocus: Up, SwitchToMode: Normal,]
key: [ Char: 'k']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [FocusNextPane,]
key: [ Char: 'o']
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [Detach,]
key: [Char: 'd',]
plugins:
- path: tab-bar
tag: tab-bar
- path: status-bar
tag: status-bar
- path: strider
tag: strider
- path: compact-bar
tag: compact-bar
# Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
# eg. when terminal window with an active zellij session is closed
# Options:
# - detach (Default)
# - quit
on_force_close: quit
# Send a request for a simplified ui (without arrow fonts) to plugins
# Options:
# - true
# - false (Default)
simplified_ui: true
# Choose the path to the default shell that zellij will use for opening new panes
# Default: $SHELL
default_shell: fish
# Toggle between having pane frames around the panes
# Options:
# - true (default)
# - false
pane_frames: true
# Choose the theme that is specified in the themes section.
# For some examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
# Default: default
theme: default
# Choose the mode that zellij uses when starting up.
# Default: normal
default_mode: locked
# Toggle enabling the mouse mode.
# On certain configurations, or terminals this could
# potentially interfere with copying text.
# Options:
# - true (default)
# - false
mouse_mode: false
# Configure the scroll back buffer size
# This is the number of lines zellij stores for each pane in the scroll back
# buffer. Excess number of lines are discarded in a FIFO fashion.
# Valid values: positive integers
# Default value: 10000
scroll_buffer_size: 10000
# Provide a command to execute when copying text. The text will be piped to
# the stdin of the program to perform the copy. This can be used with
# terminal emulators which do not support the OSC 52 ANSI control sequence
# that will be used by default if this option is not set.
# Examples:
#copy_command: "xclip -selection clipboard" # x11
#copy_command: "wl-copy" # wayland
copy_command: "pbcopy" # osx
# Choose the destination for copied text
# Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
# Does not apply when using copy_command.
# Options:
# - system (default)
# - primary
copy_clipboard: primary
# Enable or disable automatic copy (and clear) of selection when releasing mouse
copy_on_select: true
# Path to the default editor to use to edit pane scrollbuffer
scrollback_editor: /usr/bin/nano

View file

@ -0,0 +1,644 @@
---
# Configuration for zellij.
# In order to troubleshoot your configuration try using the following command:
# `zellij setup --check`
# It should show current config locations and features that are enabled.
keybinds:
unbind: true
normal:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [NewPane: ]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right ]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up, ]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
# uncomment this and adjust key if using copy_on_select=false
# - action: [Copy: ]
# key: [ Alt: 'c']
locked:
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'g',]
resize:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'n', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit]
key: [Ctrl: 'q']
- action: [Resize: Left,]
key: [Char: 'h', Left,]
- action: [Resize: Down,]
key: [Char: 'j', Down,]
- action: [Resize: Up,]
key: [Char: 'k', Up, ]
- action: [Resize: Right,]
key: [Char: 'l', Right,]
- action: [Resize: Increase,]
key: [Char: '=']
- action: [Resize: Increase,]
key: [ Char: '+']
- action: [Resize: Decrease,]
key: [Char: '-']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
pane:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'p', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [MoveFocus: Left,]
key: [ Char: 'h', Left,]
- action: [MoveFocus: Right,]
key: [ Char: 'l', Right,]
- action: [MoveFocus: Down,]
key: [ Char: 'j', Down,]
- action: [MoveFocus: Up,]
key: [ Char: 'k', Up,]
- action: [SwitchFocus,]
key: [Char: 'p']
- action: [NewPane: , SwitchToMode: Normal,]
key: [Char: 'n',]
- action: [NewPane: Down, SwitchToMode: Normal,]
key: [Char: 'd',]
- action: [NewPane: Right, SwitchToMode: Normal,]
key: [Char: 'r',]
- action: [CloseFocus, SwitchToMode: Normal,]
key: [Char: 'x',]
- action: [ToggleFocusFullscreen, SwitchToMode: Normal,]
key: [Char: 'f',]
- action: [TogglePaneFrames, SwitchToMode: Normal,]
key: [Char: 'z',]
- action: [ToggleFloatingPanes, SwitchToMode: Normal,]
key: [Char: 'w']
- action: [TogglePaneEmbedOrFloating, SwitchToMode: Normal,]
key: [Char: 'e']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [SwitchToMode: RenamePane, PaneNameInput: [0],]
key: [Char: 'c']
move:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'h', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [Quit]
key: [Ctrl: 'q']
- action: [MovePane: ,]
key: [Char: 'n', Char: "\t",]
- action: [MovePane: Left,]
key: [Char: 'h', Left,]
- action: [MovePane: Down,]
key: [Char: 'j', Down,]
- action: [MovePane: Up,]
key: [Char: 'k', Up, ]
- action: [MovePane: Right,]
key: [Char: 'l', Right,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
tab:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 't', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: RenameTab, TabNameInput: [0],]
key: [Char: 'r']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [GoToPreviousTab,]
key: [ Char: 'h', Left, Up, Char: 'k',]
- action: [GoToNextTab,]
key: [ Char: 'l', Right,Down, Char: 'j']
- action: [NewTab: , SwitchToMode: Normal,]
key: [ Char: 'n',]
- action: [CloseTab, SwitchToMode: Normal,]
key: [ Char: 'x',]
- action: [ToggleActiveSyncTab, SwitchToMode: Normal,]
key: [Char: 's']
- action: [GoToTab: 1, SwitchToMode: Normal,]
key: [ Char: '1',]
- action: [GoToTab: 2, SwitchToMode: Normal,]
key: [ Char: '2',]
- action: [GoToTab: 3, SwitchToMode: Normal,]
key: [ Char: '3',]
- action: [GoToTab: 4, SwitchToMode: Normal,]
key: [ Char: '4',]
- action: [GoToTab: 5, SwitchToMode: Normal,]
key: [ Char: '5',]
- action: [GoToTab: 6, SwitchToMode: Normal,]
key: [ Char: '6',]
- action: [GoToTab: 7, SwitchToMode: Normal,]
key: [ Char: '7',]
- action: [GoToTab: 8, SwitchToMode: Normal,]
key: [ Char: '8',]
- action: [GoToTab: 9, SwitchToMode: Normal,]
key: [ Char: '9',]
- action: [ToggleTab]
key: [ Char: "\t" ]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
scroll:
- action: [EditScrollback, SwitchToMode: Normal]
key: [Char: 'e']
- action: [SwitchToMode: Normal,]
key: [Ctrl: 's', Char: ' ', Char: "\n", Esc]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [ScrollToBottom, SwitchToMode: Normal,]
key: [Ctrl: 'c',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [ScrollDown,]
key: [Char: 'j', Down,]
- action: [ScrollUp,]
key: [Char: 'k', Up,]
- action: [PageScrollDown,]
key: [Ctrl: 'f', PageDown, Right, Char: 'l',]
- action: [PageScrollUp,]
key: [Ctrl: 'b', PageUp, Left, Char: 'h',]
- action: [HalfPageScrollDown,]
key: [Char: 'd',]
- action: [HalfPageScrollUp,]
key: [Char: 'u',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
# uncomment this and adjust key if using copy_on_select=false
# - action: [Copy: ]
# key: [ Alt: 'c']
- action: [SwitchToMode: EnterSearch, SearchInput: [0],]
key: [Char: 's']
entersearch:
- action: [SwitchToMode: Search,]
key: [Char: "\n"]
- action: [SearchInput: [27], SwitchToMode: Scroll,]
key: [Ctrl: 'c', Esc]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
search:
- action: [SwitchToMode: Normal,]
key: [Ctrl: 's', Char: ' ', Char: "\n", Esc]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [ScrollToBottom, SwitchToMode: Normal,]
key: [Ctrl: 'c',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [ScrollDown,]
key: [Char: 'j', Down,]
- action: [ScrollUp,]
key: [Char: 'k', Up,]
- action: [PageScrollDown,]
key: [Ctrl: 'f', PageDown, Right, Char: 'l',]
- action: [PageScrollUp,]
key: [Ctrl: 'b', PageUp, Left, Char: 'h',]
- action: [HalfPageScrollDown,]
key: [Char: 'd',]
- action: [HalfPageScrollUp,]
key: [Char: 'u',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [SwitchToMode: EnterSearch, SearchInput: [0],]
key: [Char: 's']
- action: [Search: Down]
key: [Char: 'n']
- action: [Search: Up]
key: [Char: 'p']
- action: [SearchToggleOption: CaseSensitivity]
key: [Char: 'c']
- action: [SearchToggleOption: Wrap]
key: [Char: 'w']
- action: [SearchToggleOption: WholeWord]
key: [Char: 'o']
renametab:
- action: [SwitchToMode: Normal,]
key: [Char: "\n", Ctrl: 'c', Esc]
- action: [UndoRenameTab , SwitchToMode: Tab,]
key: [Esc,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
renamepane:
- action: [SwitchToMode: Normal,]
key: [Char: "\n", Ctrl: 'c', Esc]
- action: [UndoRenamePane , SwitchToMode: Pane,]
key: [Esc,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
session:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'o', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [Detach,]
key: [Char: 'd',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
tmux:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'o', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Scroll,]
key: [ Char: '[']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [Write: [2,], SwitchToMode: Normal]
key: [Ctrl: 'b']
- action: [NewPane: Down, SwitchToMode: Normal,]
key: [Char: "\"",]
- action: [NewPane: Right, SwitchToMode: Normal,]
key: [Char: '%',]
- action: [ToggleFocusFullscreen, SwitchToMode: Normal,]
key: [Char: 'z',]
- action: [NewTab: , SwitchToMode: Normal,]
key: [ Char: 'c',]
- action: [SwitchToMode: RenameTab, TabNameInput: [0],]
key: [Char: ',']
- action: [GoToPreviousTab, SwitchToMode: Normal,]
key: [ Char: 'p']
- action: [GoToNextTab, SwitchToMode: Normal,]
key: [ Char: 'n']
- action: [MoveFocus: Left, SwitchToMode: Normal,]
key: [ Left,]
- action: [MoveFocus: Right, SwitchToMode: Normal,]
key: [ Right,]
- action: [MoveFocus: Down, SwitchToMode: Normal,]
key: [ Down,]
- action: [MoveFocus: Up, SwitchToMode: Normal,]
key: [ Up,]
- action: [MoveFocus: Left, SwitchToMode: Normal,]
key: [ Char: 'h']
- action: [MoveFocus: Right, SwitchToMode: Normal,]
key: [ Char: 'l']
- action: [MoveFocus: Down, SwitchToMode: Normal,]
key: [ Char: 'j']
- action: [MoveFocus: Up, SwitchToMode: Normal,]
key: [ Char: 'k']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [FocusNextPane,]
key: [ Char: 'o']
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [Detach,]
key: [Char: 'd',]
plugins:
- path: tab-bar
tag: tab-bar
- path: status-bar
tag: status-bar
- path: strider
tag: strider
- path: compact-bar
tag: compact-bar
env:
foo: bar
bar: baz
RUST_BACKTRACE: "1"
# Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
# eg. when terminal window with an active zellij session is closed
# Options:
# - detach (Default)
# - quit
# on_force_close: quit
# Send a request for a simplified ui (without arrow fonts) to plugins
# Options:
# - true
# - false (Default)
# simplified_ui: true
# Choose the path to the default shell that zellij will use for opening new panes
# Default: $SHELL
# default_shell: fish
# Toggle between having pane frames around the panes
# Options:
# - true (default)
# - false
#pane_frames: true
# Choose the theme that is specified in the themes section.
# For some examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
# Default: default
#theme: default
# Choose the mode that zellij uses when starting up.
# Default: normal
#default_mode: locked
# Toggle enabling the mouse mode.
# On certain configurations, or terminals this could
# potentially interfere with copying text.
# Options:
# - true (default)
# - false
#mouse_mode: false
# Configure the scroll back buffer size
# This is the number of lines zellij stores for each pane in the scroll back
# buffer. Excess number of lines are discarded in a FIFO fashion.
# Valid values: positive integers
# Default value: 10000
#scroll_buffer_size: 10000
# Provide a command to execute when copying text. The text will be piped to
# the stdin of the program to perform the copy. This can be used with
# terminal emulators which do not support the OSC 52 ANSI control sequence
# that will be used by default if this option is not set.
# Examples:
#copy_command: "xclip -selection clipboard" # x11
#copy_command: "wl-copy" # wayland
#copy_command: "pbcopy" # osx
# Choose the destination for copied text
# Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
# Does not apply when using copy_command.
# Options:
# - system (default)
# - primary
#copy_clipboard: primary
# Enable or disable automatic copy (and clear) of selection when releasing mouse
#copy_on_select: true
# Path to the default editor to use to edit pane scrollbuffer
# scrollback_editor: /usr/bin/nano

View file

@ -0,0 +1,639 @@
---
# Configuration for zellij.
# In order to troubleshoot your configuration try using the following command:
# `zellij setup --check`
# It should show current config locations and features that are enabled.
keybinds:
unbind: [Ctrl: 'g', Char: ' ']
normal:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [NewPane: ]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right ]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up, ]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
# uncomment this and adjust key if using copy_on_select=false
# - action: [Copy: ]
# key: [ Alt: 'c']
locked:
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'g',]
resize:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'n', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit]
key: [Ctrl: 'q']
- action: [Resize: Left,]
key: [Char: 'h', Left,]
- action: [Resize: Down,]
key: [Char: 'j', Down,]
- action: [Resize: Up,]
key: [Char: 'k', Up, ]
- action: [Resize: Right,]
key: [Char: 'l', Right,]
- action: [Resize: Increase,]
key: [Char: '=']
- action: [Resize: Increase,]
key: [ Char: '+']
- action: [Resize: Decrease,]
key: [Char: '-']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
pane:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'p', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [MoveFocus: Left,]
key: [ Char: 'h', Left,]
- action: [MoveFocus: Right,]
key: [ Char: 'l', Right,]
- action: [MoveFocus: Down,]
key: [ Char: 'j', Down,]
- action: [MoveFocus: Up,]
key: [ Char: 'k', Up,]
- action: [SwitchFocus,]
key: [Char: 'p']
- action: [NewPane: , SwitchToMode: Normal,]
key: [Char: 'n',]
- action: [NewPane: Down, SwitchToMode: Normal,]
key: [Char: 'd',]
- action: [NewPane: Right, SwitchToMode: Normal,]
key: [Char: 'r',]
- action: [CloseFocus, SwitchToMode: Normal,]
key: [Char: 'x',]
- action: [ToggleFocusFullscreen, SwitchToMode: Normal,]
key: [Char: 'f',]
- action: [TogglePaneFrames, SwitchToMode: Normal,]
key: [Char: 'z',]
- action: [ToggleFloatingPanes, SwitchToMode: Normal,]
key: [Char: 'w']
- action: [TogglePaneEmbedOrFloating, SwitchToMode: Normal,]
key: [Char: 'e']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [SwitchToMode: RenamePane, PaneNameInput: [0],]
key: [Char: 'c']
move:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'h', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [Quit]
key: [Ctrl: 'q']
- action: [MovePane: ,]
key: [Char: 'n', Char: "\t",]
- action: [MovePane: Left,]
key: [Char: 'h', Left,]
- action: [MovePane: Down,]
key: [Char: 'j', Down,]
- action: [MovePane: Up,]
key: [Char: 'k', Up, ]
- action: [MovePane: Right,]
key: [Char: 'l', Right,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
tab:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 't', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: RenameTab, TabNameInput: [0],]
key: [Char: 'r']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [GoToPreviousTab,]
key: [ Char: 'h', Left, Up, Char: 'k',]
- action: [GoToNextTab,]
key: [ Char: 'l', Right,Down, Char: 'j']
- action: [NewTab: , SwitchToMode: Normal,]
key: [ Char: 'n',]
- action: [CloseTab, SwitchToMode: Normal,]
key: [ Char: 'x',]
- action: [ToggleActiveSyncTab, SwitchToMode: Normal,]
key: [Char: 's']
- action: [GoToTab: 1, SwitchToMode: Normal,]
key: [ Char: '1',]
- action: [GoToTab: 2, SwitchToMode: Normal,]
key: [ Char: '2',]
- action: [GoToTab: 3, SwitchToMode: Normal,]
key: [ Char: '3',]
- action: [GoToTab: 4, SwitchToMode: Normal,]
key: [ Char: '4',]
- action: [GoToTab: 5, SwitchToMode: Normal,]
key: [ Char: '5',]
- action: [GoToTab: 6, SwitchToMode: Normal,]
key: [ Char: '6',]
- action: [GoToTab: 7, SwitchToMode: Normal,]
key: [ Char: '7',]
- action: [GoToTab: 8, SwitchToMode: Normal,]
key: [ Char: '8',]
- action: [GoToTab: 9, SwitchToMode: Normal,]
key: [ Char: '9',]
- action: [ToggleTab]
key: [ Char: "\t" ]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
scroll:
- action: [EditScrollback, SwitchToMode: Normal]
key: [Char: 'e']
- action: [SwitchToMode: Normal,]
key: [Ctrl: 's', Char: ' ', Char: "\n", Esc]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [ScrollToBottom, SwitchToMode: Normal,]
key: [Ctrl: 'c',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [ScrollDown,]
key: [Char: 'j', Down,]
- action: [ScrollUp,]
key: [Char: 'k', Up,]
- action: [PageScrollDown,]
key: [Ctrl: 'f', PageDown, Right, Char: 'l',]
- action: [PageScrollUp,]
key: [Ctrl: 'b', PageUp, Left, Char: 'h',]
- action: [HalfPageScrollDown,]
key: [Char: 'd',]
- action: [HalfPageScrollUp,]
key: [Char: 'u',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
# uncomment this and adjust key if using copy_on_select=false
# - action: [Copy: ]
# key: [ Alt: 'c']
- action: [SwitchToMode: EnterSearch, SearchInput: [0],]
key: [Char: 's']
entersearch:
- action: [SwitchToMode: Search,]
key: [Char: "\n"]
- action: [SearchInput: [27], SwitchToMode: Scroll,]
key: [Ctrl: 'c', Esc]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
search:
- action: [SwitchToMode: Normal,]
key: [Ctrl: 's', Char: ' ', Char: "\n", Esc]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [ScrollToBottom, SwitchToMode: Normal,]
key: [Ctrl: 'c',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [ScrollDown,]
key: [Char: 'j', Down,]
- action: [ScrollUp,]
key: [Char: 'k', Up,]
- action: [PageScrollDown,]
key: [Ctrl: 'f', PageDown, Right, Char: 'l',]
- action: [PageScrollUp,]
key: [Ctrl: 'b', PageUp, Left, Char: 'h',]
- action: [HalfPageScrollDown,]
key: [Char: 'd',]
- action: [HalfPageScrollUp,]
key: [Char: 'u',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [SwitchToMode: EnterSearch, SearchInput: [0],]
key: [Char: 's']
- action: [Search: Down]
key: [Char: 'n']
- action: [Search: Up]
key: [Char: 'p']
- action: [SearchToggleOption: CaseSensitivity]
key: [Char: 'c']
- action: [SearchToggleOption: Wrap]
key: [Char: 'w']
- action: [SearchToggleOption: WholeWord]
key: [Char: 'o']
renametab:
- action: [SwitchToMode: Normal,]
key: [Char: "\n", Ctrl: 'c', Esc]
- action: [UndoRenameTab , SwitchToMode: Tab,]
key: [Esc,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
renamepane:
- action: [SwitchToMode: Normal,]
key: [Char: "\n", Ctrl: 'c', Esc]
- action: [UndoRenamePane , SwitchToMode: Pane,]
key: [Esc,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
session:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'o', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [Detach,]
key: [Char: 'd',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
tmux:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'o', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Scroll,]
key: [ Char: '[']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [Write: [2,], SwitchToMode: Normal]
key: [Ctrl: 'b']
- action: [NewPane: Down, SwitchToMode: Normal,]
key: [Char: "\"",]
- action: [NewPane: Right, SwitchToMode: Normal,]
key: [Char: '%',]
- action: [ToggleFocusFullscreen, SwitchToMode: Normal,]
key: [Char: 'z',]
- action: [NewTab: , SwitchToMode: Normal,]
key: [ Char: 'c',]
- action: [SwitchToMode: RenameTab, TabNameInput: [0],]
key: [Char: ',']
- action: [GoToPreviousTab, SwitchToMode: Normal,]
key: [ Char: 'p']
- action: [GoToNextTab, SwitchToMode: Normal,]
key: [ Char: 'n']
- action: [MoveFocus: Left, SwitchToMode: Normal,]
key: [ Left,]
- action: [MoveFocus: Right, SwitchToMode: Normal,]
key: [ Right,]
- action: [MoveFocus: Down, SwitchToMode: Normal,]
key: [ Down,]
- action: [MoveFocus: Up, SwitchToMode: Normal,]
key: [ Up,]
- action: [MoveFocus: Left, SwitchToMode: Normal,]
key: [ Char: 'h']
- action: [MoveFocus: Right, SwitchToMode: Normal,]
key: [ Char: 'l']
- action: [MoveFocus: Down, SwitchToMode: Normal,]
key: [ Char: 'j']
- action: [MoveFocus: Up, SwitchToMode: Normal,]
key: [ Char: 'k']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [FocusNextPane,]
key: [ Char: 'o']
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [Detach,]
key: [Char: 'd',]
plugins:
- path: tab-bar
tag: tab-bar
- path: status-bar
tag: status-bar
- path: strider
tag: strider
- path: compact-bar
tag: compact-bar
# Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
# eg. when terminal window with an active zellij session is closed
# Options:
# - detach (Default)
# - quit
# on_force_close: quit
# Send a request for a simplified ui (without arrow fonts) to plugins
# Options:
# - true
# - false (Default)
# simplified_ui: true
# Choose the path to the default shell that zellij will use for opening new panes
# Default: $SHELL
# default_shell: fish
# Toggle between having pane frames around the panes
# Options:
# - true (default)
# - false
#pane_frames: true
# Choose the theme that is specified in the themes section.
# For some examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
# Default: default
#theme: default
# Choose the mode that zellij uses when starting up.
# Default: normal
#default_mode: locked
# Toggle enabling the mouse mode.
# On certain configurations, or terminals this could
# potentially interfere with copying text.
# Options:
# - true (default)
# - false
#mouse_mode: false
# Configure the scroll back buffer size
# This is the number of lines zellij stores for each pane in the scroll back
# buffer. Excess number of lines are discarded in a FIFO fashion.
# Valid values: positive integers
# Default value: 10000
#scroll_buffer_size: 10000
# Provide a command to execute when copying text. The text will be piped to
# the stdin of the program to perform the copy. This can be used with
# terminal emulators which do not support the OSC 52 ANSI control sequence
# that will be used by default if this option is not set.
# Examples:
#copy_command: "xclip -selection clipboard" # x11
#copy_command: "wl-copy" # wayland
#copy_command: "pbcopy" # osx
# Choose the destination for copied text
# Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
# Does not apply when using copy_command.
# Options:
# - system (default)
# - primary
#copy_clipboard: primary
# Enable or disable automatic copy (and clear) of selection when releasing mouse
#copy_on_select: true
# Path to the default editor to use to edit pane scrollbuffer
# scrollback_editor: /usr/bin/nano

View file

@ -0,0 +1,677 @@
---
# Configuration for zellij.
# In order to troubleshoot your configuration try using the following command:
# `zellij setup --check`
# It should show current config locations and features that are enabled.
keybinds:
unbind: true
normal:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [NewPane: ]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right ]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up, ]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
# uncomment this and adjust key if using copy_on_select=false
# - action: [Copy: ]
# key: [ Alt: 'c']
locked:
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'g',]
resize:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'n', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit]
key: [Ctrl: 'q']
- action: [Resize: Left,]
key: [Char: 'h', Left,]
- action: [Resize: Down,]
key: [Char: 'j', Down,]
- action: [Resize: Up,]
key: [Char: 'k', Up, ]
- action: [Resize: Right,]
key: [Char: 'l', Right,]
- action: [Resize: Increase,]
key: [Char: '=']
- action: [Resize: Increase,]
key: [ Char: '+']
- action: [Resize: Decrease,]
key: [Char: '-']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
pane:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'p', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [MoveFocus: Left,]
key: [ Char: 'h', Left,]
- action: [MoveFocus: Right,]
key: [ Char: 'l', Right,]
- action: [MoveFocus: Down,]
key: [ Char: 'j', Down,]
- action: [MoveFocus: Up,]
key: [ Char: 'k', Up,]
- action: [SwitchFocus,]
key: [Char: 'p']
- action: [NewPane: , SwitchToMode: Normal,]
key: [Char: 'n',]
- action: [NewPane: Down, SwitchToMode: Normal,]
key: [Char: 'd',]
- action: [NewPane: Right, SwitchToMode: Normal,]
key: [Char: 'r',]
- action: [CloseFocus, SwitchToMode: Normal,]
key: [Char: 'x',]
- action: [ToggleFocusFullscreen, SwitchToMode: Normal,]
key: [Char: 'f',]
- action: [TogglePaneFrames, SwitchToMode: Normal,]
key: [Char: 'z',]
- action: [ToggleFloatingPanes, SwitchToMode: Normal,]
key: [Char: 'w']
- action: [TogglePaneEmbedOrFloating, SwitchToMode: Normal,]
key: [Char: 'e']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [SwitchToMode: RenamePane, PaneNameInput: [0],]
key: [Char: 'c']
move:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'h', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [Quit]
key: [Ctrl: 'q']
- action: [MovePane: ,]
key: [Char: 'n', Char: "\t",]
- action: [MovePane: Left,]
key: [Char: 'h', Left,]
- action: [MovePane: Down,]
key: [Char: 'j', Down,]
- action: [MovePane: Up,]
key: [Char: 'k', Up, ]
- action: [MovePane: Right,]
key: [Char: 'l', Right,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
tab:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 't', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: RenameTab, TabNameInput: [0],]
key: [Char: 'r']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [GoToPreviousTab,]
key: [ Char: 'h', Left, Up, Char: 'k',]
- action: [GoToNextTab,]
key: [ Char: 'l', Right,Down, Char: 'j']
- action: [NewTab: , SwitchToMode: Normal,]
key: [ Char: 'n',]
- action: [CloseTab, SwitchToMode: Normal,]
key: [ Char: 'x',]
- action: [ToggleActiveSyncTab, SwitchToMode: Normal,]
key: [Char: 's']
- action: [GoToTab: 1, SwitchToMode: Normal,]
key: [ Char: '1',]
- action: [GoToTab: 2, SwitchToMode: Normal,]
key: [ Char: '2',]
- action: [GoToTab: 3, SwitchToMode: Normal,]
key: [ Char: '3',]
- action: [GoToTab: 4, SwitchToMode: Normal,]
key: [ Char: '4',]
- action: [GoToTab: 5, SwitchToMode: Normal,]
key: [ Char: '5',]
- action: [GoToTab: 6, SwitchToMode: Normal,]
key: [ Char: '6',]
- action: [GoToTab: 7, SwitchToMode: Normal,]
key: [ Char: '7',]
- action: [GoToTab: 8, SwitchToMode: Normal,]
key: [ Char: '8',]
- action: [GoToTab: 9, SwitchToMode: Normal,]
key: [ Char: '9',]
- action: [ToggleTab]
key: [ Char: "\t" ]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
scroll:
- action: [EditScrollback, SwitchToMode: Normal]
key: [Char: 'e']
- action: [SwitchToMode: Normal,]
key: [Ctrl: 's', Char: ' ', Char: "\n", Esc]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [ScrollToBottom, SwitchToMode: Normal,]
key: [Ctrl: 'c',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [ScrollDown,]
key: [Char: 'j', Down,]
- action: [ScrollUp,]
key: [Char: 'k', Up,]
- action: [PageScrollDown,]
key: [Ctrl: 'f', PageDown, Right, Char: 'l',]
- action: [PageScrollUp,]
key: [Ctrl: 'b', PageUp, Left, Char: 'h',]
- action: [HalfPageScrollDown,]
key: [Char: 'd',]
- action: [HalfPageScrollUp,]
key: [Char: 'u',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
# uncomment this and adjust key if using copy_on_select=false
# - action: [Copy: ]
# key: [ Alt: 'c']
- action: [SwitchToMode: EnterSearch, SearchInput: [0],]
key: [Char: 's']
entersearch:
- action: [SwitchToMode: Search,]
key: [Char: "\n"]
- action: [SearchInput: [27], SwitchToMode: Scroll,]
key: [Ctrl: 'c', Esc]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
search:
- action: [SwitchToMode: Normal,]
key: [Ctrl: 's', Char: ' ', Char: "\n", Esc]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [ScrollToBottom, SwitchToMode: Normal,]
key: [Ctrl: 'c',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [ScrollDown,]
key: [Char: 'j', Down,]
- action: [ScrollUp,]
key: [Char: 'k', Up,]
- action: [PageScrollDown,]
key: [Ctrl: 'f', PageDown, Right, Char: 'l',]
- action: [PageScrollUp,]
key: [Ctrl: 'b', PageUp, Left, Char: 'h',]
- action: [HalfPageScrollDown,]
key: [Char: 'd',]
- action: [HalfPageScrollUp,]
key: [Char: 'u',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [SwitchToMode: EnterSearch, SearchInput: [0],]
key: [Char: 's']
- action: [Search: Down]
key: [Char: 'n']
- action: [Search: Up]
key: [Char: 'p']
- action: [SearchToggleOption: CaseSensitivity]
key: [Char: 'c']
- action: [SearchToggleOption: Wrap]
key: [Char: 'w']
- action: [SearchToggleOption: WholeWord]
key: [Char: 'o']
renametab:
- action: [SwitchToMode: Normal,]
key: [Char: "\n", Ctrl: 'c', Esc]
- action: [UndoRenameTab , SwitchToMode: Tab,]
key: [Esc,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
renamepane:
- action: [SwitchToMode: Normal,]
key: [Char: "\n", Ctrl: 'c', Esc]
- action: [UndoRenamePane , SwitchToMode: Pane,]
key: [Esc,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
session:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'o', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [Detach,]
key: [Char: 'd',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
tmux:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'o', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Scroll,]
key: [ Char: '[']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [Write: [2,], SwitchToMode: Normal]
key: [Ctrl: 'b']
- action: [NewPane: Down, SwitchToMode: Normal,]
key: [Char: "\"",]
- action: [NewPane: Right, SwitchToMode: Normal,]
key: [Char: '%',]
- action: [ToggleFocusFullscreen, SwitchToMode: Normal,]
key: [Char: 'z',]
- action: [NewTab: , SwitchToMode: Normal,]
key: [ Char: 'c',]
- action: [SwitchToMode: RenameTab, TabNameInput: [0],]
key: [Char: ',']
- action: [GoToPreviousTab, SwitchToMode: Normal,]
key: [ Char: 'p']
- action: [GoToNextTab, SwitchToMode: Normal,]
key: [ Char: 'n']
- action: [MoveFocus: Left, SwitchToMode: Normal,]
key: [ Left,]
- action: [MoveFocus: Right, SwitchToMode: Normal,]
key: [ Right,]
- action: [MoveFocus: Down, SwitchToMode: Normal,]
key: [ Down,]
- action: [MoveFocus: Up, SwitchToMode: Normal,]
key: [ Up,]
- action: [MoveFocus: Left, SwitchToMode: Normal,]
key: [ Char: 'h']
- action: [MoveFocus: Right, SwitchToMode: Normal,]
key: [ Char: 'l']
- action: [MoveFocus: Down, SwitchToMode: Normal,]
key: [ Char: 'j']
- action: [MoveFocus: Up, SwitchToMode: Normal,]
key: [ Char: 'k']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [FocusNextPane,]
key: [ Char: 'o']
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [Detach,]
key: [Char: 'd',]
plugins:
- path: tab-bar
tag: tab-bar
- path: status-bar
tag: status-bar
- path: strider
tag: strider
- path: compact-bar
tag: compact-bar
# Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
# eg. when terminal window with an active zellij session is closed
# Options:
# - detach (Default)
# - quit
# on_force_close: quit
# Send a request for a simplified ui (without arrow fonts) to plugins
# Options:
# - true
# - false (Default)
# simplified_ui: true
# Choose the path to the default shell that zellij will use for opening new panes
# Default: $SHELL
# default_shell: fish
# Toggle between having pane frames around the panes
# Options:
# - true (default)
# - false
#pane_frames: true
# Choose the theme that is specified in the themes section.
# For some examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
# Default: default
#theme: default
# Choose the mode that zellij uses when starting up.
# Default: normal
#default_mode: locked
# Toggle enabling the mouse mode.
# On certain configurations, or terminals this could
# potentially interfere with copying text.
# Options:
# - true (default)
# - false
#mouse_mode: false
# Configure the scroll back buffer size
# This is the number of lines zellij stores for each pane in the scroll back
# buffer. Excess number of lines are discarded in a FIFO fashion.
# Valid values: positive integers
# Default value: 10000
#scroll_buffer_size: 10000
# Provide a command to execute when copying text. The text will be piped to
# the stdin of the program to perform the copy. This can be used with
# terminal emulators which do not support the OSC 52 ANSI control sequence
# that will be used by default if this option is not set.
# Examples:
#copy_command: "xclip -selection clipboard" # x11
#copy_command: "wl-copy" # wayland
#copy_command: "pbcopy" # osx
# Choose the destination for copied text
# Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
# Does not apply when using copy_command.
# Options:
# - system (default)
# - primary
#copy_clipboard: primary
# Enable or disable automatic copy (and clear) of selection when releasing mouse
#copy_on_select: true
# Path to the default editor to use to edit pane scrollbuffer
# scrollback_editor: /usr/bin/nano
#
themes:
nord:
fg: "D8DEE9"
bg: "#2E3440"
black: "#3B4252"
red: "#BF616A"
green: "#A3BE8C"
yellow: "#EBCB8B"
blue: "#81A1C1"
magenta: "#B48EAD"
cyan: "#88C0D0"
white: "#E5E9F0"
orange: "#D08770"
molokai-dark:
bg: [27, 29, 30]
red: [255, 0, 0]
green: [0, 140, 0]
yellow: [255, 255, 0]
blue: [102, 217, 239]
magenta: [174, 129, 255]
orange: [253, 151, 31]
fg: [248, 248, 240]
cyan: [0, 255, 255]
black: [0, 0, 0]
white: [255, 255, 255]
some-eightbit-theme:
bg: 0
red: 2
green: 3
yellow: 4
blue: 5
magenta: 6
orange: 7
fg: 8
cyan: 9
black: 10
white: 255

View file

@ -0,0 +1,643 @@
---
# Configuration for zellij.
# In order to troubleshoot your configuration try using the following command:
# `zellij setup --check`
# It should show current config locations and features that are enabled.
keybinds:
unbind: true
normal:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [NewPane: ]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right ]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up, ]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
# uncomment this and adjust key if using copy_on_select=false
# - action: [Copy: ]
# key: [ Alt: 'c']
locked:
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'g',]
resize:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'n', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit]
key: [Ctrl: 'q']
- action: [Resize: Left,]
key: [Char: 'h', Left,]
- action: [Resize: Down,]
key: [Char: 'j', Down,]
- action: [Resize: Up,]
key: [Char: 'k', Up, ]
- action: [Resize: Right,]
key: [Char: 'l', Right,]
- action: [Resize: Increase,]
key: [Char: '=']
- action: [Resize: Increase,]
key: [ Char: '+']
- action: [Resize: Decrease,]
key: [Char: '-']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
pane:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'p', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [MoveFocus: Left,]
key: [ Char: 'h', Left,]
- action: [MoveFocus: Right,]
key: [ Char: 'l', Right,]
- action: [MoveFocus: Down,]
key: [ Char: 'j', Down,]
- action: [MoveFocus: Up,]
key: [ Char: 'k', Up,]
- action: [SwitchFocus,]
key: [Char: 'p']
- action: [NewPane: , SwitchToMode: Normal,]
key: [Char: 'n',]
- action: [NewPane: Down, SwitchToMode: Normal,]
key: [Char: 'd',]
- action: [NewPane: Right, SwitchToMode: Normal,]
key: [Char: 'r',]
- action: [CloseFocus, SwitchToMode: Normal,]
key: [Char: 'x',]
- action: [ToggleFocusFullscreen, SwitchToMode: Normal,]
key: [Char: 'f',]
- action: [TogglePaneFrames, SwitchToMode: Normal,]
key: [Char: 'z',]
- action: [ToggleFloatingPanes, SwitchToMode: Normal,]
key: [Char: 'w']
- action: [TogglePaneEmbedOrFloating, SwitchToMode: Normal,]
key: [Char: 'e']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [SwitchToMode: RenamePane, PaneNameInput: [0],]
key: [Char: 'c']
move:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'h', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [Quit]
key: [Ctrl: 'q']
- action: [MovePane: ,]
key: [Char: 'n', Char: "\t",]
- action: [MovePane: Left,]
key: [Char: 'h', Left,]
- action: [MovePane: Down,]
key: [Char: 'j', Down,]
- action: [MovePane: Up,]
key: [Char: 'k', Up, ]
- action: [MovePane: Right,]
key: [Char: 'l', Right,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
tab:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 't', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: RenameTab, TabNameInput: [0],]
key: [Char: 'r']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [GoToPreviousTab,]
key: [ Char: 'h', Left, Up, Char: 'k',]
- action: [GoToNextTab,]
key: [ Char: 'l', Right,Down, Char: 'j']
- action: [NewTab: , SwitchToMode: Normal,]
key: [ Char: 'n',]
- action: [CloseTab, SwitchToMode: Normal,]
key: [ Char: 'x',]
- action: [ToggleActiveSyncTab, SwitchToMode: Normal,]
key: [Char: 's']
- action: [GoToTab: 1, SwitchToMode: Normal,]
key: [ Char: '1',]
- action: [GoToTab: 2, SwitchToMode: Normal,]
key: [ Char: '2',]
- action: [GoToTab: 3, SwitchToMode: Normal,]
key: [ Char: '3',]
- action: [GoToTab: 4, SwitchToMode: Normal,]
key: [ Char: '4',]
- action: [GoToTab: 5, SwitchToMode: Normal,]
key: [ Char: '5',]
- action: [GoToTab: 6, SwitchToMode: Normal,]
key: [ Char: '6',]
- action: [GoToTab: 7, SwitchToMode: Normal,]
key: [ Char: '7',]
- action: [GoToTab: 8, SwitchToMode: Normal,]
key: [ Char: '8',]
- action: [GoToTab: 9, SwitchToMode: Normal,]
key: [ Char: '9',]
- action: [ToggleTab]
key: [ Char: "\t" ]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
scroll:
- action: [EditScrollback, SwitchToMode: Normal]
key: [Char: 'e']
- action: [SwitchToMode: Normal,]
key: [Ctrl: 's', Char: ' ', Char: "\n", Esc]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [ScrollToBottom, SwitchToMode: Normal,]
key: [Ctrl: 'c',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [ScrollDown,]
key: [Char: 'j', Down,]
- action: [ScrollUp,]
key: [Char: 'k', Up,]
- action: [PageScrollDown,]
key: [Ctrl: 'f', PageDown, Right, Char: 'l',]
- action: [PageScrollUp,]
key: [Ctrl: 'b', PageUp, Left, Char: 'h',]
- action: [HalfPageScrollDown,]
key: [Char: 'd',]
- action: [HalfPageScrollUp,]
key: [Char: 'u',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
# uncomment this and adjust key if using copy_on_select=false
# - action: [Copy: ]
# key: [ Alt: 'c']
- action: [SwitchToMode: EnterSearch, SearchInput: [0],]
key: [Char: 's']
entersearch:
- action: [SwitchToMode: Search,]
key: [Char: "\n"]
- action: [SearchInput: [27], SwitchToMode: Scroll,]
key: [Ctrl: 'c', Esc]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
search:
- action: [SwitchToMode: Normal,]
key: [Ctrl: 's', Char: ' ', Char: "\n", Esc]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [ScrollToBottom, SwitchToMode: Normal,]
key: [Ctrl: 'c',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [ScrollDown,]
key: [Char: 'j', Down,]
- action: [ScrollUp,]
key: [Char: 'k', Up,]
- action: [PageScrollDown,]
key: [Ctrl: 'f', PageDown, Right, Char: 'l',]
- action: [PageScrollUp,]
key: [Ctrl: 'b', PageUp, Left, Char: 'h',]
- action: [HalfPageScrollDown,]
key: [Char: 'd',]
- action: [HalfPageScrollUp,]
key: [Char: 'u',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [SwitchToMode: EnterSearch, SearchInput: [0],]
key: [Char: 's']
- action: [Search: Down]
key: [Char: 'n']
- action: [Search: Up]
key: [Char: 'p']
- action: [SearchToggleOption: CaseSensitivity]
key: [Char: 'c']
- action: [SearchToggleOption: Wrap]
key: [Char: 'w']
- action: [SearchToggleOption: WholeWord]
key: [Char: 'o']
renametab:
- action: [SwitchToMode: Normal,]
key: [Char: "\n", Ctrl: 'c', Esc]
- action: [UndoRenameTab , SwitchToMode: Tab,]
key: [Esc,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
renamepane:
- action: [SwitchToMode: Normal,]
key: [Char: "\n", Ctrl: 'c', Esc]
- action: [UndoRenamePane , SwitchToMode: Pane,]
key: [Esc,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
session:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'o', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [Detach,]
key: [Char: 'd',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
tmux:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'o', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Scroll,]
key: [ Char: '[']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [Write: [2,], SwitchToMode: Normal]
key: [Ctrl: 'b']
- action: [NewPane: Down, SwitchToMode: Normal,]
key: [Char: "\"",]
- action: [NewPane: Right, SwitchToMode: Normal,]
key: [Char: '%',]
- action: [ToggleFocusFullscreen, SwitchToMode: Normal,]
key: [Char: 'z',]
- action: [NewTab: , SwitchToMode: Normal,]
key: [ Char: 'c',]
- action: [SwitchToMode: RenameTab, TabNameInput: [0],]
key: [Char: ',']
- action: [GoToPreviousTab, SwitchToMode: Normal,]
key: [ Char: 'p']
- action: [GoToNextTab, SwitchToMode: Normal,]
key: [ Char: 'n']
- action: [MoveFocus: Left, SwitchToMode: Normal,]
key: [ Left,]
- action: [MoveFocus: Right, SwitchToMode: Normal,]
key: [ Right,]
- action: [MoveFocus: Down, SwitchToMode: Normal,]
key: [ Down,]
- action: [MoveFocus: Up, SwitchToMode: Normal,]
key: [ Up,]
- action: [MoveFocus: Left, SwitchToMode: Normal,]
key: [ Char: 'h']
- action: [MoveFocus: Right, SwitchToMode: Normal,]
key: [ Char: 'l']
- action: [MoveFocus: Down, SwitchToMode: Normal,]
key: [ Char: 'j']
- action: [MoveFocus: Up, SwitchToMode: Normal,]
key: [ Char: 'k']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [FocusNextPane,]
key: [ Char: 'o']
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [Detach,]
key: [Char: 'd',]
plugins:
- path: tab-bar
tag: tab-bar
- path: status-bar
tag: status-bar
- path: strider
tag: strider
- path: compact-bar
tag: compact-bar
ui:
pane_frames:
rounded_corners: true
# Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
# Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
# eg. when terminal window with an active zellij session is closed
# Options:
# - detach (Default)
# - quit
# on_force_close: quit
# Send a request for a simplified ui (without arrow fonts) to plugins
# Options:
# - true
# - false (Default)
# simplified_ui: true
# Choose the path to the default shell that zellij will use for opening new panes
# Default: $SHELL
# default_shell: fish
# Toggle between having pane frames around the panes
# Options:
# - true (default)
# - false
#pane_frames: true
# Choose the theme that is specified in the themes section.
# For some examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
# Default: default
#theme: default
# Choose the mode that zellij uses when starting up.
# Default: normal
#default_mode: locked
# Toggle enabling the mouse mode.
# On certain configurations, or terminals this could
# potentially interfere with copying text.
# Options:
# - true (default)
# - false
#mouse_mode: false
# Configure the scroll back buffer size
# This is the number of lines zellij stores for each pane in the scroll back
# buffer. Excess number of lines are discarded in a FIFO fashion.
# Valid values: positive integers
# Default value: 10000
#scroll_buffer_size: 10000
# Provide a command to execute when copying text. The text will be piped to
# the stdin of the program to perform the copy. This can be used with
# terminal emulators which do not support the OSC 52 ANSI control sequence
# that will be used by default if this option is not set.
# Examples:
#copy_command: "xclip -selection clipboard" # x11
#copy_command: "wl-copy" # wayland
#copy_command: "pbcopy" # osx
# Choose the destination for copied text
# Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
# Does not apply when using copy_command.
# Options:
# - system (default)
# - primary
#copy_clipboard: primary
# Enable or disable automatic copy (and clear) of selection when releasing mouse
#copy_on_select: true
# Path to the default editor to use to edit pane scrollbuffer
# scrollback_editor: /usr/bin/nano

View file

@ -0,0 +1,639 @@
---
# Configuration for zellij.
# In order to troubleshoot your configuration try using the following command:
# `zellij setup --check`
# It should show current config locations and features that are enabled.
keybinds:
normal:
- unbind: true
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [NewPane: ]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right ]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up, ]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
# uncomment this and adjust key if using copy_on_select=false
# - action: [Copy: ]
# key: [ Alt: 'c']
locked:
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'g',]
resize:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'n', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit]
key: [Ctrl: 'q']
- action: [Resize: Left,]
key: [Char: 'h', Left,]
- action: [Resize: Down,]
key: [Char: 'j', Down,]
- action: [Resize: Up,]
key: [Char: 'k', Up, ]
- action: [Resize: Right,]
key: [Char: 'l', Right,]
- action: [Resize: Increase,]
key: [Char: '=']
- action: [Resize: Increase,]
key: [ Char: '+']
- action: [Resize: Decrease,]
key: [Char: '-']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
pane:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'p', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [MoveFocus: Left,]
key: [ Char: 'h', Left,]
- action: [MoveFocus: Right,]
key: [ Char: 'l', Right,]
- action: [MoveFocus: Down,]
key: [ Char: 'j', Down,]
- action: [MoveFocus: Up,]
key: [ Char: 'k', Up,]
- action: [SwitchFocus,]
key: [Char: 'p']
- action: [NewPane: , SwitchToMode: Normal,]
key: [Char: 'n',]
- action: [NewPane: Down, SwitchToMode: Normal,]
key: [Char: 'd',]
- action: [NewPane: Right, SwitchToMode: Normal,]
key: [Char: 'r',]
- action: [CloseFocus, SwitchToMode: Normal,]
key: [Char: 'x',]
- action: [ToggleFocusFullscreen, SwitchToMode: Normal,]
key: [Char: 'f',]
- action: [TogglePaneFrames, SwitchToMode: Normal,]
key: [Char: 'z',]
- action: [ToggleFloatingPanes, SwitchToMode: Normal,]
key: [Char: 'w']
- action: [TogglePaneEmbedOrFloating, SwitchToMode: Normal,]
key: [Char: 'e']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [SwitchToMode: RenamePane, PaneNameInput: [0],]
key: [Char: 'c']
move:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'h', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [Quit]
key: [Ctrl: 'q']
- action: [MovePane: ,]
key: [Char: 'n', Char: "\t",]
- action: [MovePane: Left,]
key: [Char: 'h', Left,]
- action: [MovePane: Down,]
key: [Char: 'j', Down,]
- action: [MovePane: Up,]
key: [Char: 'k', Up, ]
- action: [MovePane: Right,]
key: [Char: 'l', Right,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
tab:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 't', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: RenameTab, TabNameInput: [0],]
key: [Char: 'r']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [GoToPreviousTab,]
key: [ Char: 'h', Left, Up, Char: 'k',]
- action: [GoToNextTab,]
key: [ Char: 'l', Right,Down, Char: 'j']
- action: [NewTab: , SwitchToMode: Normal,]
key: [ Char: 'n',]
- action: [CloseTab, SwitchToMode: Normal,]
key: [ Char: 'x',]
- action: [ToggleActiveSyncTab, SwitchToMode: Normal,]
key: [Char: 's']
- action: [GoToTab: 1, SwitchToMode: Normal,]
key: [ Char: '1',]
- action: [GoToTab: 2, SwitchToMode: Normal,]
key: [ Char: '2',]
- action: [GoToTab: 3, SwitchToMode: Normal,]
key: [ Char: '3',]
- action: [GoToTab: 4, SwitchToMode: Normal,]
key: [ Char: '4',]
- action: [GoToTab: 5, SwitchToMode: Normal,]
key: [ Char: '5',]
- action: [GoToTab: 6, SwitchToMode: Normal,]
key: [ Char: '6',]
- action: [GoToTab: 7, SwitchToMode: Normal,]
key: [ Char: '7',]
- action: [GoToTab: 8, SwitchToMode: Normal,]
key: [ Char: '8',]
- action: [GoToTab: 9, SwitchToMode: Normal,]
key: [ Char: '9',]
- action: [ToggleTab]
key: [ Char: "\t" ]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
scroll:
- action: [EditScrollback, SwitchToMode: Normal]
key: [Char: 'e']
- action: [SwitchToMode: Normal,]
key: [Ctrl: 's', Char: ' ', Char: "\n", Esc]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [ScrollToBottom, SwitchToMode: Normal,]
key: [Ctrl: 'c',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [ScrollDown,]
key: [Char: 'j', Down,]
- action: [ScrollUp,]
key: [Char: 'k', Up,]
- action: [PageScrollDown,]
key: [Ctrl: 'f', PageDown, Right, Char: 'l',]
- action: [PageScrollUp,]
key: [Ctrl: 'b', PageUp, Left, Char: 'h',]
- action: [HalfPageScrollDown,]
key: [Char: 'd',]
- action: [HalfPageScrollUp,]
key: [Char: 'u',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
# uncomment this and adjust key if using copy_on_select=false
# - action: [Copy: ]
# key: [ Alt: 'c']
- action: [SwitchToMode: EnterSearch, SearchInput: [0],]
key: [Char: 's']
entersearch:
- action: [SwitchToMode: Search,]
key: [Char: "\n"]
- action: [SearchInput: [27], SwitchToMode: Scroll,]
key: [Ctrl: 'c', Esc]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
search:
- action: [SwitchToMode: Normal,]
key: [Ctrl: 's', Char: ' ', Char: "\n", Esc]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [ScrollToBottom, SwitchToMode: Normal,]
key: [Ctrl: 'c',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [ScrollDown,]
key: [Char: 'j', Down,]
- action: [ScrollUp,]
key: [Char: 'k', Up,]
- action: [PageScrollDown,]
key: [Ctrl: 'f', PageDown, Right, Char: 'l',]
- action: [PageScrollUp,]
key: [Ctrl: 'b', PageUp, Left, Char: 'h',]
- action: [HalfPageScrollDown,]
key: [Char: 'd',]
- action: [HalfPageScrollUp,]
key: [Char: 'u',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [SwitchToMode: EnterSearch, SearchInput: [0],]
key: [Char: 's']
- action: [Search: Down]
key: [Char: 'n']
- action: [Search: Up]
key: [Char: 'p']
- action: [SearchToggleOption: CaseSensitivity]
key: [Char: 'c']
- action: [SearchToggleOption: Wrap]
key: [Char: 'w']
- action: [SearchToggleOption: WholeWord]
key: [Char: 'o']
renametab:
- action: [SwitchToMode: Normal,]
key: [Char: "\n", Ctrl: 'c', Esc]
- action: [UndoRenameTab , SwitchToMode: Tab,]
key: [Esc,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
renamepane:
- action: [SwitchToMode: Normal,]
key: [Char: "\n", Ctrl: 'c', Esc]
- action: [UndoRenamePane , SwitchToMode: Pane,]
key: [Esc,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
session:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'o', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [Detach,]
key: [Char: 'd',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
tmux:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'o', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Scroll,]
key: [ Char: '[']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [Write: [2,], SwitchToMode: Normal]
key: [Ctrl: 'b']
- action: [NewPane: Down, SwitchToMode: Normal,]
key: [Char: "\"",]
- action: [NewPane: Right, SwitchToMode: Normal,]
key: [Char: '%',]
- action: [ToggleFocusFullscreen, SwitchToMode: Normal,]
key: [Char: 'z',]
- action: [NewTab: , SwitchToMode: Normal,]
key: [ Char: 'c',]
- action: [SwitchToMode: RenameTab, TabNameInput: [0],]
key: [Char: ',']
- action: [GoToPreviousTab, SwitchToMode: Normal,]
key: [ Char: 'p']
- action: [GoToNextTab, SwitchToMode: Normal,]
key: [ Char: 'n']
- action: [MoveFocus: Left, SwitchToMode: Normal,]
key: [ Left,]
- action: [MoveFocus: Right, SwitchToMode: Normal,]
key: [ Right,]
- action: [MoveFocus: Down, SwitchToMode: Normal,]
key: [ Down,]
- action: [MoveFocus: Up, SwitchToMode: Normal,]
key: [ Up,]
- action: [MoveFocus: Left, SwitchToMode: Normal,]
key: [ Char: 'h']
- action: [MoveFocus: Right, SwitchToMode: Normal,]
key: [ Char: 'l']
- action: [MoveFocus: Down, SwitchToMode: Normal,]
key: [ Char: 'j']
- action: [MoveFocus: Up, SwitchToMode: Normal,]
key: [ Char: 'k']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [FocusNextPane,]
key: [ Char: 'o']
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [Detach,]
key: [Char: 'd',]
plugins:
- path: tab-bar
tag: tab-bar
- path: status-bar
tag: status-bar
- path: strider
tag: strider
- path: compact-bar
tag: compact-bar
# Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
# eg. when terminal window with an active zellij session is closed
# Options:
# - detach (Default)
# - quit
# on_force_close: quit
# Send a request for a simplified ui (without arrow fonts) to plugins
# Options:
# - true
# - false (Default)
# simplified_ui: true
# Choose the path to the default shell that zellij will use for opening new panes
# Default: $SHELL
# default_shell: fish
# Toggle between having pane frames around the panes
# Options:
# - true (default)
# - false
#pane_frames: true
# Choose the theme that is specified in the themes section.
# For some examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
# Default: default
#theme: default
# Choose the mode that zellij uses when starting up.
# Default: normal
#default_mode: locked
# Toggle enabling the mouse mode.
# On certain configurations, or terminals this could
# potentially interfere with copying text.
# Options:
# - true (default)
# - false
#mouse_mode: false
# Configure the scroll back buffer size
# This is the number of lines zellij stores for each pane in the scroll back
# buffer. Excess number of lines are discarded in a FIFO fashion.
# Valid values: positive integers
# Default value: 10000
#scroll_buffer_size: 10000
# Provide a command to execute when copying text. The text will be piped to
# the stdin of the program to perform the copy. This can be used with
# terminal emulators which do not support the OSC 52 ANSI control sequence
# that will be used by default if this option is not set.
# Examples:
#copy_command: "xclip -selection clipboard" # x11
#copy_command: "wl-copy" # wayland
#copy_command: "pbcopy" # osx
# Choose the destination for copied text
# Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
# Does not apply when using copy_command.
# Options:
# - system (default)
# - primary
#copy_clipboard: primary
# Enable or disable automatic copy (and clear) of selection when releasing mouse
#copy_on_select: true
# Path to the default editor to use to edit pane scrollbuffer
# scrollback_editor: /usr/bin/nano

View file

@ -0,0 +1,640 @@
---
# Configuration for zellij.
# In order to troubleshoot your configuration try using the following command:
# `zellij setup --check`
# It should show current config locations and features that are enabled.
keybinds:
unbind: true
normal:
- unbind: [Ctrl: 'a', Char: "\n"]
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [NewPane: ]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right ]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up, ]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
# uncomment this and adjust key if using copy_on_select=false
# - action: [Copy: ]
# key: [ Alt: 'c']
locked:
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'g',]
resize:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'n', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit]
key: [Ctrl: 'q']
- action: [Resize: Left,]
key: [Char: 'h', Left,]
- action: [Resize: Down,]
key: [Char: 'j', Down,]
- action: [Resize: Up,]
key: [Char: 'k', Up, ]
- action: [Resize: Right,]
key: [Char: 'l', Right,]
- action: [Resize: Increase,]
key: [Char: '=']
- action: [Resize: Increase,]
key: [ Char: '+']
- action: [Resize: Decrease,]
key: [Char: '-']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
pane:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'p', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [MoveFocus: Left,]
key: [ Char: 'h', Left,]
- action: [MoveFocus: Right,]
key: [ Char: 'l', Right,]
- action: [MoveFocus: Down,]
key: [ Char: 'j', Down,]
- action: [MoveFocus: Up,]
key: [ Char: 'k', Up,]
- action: [SwitchFocus,]
key: [Char: 'p']
- action: [NewPane: , SwitchToMode: Normal,]
key: [Char: 'n',]
- action: [NewPane: Down, SwitchToMode: Normal,]
key: [Char: 'd',]
- action: [NewPane: Right, SwitchToMode: Normal,]
key: [Char: 'r',]
- action: [CloseFocus, SwitchToMode: Normal,]
key: [Char: 'x',]
- action: [ToggleFocusFullscreen, SwitchToMode: Normal,]
key: [Char: 'f',]
- action: [TogglePaneFrames, SwitchToMode: Normal,]
key: [Char: 'z',]
- action: [ToggleFloatingPanes, SwitchToMode: Normal,]
key: [Char: 'w']
- action: [TogglePaneEmbedOrFloating, SwitchToMode: Normal,]
key: [Char: 'e']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [SwitchToMode: RenamePane, PaneNameInput: [0],]
key: [Char: 'c']
move:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'h', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [Quit]
key: [Ctrl: 'q']
- action: [MovePane: ,]
key: [Char: 'n', Char: "\t",]
- action: [MovePane: Left,]
key: [Char: 'h', Left,]
- action: [MovePane: Down,]
key: [Char: 'j', Down,]
- action: [MovePane: Up,]
key: [Char: 'k', Up, ]
- action: [MovePane: Right,]
key: [Char: 'l', Right,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
tab:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 't', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: RenameTab, TabNameInput: [0],]
key: [Char: 'r']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [GoToPreviousTab,]
key: [ Char: 'h', Left, Up, Char: 'k',]
- action: [GoToNextTab,]
key: [ Char: 'l', Right,Down, Char: 'j']
- action: [NewTab: , SwitchToMode: Normal,]
key: [ Char: 'n',]
- action: [CloseTab, SwitchToMode: Normal,]
key: [ Char: 'x',]
- action: [ToggleActiveSyncTab, SwitchToMode: Normal,]
key: [Char: 's']
- action: [GoToTab: 1, SwitchToMode: Normal,]
key: [ Char: '1',]
- action: [GoToTab: 2, SwitchToMode: Normal,]
key: [ Char: '2',]
- action: [GoToTab: 3, SwitchToMode: Normal,]
key: [ Char: '3',]
- action: [GoToTab: 4, SwitchToMode: Normal,]
key: [ Char: '4',]
- action: [GoToTab: 5, SwitchToMode: Normal,]
key: [ Char: '5',]
- action: [GoToTab: 6, SwitchToMode: Normal,]
key: [ Char: '6',]
- action: [GoToTab: 7, SwitchToMode: Normal,]
key: [ Char: '7',]
- action: [GoToTab: 8, SwitchToMode: Normal,]
key: [ Char: '8',]
- action: [GoToTab: 9, SwitchToMode: Normal,]
key: [ Char: '9',]
- action: [ToggleTab]
key: [ Char: "\t" ]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
scroll:
- action: [EditScrollback, SwitchToMode: Normal]
key: [Char: 'e']
- action: [SwitchToMode: Normal,]
key: [Ctrl: 's', Char: ' ', Char: "\n", Esc]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [ScrollToBottom, SwitchToMode: Normal,]
key: [Ctrl: 'c',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [ScrollDown,]
key: [Char: 'j', Down,]
- action: [ScrollUp,]
key: [Char: 'k', Up,]
- action: [PageScrollDown,]
key: [Ctrl: 'f', PageDown, Right, Char: 'l',]
- action: [PageScrollUp,]
key: [Ctrl: 'b', PageUp, Left, Char: 'h',]
- action: [HalfPageScrollDown,]
key: [Char: 'd',]
- action: [HalfPageScrollUp,]
key: [Char: 'u',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
# uncomment this and adjust key if using copy_on_select=false
# - action: [Copy: ]
# key: [ Alt: 'c']
- action: [SwitchToMode: EnterSearch, SearchInput: [0],]
key: [Char: 's']
entersearch:
- action: [SwitchToMode: Search,]
key: [Char: "\n"]
- action: [SearchInput: [27], SwitchToMode: Scroll,]
key: [Ctrl: 'c', Esc]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
search:
- action: [SwitchToMode: Normal,]
key: [Ctrl: 's', Char: ' ', Char: "\n", Esc]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Session,]
key: [Ctrl: 'o',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [ScrollToBottom, SwitchToMode: Normal,]
key: [Ctrl: 'c',]
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [ScrollDown,]
key: [Char: 'j', Down,]
- action: [ScrollUp,]
key: [Char: 'k', Up,]
- action: [PageScrollDown,]
key: [Ctrl: 'f', PageDown, Right, Char: 'l',]
- action: [PageScrollUp,]
key: [Ctrl: 'b', PageUp, Left, Char: 'h',]
- action: [HalfPageScrollDown,]
key: [Char: 'd',]
- action: [HalfPageScrollUp,]
key: [Char: 'u',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left] # The Alt: Left etc. variants are temporary hacks and will be removed in the future - please do not rely on them!
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [SwitchToMode: EnterSearch, SearchInput: [0],]
key: [Char: 's']
- action: [Search: Down]
key: [Char: 'n']
- action: [Search: Up]
key: [Char: 'p']
- action: [SearchToggleOption: CaseSensitivity]
key: [Char: 'c']
- action: [SearchToggleOption: Wrap]
key: [Char: 'w']
- action: [SearchToggleOption: WholeWord]
key: [Char: 'o']
renametab:
- action: [SwitchToMode: Normal,]
key: [Char: "\n", Ctrl: 'c', Esc]
- action: [UndoRenameTab , SwitchToMode: Tab,]
key: [Esc,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
renamepane:
- action: [SwitchToMode: Normal,]
key: [Char: "\n", Ctrl: 'c', Esc]
- action: [UndoRenamePane , SwitchToMode: Pane,]
key: [Esc,]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
session:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tmux,]
key: [Ctrl: 'b',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'o', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [Detach,]
key: [Char: 'd',]
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
tmux:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g']
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Move,]
key: [Ctrl: 'h',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]
- action: [SwitchToMode: Normal,]
key: [Ctrl: 'o', Char: "\n", Char: ' ', Esc]
- action: [SwitchToMode: Scroll,]
key: [Ctrl: 's']
- action: [SwitchToMode: Scroll,]
key: [ Char: '[']
- action: [Quit,]
key: [Ctrl: 'q',]
- action: [Write: [2,], SwitchToMode: Normal]
key: [Ctrl: 'b']
- action: [NewPane: Down, SwitchToMode: Normal,]
key: [Char: "\"",]
- action: [NewPane: Right, SwitchToMode: Normal,]
key: [Char: '%',]
- action: [ToggleFocusFullscreen, SwitchToMode: Normal,]
key: [Char: 'z',]
- action: [NewTab: , SwitchToMode: Normal,]
key: [ Char: 'c',]
- action: [SwitchToMode: RenameTab, TabNameInput: [0],]
key: [Char: ',']
- action: [GoToPreviousTab, SwitchToMode: Normal,]
key: [ Char: 'p']
- action: [GoToNextTab, SwitchToMode: Normal,]
key: [ Char: 'n']
- action: [MoveFocus: Left, SwitchToMode: Normal,]
key: [ Left,]
- action: [MoveFocus: Right, SwitchToMode: Normal,]
key: [ Right,]
- action: [MoveFocus: Down, SwitchToMode: Normal,]
key: [ Down,]
- action: [MoveFocus: Up, SwitchToMode: Normal,]
key: [ Up,]
- action: [MoveFocus: Left, SwitchToMode: Normal,]
key: [ Char: 'h']
- action: [MoveFocus: Right, SwitchToMode: Normal,]
key: [ Char: 'l']
- action: [MoveFocus: Down, SwitchToMode: Normal,]
key: [ Char: 'j']
- action: [MoveFocus: Up, SwitchToMode: Normal,]
key: [ Char: 'k']
- action: [NewPane: ,]
key: [ Alt: 'n',]
- action: [MoveFocusOrTab: Left,]
key: [ Alt: 'h', Alt: Left]
- action: [MoveFocusOrTab: Right,]
key: [ Alt: 'l', Alt: Right]
- action: [MoveFocus: Down,]
key: [ Alt: 'j', Alt: Down]
- action: [MoveFocus: Up,]
key: [ Alt: 'k', Alt: Up]
- action: [FocusNextPane,]
key: [ Char: 'o']
- action: [Resize: Increase,]
key: [ Alt: '=']
- action: [Resize: Increase,]
key: [ Alt: '+']
- action: [Resize: Decrease,]
key: [ Alt: '-']
- action: [Detach,]
key: [Char: 'd',]
plugins:
- path: tab-bar
tag: tab-bar
- path: status-bar
tag: status-bar
- path: strider
tag: strider
- path: compact-bar
tag: compact-bar
# Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
# eg. when terminal window with an active zellij session is closed
# Options:
# - detach (Default)
# - quit
# on_force_close: quit
# Send a request for a simplified ui (without arrow fonts) to plugins
# Options:
# - true
# - false (Default)
# simplified_ui: true
# Choose the path to the default shell that zellij will use for opening new panes
# Default: $SHELL
# default_shell: fish
# Toggle between having pane frames around the panes
# Options:
# - true (default)
# - false
#pane_frames: true
# Choose the theme that is specified in the themes section.
# For some examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
# Default: default
#theme: default
# Choose the mode that zellij uses when starting up.
# Default: normal
#default_mode: locked
# Toggle enabling the mouse mode.
# On certain configurations, or terminals this could
# potentially interfere with copying text.
# Options:
# - true (default)
# - false
#mouse_mode: false
# Configure the scroll back buffer size
# This is the number of lines zellij stores for each pane in the scroll back
# buffer. Excess number of lines are discarded in a FIFO fashion.
# Valid values: positive integers
# Default value: 10000
#scroll_buffer_size: 10000
# Provide a command to execute when copying text. The text will be piped to
# the stdin of the program to perform the copy. This can be used with
# terminal emulators which do not support the OSC 52 ANSI control sequence
# that will be used by default if this option is not set.
# Examples:
#copy_command: "xclip -selection clipboard" # x11
#copy_command: "wl-copy" # wayland
#copy_command: "pbcopy" # osx
# Choose the destination for copied text
# Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
# Does not apply when using copy_command.
# Options:
# - system (default)
# - primary
#copy_clipboard: primary
# Enable or disable automatic copy (and clear) of selection when releasing mouse
#copy_on_select: true
# Path to the default editor to use to edit pane scrollbuffer
# scrollback_editor: /usr/bin/nano

View file

@ -0,0 +1,34 @@
---
template:
direction: Horizontal
parts:
- direction: Vertical
borderless: true
split_size:
Fixed: 1
run:
plugin:
location: "zellij:tab-bar"
- direction: Vertical
body: true
- direction: Vertical
borderless: true
split_size:
Fixed: 2
run:
plugin:
location: "zellij:status-bar"
tabs:
- direction: Vertical
default_shell: fish
keybinds:
unbind: true
normal:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]

View file

@ -0,0 +1,36 @@
---
template:
direction: Horizontal
parts:
- direction: Vertical
borderless: true
split_size:
Fixed: 1
run:
plugin:
location: "zellij:tab-bar"
- direction: Vertical
body: true
- direction: Vertical
borderless: true
split_size:
Fixed: 2
run:
plugin:
location: "zellij:status-bar"
tabs:
- direction: Vertical
session:
name: foo
default_shell: fish
keybinds:
unbind: true
normal:
- action: [SwitchToMode: Locked,]
key: [Ctrl: 'g',]
- action: [SwitchToMode: Pane,]
key: [Ctrl: 'p',]
- action: [SwitchToMode: Resize,]
key: [Ctrl: 'n',]
- action: [SwitchToMode: Tab,]
key: [Ctrl: 't',]

View file

@ -20,11 +20,5 @@ template:
location: "zellij:status-bar"
tabs:
- direction: Vertical
parts:
- direction: Horizontal
split_size:
Percent: 20
run:
plugin:
location: "zellij:strider"
- direction: Horizontal
session:
name: foo

View file

@ -3,14 +3,16 @@ template:
direction: Horizontal
parts:
- direction: Vertical
borderless: true
split_size:
Fixed: 1
run:
plugin:
location: "zellij:tab-bar"
- direction: Horizontal
- direction: Vertical
body: true
- direction: Vertical
borderless: true
split_size:
Fixed: 2
run:
@ -18,15 +20,6 @@ template:
location: "zellij:status-bar"
tabs:
- direction: Vertical
parts:
- direction: Horizontal
split_size:
Percent: 50
- direction: Horizontal
parts:
- direction: Vertical
split_size:
Percent: 50
- direction: Vertical
split_size:
Percent: 50
session:
name: foo
attach: false

View file

@ -1,17 +1,10 @@
---
template:
direction: Horizontal
parts:
- direction: Horizontal
body: true
tabs:
- direction: Vertical
parts:
- direction: Horizontal
split_size:
Percent: 50
- direction: Horizontal
parts:
- direction: Vertical
split_size:
@ -19,3 +12,10 @@ tabs:
- direction: Vertical
split_size:
Percent: 50
run:
command: {cmd: htop}
- direction: Horizontal
split_size:
Percent: 50
run:
command: {cmd: htop}

View file

@ -0,0 +1,35 @@
---
tabs:
- direction: Horizontal
parts:
- direction: Vertical
split_size:
Fixed: 1
run:
plugin:
location: "zellij:tab-bar"
borderless: true
- direction: Vertical
parts:
- direction: Vertical
parts:
- direction: Vertical
split_size:
Percent: 50
run:
command: {cmd: htop}
- direction: Vertical
split_size:
Percent: 50
run:
command: {cmd: htop, args: ["-C", "--tree"]}
- direction: Vertical
split_size:
Fixed: 5
- direction: Vertical
split_size:
Fixed: 2
run:
plugin:
location: "zellij:status-bar"
borderless: true

View file

@ -0,0 +1,411 @@
---
source: zellij-client/src/old_config_converter/./unit/convert_config_tests.rs
assertion_line: 24
expression: "format!(\"{}\", kdl_config)"
---
keybinds clear-defaults=true {
normal {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
locked {
bind "Ctrl g" { SwitchToMode "normal"; }
}
pane {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl p" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { MoveFocus "Left"; }
bind "l" "Right" { MoveFocus "Right"; }
bind "j" "Down" { MoveFocus "Down"; }
bind "k" "Up" { MoveFocus "Up"; }
bind "p" { SwitchFocus; }
bind "n" { NewPane; SwitchToMode "normal"; }
bind "d" { NewPane "Down"; SwitchToMode "normal"; }
bind "r" { NewPane "Right"; SwitchToMode "normal"; }
bind "x" { CloseFocus; SwitchToMode "normal"; }
bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "z" { TogglePaneFrames; SwitchToMode "normal"; }
bind "w" { ToggleFloatingPanes; SwitchToMode "normal"; }
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0; }
}
tab {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "Ctrl q" { Quit; }
bind "h" "Left" "Up" "k" { GoToPreviousTab; }
bind "l" "Right" "Down" "j" { GoToNextTab; }
bind "n" { NewTab; SwitchToMode "normal"; }
bind "x" { CloseTab; SwitchToMode "normal"; }
bind "s" { ToggleActiveSyncTab; SwitchToMode "normal"; }
bind "1" { GoToTab 1; SwitchToMode "normal"; }
bind "2" { GoToTab 2; SwitchToMode "normal"; }
bind "3" { GoToTab 3; SwitchToMode "normal"; }
bind "4" { GoToTab 4; SwitchToMode "normal"; }
bind "5" { GoToTab 5; SwitchToMode "normal"; }
bind "6" { GoToTab 6; SwitchToMode "normal"; }
bind "7" { GoToTab 7; SwitchToMode "normal"; }
bind "8" { GoToTab 8; SwitchToMode "normal"; }
bind "9" { GoToTab 9; SwitchToMode "normal"; }
bind "Tab" { ToggleTab; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
resize {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { Resize "Left"; }
bind "j" "Down" { Resize "Down"; }
bind "k" "Up" { Resize "Up"; }
bind "l" "Right" { Resize "Right"; }
bind "=" { Resize "Increase"; }
bind "+" { Resize "Increase"; }
bind "-" { Resize "Decrease"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
move {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl h" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl q" { Quit; }
bind "n" "Tab" { MovePane; }
bind "h" "Left" { MovePane "Left"; }
bind "j" "Down" { MovePane "Down"; }
bind "k" "Up" { MovePane "Up"; }
bind "l" "Right" { MovePane "Right"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
scroll {
bind "e" { EditScrollback; SwitchToMode "normal"; }
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
}
session {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "d" { Detach; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
search {
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
bind "n" { Search "Down"; }
bind "p" { Search "Up"; }
bind "c" { SearchToggleOption "CaseSensitivity"; }
bind "w" { SearchToggleOption "Wrap"; }
bind "o" { SearchToggleOption "WholeWord"; }
}
entersearch {
bind "Enter" { SwitchToMode "search"; }
bind "Ctrl c" "Esc" { SearchInput 27; SwitchToMode "scroll"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenameTab {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenameTab; SwitchToMode "tab"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenamePane {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenamePane; SwitchToMode "pane"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
tmux {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "[" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "Ctrl b" { Write 2; SwitchToMode "normal"; }
bind "\"" { NewPane "Down"; SwitchToMode "normal"; }
bind "%" { NewPane "Right"; SwitchToMode "normal"; }
bind "z" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "c" { NewTab; SwitchToMode "normal"; }
bind "," { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "p" { GoToPreviousTab; SwitchToMode "normal"; }
bind "n" { GoToNextTab; SwitchToMode "normal"; }
bind "Left" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "Right" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "Down" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "Up" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "h" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "l" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "j" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "k" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "o" { FocusNextPane; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "d" { Detach; }
}
}
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed
// Options:
// - detach (Default)
// - quit
//
on_force_close "quit"
// Send a request for a simplified ui (without arrow fonts) to plugins
// Options:
// - true
// - false (Default)
//
simplified_ui true
// Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL
//
default_shell "fish"
// Toggle between having pane frames around the panes
// Options:
// - true (default)
// - false
//
pane_frames true
// Choose the theme that is specified in the themes section.
// Default: default
//
theme "default"
// The name of the default layout to load on startup
// Default: "default"
//
// default_layout "compact"
// Choose the mode that zellij uses when starting up.
// Default: normal
//
default_mode "locked"
// Toggle enabling the mouse mode.
// On certain configurations, or terminals this could
// potentially interfere with copying text.
// Options:
// - true (default)
// - false
//
mouse_mode false
// Configure the scroll back buffer size
// This is the number of lines zellij stores for each pane in the scroll back
// buffer. Excess number of lines are discarded in a FIFO fashion.
// Valid values: positive integers
// Default value: 10000
//
scroll_buffer_size 10000
// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
// copy_command "xclip -selection clipboard" // x11
// copy_command "wl-copy" // wayland
// copy_command "pbcopy" // osx
copy_command "pbcopy"
// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
// - system (default)
// - primary
//
copy_clipboard "primary"
// Enable or disable automatic copy (and clear) of selection when releasing mouse
// Default: true
//
copy_on_select true
// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
//
scrollback_editor "/usr/bin/nano"
// When attaching to an existing session with other users,
// should the session be mirrored (true)
// or should each user have their own cursor (false)
// Default: false
//
// mirror_session true
// The folder in which Zellij will look for layouts
//
// layout_dir /path/to/my/layout_dir
// The folder in which Zellij will look for themes
//
// theme_dir "/path/to/my/theme_dir"
plugins {
tab-bar { path "tab-bar"; }
status-bar { path "status-bar"; }
strider { path "strider"; }
compact-bar { path "compact-bar"; }
}

View file

@ -0,0 +1,415 @@
---
source: zellij-client/src/old_config_converter/./unit/convert_config_tests.rs
assertion_line: 68
expression: "format!(\"{}\", kdl_config)"
---
keybinds clear-defaults=true {
normal {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
locked {
bind "Ctrl g" { SwitchToMode "normal"; }
}
pane {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl p" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { MoveFocus "Left"; }
bind "l" "Right" { MoveFocus "Right"; }
bind "j" "Down" { MoveFocus "Down"; }
bind "k" "Up" { MoveFocus "Up"; }
bind "p" { SwitchFocus; }
bind "n" { NewPane; SwitchToMode "normal"; }
bind "d" { NewPane "Down"; SwitchToMode "normal"; }
bind "r" { NewPane "Right"; SwitchToMode "normal"; }
bind "x" { CloseFocus; SwitchToMode "normal"; }
bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "z" { TogglePaneFrames; SwitchToMode "normal"; }
bind "w" { ToggleFloatingPanes; SwitchToMode "normal"; }
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0; }
}
tab {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "Ctrl q" { Quit; }
bind "h" "Left" "Up" "k" { GoToPreviousTab; }
bind "l" "Right" "Down" "j" { GoToNextTab; }
bind "n" { NewTab; SwitchToMode "normal"; }
bind "x" { CloseTab; SwitchToMode "normal"; }
bind "s" { ToggleActiveSyncTab; SwitchToMode "normal"; }
bind "1" { GoToTab 1; SwitchToMode "normal"; }
bind "2" { GoToTab 2; SwitchToMode "normal"; }
bind "3" { GoToTab 3; SwitchToMode "normal"; }
bind "4" { GoToTab 4; SwitchToMode "normal"; }
bind "5" { GoToTab 5; SwitchToMode "normal"; }
bind "6" { GoToTab 6; SwitchToMode "normal"; }
bind "7" { GoToTab 7; SwitchToMode "normal"; }
bind "8" { GoToTab 8; SwitchToMode "normal"; }
bind "9" { GoToTab 9; SwitchToMode "normal"; }
bind "Tab" { ToggleTab; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
resize {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { Resize "Left"; }
bind "j" "Down" { Resize "Down"; }
bind "k" "Up" { Resize "Up"; }
bind "l" "Right" { Resize "Right"; }
bind "=" { Resize "Increase"; }
bind "+" { Resize "Increase"; }
bind "-" { Resize "Decrease"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
move {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl h" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl q" { Quit; }
bind "n" "Tab" { MovePane; }
bind "h" "Left" { MovePane "Left"; }
bind "j" "Down" { MovePane "Down"; }
bind "k" "Up" { MovePane "Up"; }
bind "l" "Right" { MovePane "Right"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
scroll {
bind "e" { EditScrollback; SwitchToMode "normal"; }
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
}
session {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "d" { Detach; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
search {
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
bind "n" { Search "Down"; }
bind "p" { Search "Up"; }
bind "c" { SearchToggleOption "CaseSensitivity"; }
bind "w" { SearchToggleOption "Wrap"; }
bind "o" { SearchToggleOption "WholeWord"; }
}
entersearch {
bind "Enter" { SwitchToMode "search"; }
bind "Ctrl c" "Esc" { SearchInput 27; SwitchToMode "scroll"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenameTab {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenameTab; SwitchToMode "tab"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenamePane {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenamePane; SwitchToMode "pane"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
tmux {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "[" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "Ctrl b" { Write 2; SwitchToMode "normal"; }
bind "\"" { NewPane "Down"; SwitchToMode "normal"; }
bind "%" { NewPane "Right"; SwitchToMode "normal"; }
bind "z" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "c" { NewTab; SwitchToMode "normal"; }
bind "," { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "p" { GoToPreviousTab; SwitchToMode "normal"; }
bind "n" { GoToNextTab; SwitchToMode "normal"; }
bind "Left" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "Right" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "Down" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "Up" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "h" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "l" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "j" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "k" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "o" { FocusNextPane; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "d" { Detach; }
}
}
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed
// Options:
// - detach (Default)
// - quit
//
// on_force_close "quit"
// Send a request for a simplified ui (without arrow fonts) to plugins
// Options:
// - true
// - false (Default)
//
// simplified_ui true
// Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL
//
// default_shell "fish"
// Toggle between having pane frames around the panes
// Options:
// - true (default)
// - false
//
// pane_frames true
// Choose the theme that is specified in the themes section.
// Default: default
//
// theme "default"
// The name of the default layout to load on startup
// Default: "default"
//
// default_layout "compact"
// Choose the mode that zellij uses when starting up.
// Default: normal
//
// default_mode "locked"
// Toggle enabling the mouse mode.
// On certain configurations, or terminals this could
// potentially interfere with copying text.
// Options:
// - true (default)
// - false
//
// mouse_mode false
// Configure the scroll back buffer size
// This is the number of lines zellij stores for each pane in the scroll back
// buffer. Excess number of lines are discarded in a FIFO fashion.
// Valid values: positive integers
// Default value: 10000
//
// scroll_buffer_size 10000
// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
// copy_command "xclip -selection clipboard" // x11
// copy_command "wl-copy" // wayland
// copy_command "pbcopy" // osx
// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
// - system (default)
// - primary
//
// copy_clipboard "primary"
// Enable or disable automatic copy (and clear) of selection when releasing mouse
// Default: true
//
// copy_on_select false
// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
//
// scrollback_editor "/usr/bin/vim"
// When attaching to an existing session with other users,
// should the session be mirrored (true)
// or should each user have their own cursor (false)
// Default: false
//
// mirror_session true
// The folder in which Zellij will look for layouts
//
// layout_dir /path/to/my/layout_dir
// The folder in which Zellij will look for themes
//
// theme_dir "/path/to/my/theme_dir"
env {
RUST_BACKTRACE "1"
bar "baz"
foo "bar"
}
plugins {
tab-bar { path "tab-bar"; }
status-bar { path "status-bar"; }
strider { path "strider"; }
compact-bar { path "compact-bar"; }
}

View file

@ -0,0 +1,411 @@
---
source: zellij-client/src/old_config_converter/./unit/convert_config_tests.rs
assertion_line: 46
expression: "format!(\"{}\", kdl_config)"
---
keybinds {
unbind "Ctrl g" "Space"
normal {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
locked {
bind "Ctrl g" { SwitchToMode "normal"; }
}
pane {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl p" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { MoveFocus "Left"; }
bind "l" "Right" { MoveFocus "Right"; }
bind "j" "Down" { MoveFocus "Down"; }
bind "k" "Up" { MoveFocus "Up"; }
bind "p" { SwitchFocus; }
bind "n" { NewPane; SwitchToMode "normal"; }
bind "d" { NewPane "Down"; SwitchToMode "normal"; }
bind "r" { NewPane "Right"; SwitchToMode "normal"; }
bind "x" { CloseFocus; SwitchToMode "normal"; }
bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "z" { TogglePaneFrames; SwitchToMode "normal"; }
bind "w" { ToggleFloatingPanes; SwitchToMode "normal"; }
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0; }
}
tab {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "Ctrl q" { Quit; }
bind "h" "Left" "Up" "k" { GoToPreviousTab; }
bind "l" "Right" "Down" "j" { GoToNextTab; }
bind "n" { NewTab; SwitchToMode "normal"; }
bind "x" { CloseTab; SwitchToMode "normal"; }
bind "s" { ToggleActiveSyncTab; SwitchToMode "normal"; }
bind "1" { GoToTab 1; SwitchToMode "normal"; }
bind "2" { GoToTab 2; SwitchToMode "normal"; }
bind "3" { GoToTab 3; SwitchToMode "normal"; }
bind "4" { GoToTab 4; SwitchToMode "normal"; }
bind "5" { GoToTab 5; SwitchToMode "normal"; }
bind "6" { GoToTab 6; SwitchToMode "normal"; }
bind "7" { GoToTab 7; SwitchToMode "normal"; }
bind "8" { GoToTab 8; SwitchToMode "normal"; }
bind "9" { GoToTab 9; SwitchToMode "normal"; }
bind "Tab" { ToggleTab; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
resize {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { Resize "Left"; }
bind "j" "Down" { Resize "Down"; }
bind "k" "Up" { Resize "Up"; }
bind "l" "Right" { Resize "Right"; }
bind "=" { Resize "Increase"; }
bind "+" { Resize "Increase"; }
bind "-" { Resize "Decrease"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
move {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl h" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl q" { Quit; }
bind "n" "Tab" { MovePane; }
bind "h" "Left" { MovePane "Left"; }
bind "j" "Down" { MovePane "Down"; }
bind "k" "Up" { MovePane "Up"; }
bind "l" "Right" { MovePane "Right"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
scroll {
bind "e" { EditScrollback; SwitchToMode "normal"; }
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
}
session {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "d" { Detach; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
search {
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
bind "n" { Search "Down"; }
bind "p" { Search "Up"; }
bind "c" { SearchToggleOption "CaseSensitivity"; }
bind "w" { SearchToggleOption "Wrap"; }
bind "o" { SearchToggleOption "WholeWord"; }
}
entersearch {
bind "Enter" { SwitchToMode "search"; }
bind "Ctrl c" "Esc" { SearchInput 27; SwitchToMode "scroll"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenameTab {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenameTab; SwitchToMode "tab"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenamePane {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenamePane; SwitchToMode "pane"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
tmux {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "[" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "Ctrl b" { Write 2; SwitchToMode "normal"; }
bind "\"" { NewPane "Down"; SwitchToMode "normal"; }
bind "%" { NewPane "Right"; SwitchToMode "normal"; }
bind "z" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "c" { NewTab; SwitchToMode "normal"; }
bind "," { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "p" { GoToPreviousTab; SwitchToMode "normal"; }
bind "n" { GoToNextTab; SwitchToMode "normal"; }
bind "Left" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "Right" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "Down" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "Up" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "h" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "l" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "j" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "k" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "o" { FocusNextPane; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "d" { Detach; }
}
}
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed
// Options:
// - detach (Default)
// - quit
//
// on_force_close "quit"
// Send a request for a simplified ui (without arrow fonts) to plugins
// Options:
// - true
// - false (Default)
//
// simplified_ui true
// Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL
//
// default_shell "fish"
// Toggle between having pane frames around the panes
// Options:
// - true (default)
// - false
//
// pane_frames true
// Choose the theme that is specified in the themes section.
// Default: default
//
// theme "default"
// The name of the default layout to load on startup
// Default: "default"
//
// default_layout "compact"
// Choose the mode that zellij uses when starting up.
// Default: normal
//
// default_mode "locked"
// Toggle enabling the mouse mode.
// On certain configurations, or terminals this could
// potentially interfere with copying text.
// Options:
// - true (default)
// - false
//
// mouse_mode false
// Configure the scroll back buffer size
// This is the number of lines zellij stores for each pane in the scroll back
// buffer. Excess number of lines are discarded in a FIFO fashion.
// Valid values: positive integers
// Default value: 10000
//
// scroll_buffer_size 10000
// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
// copy_command "xclip -selection clipboard" // x11
// copy_command "wl-copy" // wayland
// copy_command "pbcopy" // osx
// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
// - system (default)
// - primary
//
// copy_clipboard "primary"
// Enable or disable automatic copy (and clear) of selection when releasing mouse
// Default: true
//
// copy_on_select false
// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
//
// scrollback_editor "/usr/bin/vim"
// When attaching to an existing session with other users,
// should the session be mirrored (true)
// or should each user have their own cursor (false)
// Default: false
//
// mirror_session true
// The folder in which Zellij will look for layouts
//
// layout_dir /path/to/my/layout_dir
// The folder in which Zellij will look for themes
//
// theme_dir "/path/to/my/theme_dir"
plugins {
tab-bar { path "tab-bar"; }
status-bar { path "status-bar"; }
strider { path "strider"; }
compact-bar { path "compact-bar"; }
}

View file

@ -0,0 +1,411 @@
---
source: zellij-client/src/old_config_converter/./unit/convert_config_tests.rs
assertion_line: 35
expression: "format!(\"{}\", kdl_config)"
---
keybinds clear-defaults=true {
normal {
unbind "Ctrl a" "Enter"
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
locked {
bind "Ctrl g" { SwitchToMode "normal"; }
}
pane {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl p" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { MoveFocus "Left"; }
bind "l" "Right" { MoveFocus "Right"; }
bind "j" "Down" { MoveFocus "Down"; }
bind "k" "Up" { MoveFocus "Up"; }
bind "p" { SwitchFocus; }
bind "n" { NewPane; SwitchToMode "normal"; }
bind "d" { NewPane "Down"; SwitchToMode "normal"; }
bind "r" { NewPane "Right"; SwitchToMode "normal"; }
bind "x" { CloseFocus; SwitchToMode "normal"; }
bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "z" { TogglePaneFrames; SwitchToMode "normal"; }
bind "w" { ToggleFloatingPanes; SwitchToMode "normal"; }
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0; }
}
tab {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "Ctrl q" { Quit; }
bind "h" "Left" "Up" "k" { GoToPreviousTab; }
bind "l" "Right" "Down" "j" { GoToNextTab; }
bind "n" { NewTab; SwitchToMode "normal"; }
bind "x" { CloseTab; SwitchToMode "normal"; }
bind "s" { ToggleActiveSyncTab; SwitchToMode "normal"; }
bind "1" { GoToTab 1; SwitchToMode "normal"; }
bind "2" { GoToTab 2; SwitchToMode "normal"; }
bind "3" { GoToTab 3; SwitchToMode "normal"; }
bind "4" { GoToTab 4; SwitchToMode "normal"; }
bind "5" { GoToTab 5; SwitchToMode "normal"; }
bind "6" { GoToTab 6; SwitchToMode "normal"; }
bind "7" { GoToTab 7; SwitchToMode "normal"; }
bind "8" { GoToTab 8; SwitchToMode "normal"; }
bind "9" { GoToTab 9; SwitchToMode "normal"; }
bind "Tab" { ToggleTab; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
resize {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { Resize "Left"; }
bind "j" "Down" { Resize "Down"; }
bind "k" "Up" { Resize "Up"; }
bind "l" "Right" { Resize "Right"; }
bind "=" { Resize "Increase"; }
bind "+" { Resize "Increase"; }
bind "-" { Resize "Decrease"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
move {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl h" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl q" { Quit; }
bind "n" "Tab" { MovePane; }
bind "h" "Left" { MovePane "Left"; }
bind "j" "Down" { MovePane "Down"; }
bind "k" "Up" { MovePane "Up"; }
bind "l" "Right" { MovePane "Right"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
scroll {
bind "e" { EditScrollback; SwitchToMode "normal"; }
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
}
session {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "d" { Detach; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
search {
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
bind "n" { Search "Down"; }
bind "p" { Search "Up"; }
bind "c" { SearchToggleOption "CaseSensitivity"; }
bind "w" { SearchToggleOption "Wrap"; }
bind "o" { SearchToggleOption "WholeWord"; }
}
entersearch {
bind "Enter" { SwitchToMode "search"; }
bind "Ctrl c" "Esc" { SearchInput 27; SwitchToMode "scroll"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenameTab {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenameTab; SwitchToMode "tab"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenamePane {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenamePane; SwitchToMode "pane"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
tmux {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "[" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "Ctrl b" { Write 2; SwitchToMode "normal"; }
bind "\"" { NewPane "Down"; SwitchToMode "normal"; }
bind "%" { NewPane "Right"; SwitchToMode "normal"; }
bind "z" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "c" { NewTab; SwitchToMode "normal"; }
bind "," { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "p" { GoToPreviousTab; SwitchToMode "normal"; }
bind "n" { GoToNextTab; SwitchToMode "normal"; }
bind "Left" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "Right" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "Down" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "Up" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "h" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "l" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "j" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "k" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "o" { FocusNextPane; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "d" { Detach; }
}
}
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed
// Options:
// - detach (Default)
// - quit
//
// on_force_close "quit"
// Send a request for a simplified ui (without arrow fonts) to plugins
// Options:
// - true
// - false (Default)
//
// simplified_ui true
// Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL
//
// default_shell "fish"
// Toggle between having pane frames around the panes
// Options:
// - true (default)
// - false
//
// pane_frames true
// Choose the theme that is specified in the themes section.
// Default: default
//
// theme "default"
// The name of the default layout to load on startup
// Default: "default"
//
// default_layout "compact"
// Choose the mode that zellij uses when starting up.
// Default: normal
//
// default_mode "locked"
// Toggle enabling the mouse mode.
// On certain configurations, or terminals this could
// potentially interfere with copying text.
// Options:
// - true (default)
// - false
//
// mouse_mode false
// Configure the scroll back buffer size
// This is the number of lines zellij stores for each pane in the scroll back
// buffer. Excess number of lines are discarded in a FIFO fashion.
// Valid values: positive integers
// Default value: 10000
//
// scroll_buffer_size 10000
// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
// copy_command "xclip -selection clipboard" // x11
// copy_command "wl-copy" // wayland
// copy_command "pbcopy" // osx
// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
// - system (default)
// - primary
//
// copy_clipboard "primary"
// Enable or disable automatic copy (and clear) of selection when releasing mouse
// Default: true
//
// copy_on_select false
// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
//
// scrollback_editor "/usr/bin/vim"
// When attaching to an existing session with other users,
// should the session be mirrored (true)
// or should each user have their own cursor (false)
// Default: false
//
// mirror_session true
// The folder in which Zellij will look for layouts
//
// layout_dir /path/to/my/layout_dir
// The folder in which Zellij will look for themes
//
// theme_dir "/path/to/my/theme_dir"
plugins {
tab-bar { path "tab-bar"; }
status-bar { path "status-bar"; }
strider { path "strider"; }
compact-bar { path "compact-bar"; }
}

View file

@ -0,0 +1,451 @@
---
source: zellij-client/src/old_config_converter/./unit/convert_config_tests.rs
assertion_line: 90
expression: "format!(\"{}\", kdl_config)"
---
keybinds clear-defaults=true {
normal {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
locked {
bind "Ctrl g" { SwitchToMode "normal"; }
}
pane {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl p" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { MoveFocus "Left"; }
bind "l" "Right" { MoveFocus "Right"; }
bind "j" "Down" { MoveFocus "Down"; }
bind "k" "Up" { MoveFocus "Up"; }
bind "p" { SwitchFocus; }
bind "n" { NewPane; SwitchToMode "normal"; }
bind "d" { NewPane "Down"; SwitchToMode "normal"; }
bind "r" { NewPane "Right"; SwitchToMode "normal"; }
bind "x" { CloseFocus; SwitchToMode "normal"; }
bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "z" { TogglePaneFrames; SwitchToMode "normal"; }
bind "w" { ToggleFloatingPanes; SwitchToMode "normal"; }
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0; }
}
tab {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "Ctrl q" { Quit; }
bind "h" "Left" "Up" "k" { GoToPreviousTab; }
bind "l" "Right" "Down" "j" { GoToNextTab; }
bind "n" { NewTab; SwitchToMode "normal"; }
bind "x" { CloseTab; SwitchToMode "normal"; }
bind "s" { ToggleActiveSyncTab; SwitchToMode "normal"; }
bind "1" { GoToTab 1; SwitchToMode "normal"; }
bind "2" { GoToTab 2; SwitchToMode "normal"; }
bind "3" { GoToTab 3; SwitchToMode "normal"; }
bind "4" { GoToTab 4; SwitchToMode "normal"; }
bind "5" { GoToTab 5; SwitchToMode "normal"; }
bind "6" { GoToTab 6; SwitchToMode "normal"; }
bind "7" { GoToTab 7; SwitchToMode "normal"; }
bind "8" { GoToTab 8; SwitchToMode "normal"; }
bind "9" { GoToTab 9; SwitchToMode "normal"; }
bind "Tab" { ToggleTab; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
resize {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { Resize "Left"; }
bind "j" "Down" { Resize "Down"; }
bind "k" "Up" { Resize "Up"; }
bind "l" "Right" { Resize "Right"; }
bind "=" { Resize "Increase"; }
bind "+" { Resize "Increase"; }
bind "-" { Resize "Decrease"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
move {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl h" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl q" { Quit; }
bind "n" "Tab" { MovePane; }
bind "h" "Left" { MovePane "Left"; }
bind "j" "Down" { MovePane "Down"; }
bind "k" "Up" { MovePane "Up"; }
bind "l" "Right" { MovePane "Right"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
scroll {
bind "e" { EditScrollback; SwitchToMode "normal"; }
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
}
session {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "d" { Detach; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
search {
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
bind "n" { Search "Down"; }
bind "p" { Search "Up"; }
bind "c" { SearchToggleOption "CaseSensitivity"; }
bind "w" { SearchToggleOption "Wrap"; }
bind "o" { SearchToggleOption "WholeWord"; }
}
entersearch {
bind "Enter" { SwitchToMode "search"; }
bind "Ctrl c" "Esc" { SearchInput 27; SwitchToMode "scroll"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenameTab {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenameTab; SwitchToMode "tab"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenamePane {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenamePane; SwitchToMode "pane"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
tmux {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "[" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "Ctrl b" { Write 2; SwitchToMode "normal"; }
bind "\"" { NewPane "Down"; SwitchToMode "normal"; }
bind "%" { NewPane "Right"; SwitchToMode "normal"; }
bind "z" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "c" { NewTab; SwitchToMode "normal"; }
bind "," { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "p" { GoToPreviousTab; SwitchToMode "normal"; }
bind "n" { GoToNextTab; SwitchToMode "normal"; }
bind "Left" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "Right" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "Down" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "Up" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "h" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "l" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "j" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "k" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "o" { FocusNextPane; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "d" { Detach; }
}
}
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed
// Options:
// - detach (Default)
// - quit
//
// on_force_close "quit"
// Send a request for a simplified ui (without arrow fonts) to plugins
// Options:
// - true
// - false (Default)
//
// simplified_ui true
// Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL
//
// default_shell "fish"
// Toggle between having pane frames around the panes
// Options:
// - true (default)
// - false
//
// pane_frames true
// Choose the theme that is specified in the themes section.
// Default: default
//
// theme "default"
// The name of the default layout to load on startup
// Default: "default"
//
// default_layout "compact"
// Choose the mode that zellij uses when starting up.
// Default: normal
//
// default_mode "locked"
// Toggle enabling the mouse mode.
// On certain configurations, or terminals this could
// potentially interfere with copying text.
// Options:
// - true (default)
// - false
//
// mouse_mode false
// Configure the scroll back buffer size
// This is the number of lines zellij stores for each pane in the scroll back
// buffer. Excess number of lines are discarded in a FIFO fashion.
// Valid values: positive integers
// Default value: 10000
//
// scroll_buffer_size 10000
// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
// copy_command "xclip -selection clipboard" // x11
// copy_command "wl-copy" // wayland
// copy_command "pbcopy" // osx
// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
// - system (default)
// - primary
//
// copy_clipboard "primary"
// Enable or disable automatic copy (and clear) of selection when releasing mouse
// Default: true
//
// copy_on_select false
// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
//
// scrollback_editor "/usr/bin/vim"
// When attaching to an existing session with other users,
// should the session be mirrored (true)
// or should each user have their own cursor (false)
// Default: false
//
// mirror_session true
// The folder in which Zellij will look for layouts
//
// layout_dir /path/to/my/layout_dir
// The folder in which Zellij will look for themes
//
// theme_dir "/path/to/my/theme_dir"
plugins {
tab-bar { path "tab-bar"; }
status-bar { path "status-bar"; }
strider { path "strider"; }
compact-bar { path "compact-bar"; }
}
themes {
molokai-dark {
fg 248 248 240
bg 27 29 30
black 0 0 0
red 255 0 0
green 0 140 0
yellow 255 255 0
blue 102 217 239
magenta 174 129 255
cyan 0 255 255
white 255 255 255
orange 253 151 31
}
nord {
fg 216 222 233
bg 46 52 64
black 59 66 82
red 191 97 106
green 163 190 140
yellow 235 203 139
blue 129 161 193
magenta 180 142 173
cyan 136 192 208
white 229 233 240
orange 208 135 112
}
some-eightbit-theme {
fg 8
bg 0
black 10
red 2
green 3
yellow 4
blue 5
magenta 6
cyan 9
white 255
orange 7
}
}

View file

@ -0,0 +1,416 @@
---
source: zellij-client/src/old_config_converter/./unit/convert_config_tests.rs
assertion_line: 79
expression: "format!(\"{}\", kdl_config)"
---
keybinds clear-defaults=true {
normal {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
locked {
bind "Ctrl g" { SwitchToMode "normal"; }
}
pane {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl p" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { MoveFocus "Left"; }
bind "l" "Right" { MoveFocus "Right"; }
bind "j" "Down" { MoveFocus "Down"; }
bind "k" "Up" { MoveFocus "Up"; }
bind "p" { SwitchFocus; }
bind "n" { NewPane; SwitchToMode "normal"; }
bind "d" { NewPane "Down"; SwitchToMode "normal"; }
bind "r" { NewPane "Right"; SwitchToMode "normal"; }
bind "x" { CloseFocus; SwitchToMode "normal"; }
bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "z" { TogglePaneFrames; SwitchToMode "normal"; }
bind "w" { ToggleFloatingPanes; SwitchToMode "normal"; }
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0; }
}
tab {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "Ctrl q" { Quit; }
bind "h" "Left" "Up" "k" { GoToPreviousTab; }
bind "l" "Right" "Down" "j" { GoToNextTab; }
bind "n" { NewTab; SwitchToMode "normal"; }
bind "x" { CloseTab; SwitchToMode "normal"; }
bind "s" { ToggleActiveSyncTab; SwitchToMode "normal"; }
bind "1" { GoToTab 1; SwitchToMode "normal"; }
bind "2" { GoToTab 2; SwitchToMode "normal"; }
bind "3" { GoToTab 3; SwitchToMode "normal"; }
bind "4" { GoToTab 4; SwitchToMode "normal"; }
bind "5" { GoToTab 5; SwitchToMode "normal"; }
bind "6" { GoToTab 6; SwitchToMode "normal"; }
bind "7" { GoToTab 7; SwitchToMode "normal"; }
bind "8" { GoToTab 8; SwitchToMode "normal"; }
bind "9" { GoToTab 9; SwitchToMode "normal"; }
bind "Tab" { ToggleTab; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
resize {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { Resize "Left"; }
bind "j" "Down" { Resize "Down"; }
bind "k" "Up" { Resize "Up"; }
bind "l" "Right" { Resize "Right"; }
bind "=" { Resize "Increase"; }
bind "+" { Resize "Increase"; }
bind "-" { Resize "Decrease"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
move {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl h" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl q" { Quit; }
bind "n" "Tab" { MovePane; }
bind "h" "Left" { MovePane "Left"; }
bind "j" "Down" { MovePane "Down"; }
bind "k" "Up" { MovePane "Up"; }
bind "l" "Right" { MovePane "Right"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
scroll {
bind "e" { EditScrollback; SwitchToMode "normal"; }
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
}
session {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "d" { Detach; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
search {
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
bind "n" { Search "Down"; }
bind "p" { Search "Up"; }
bind "c" { SearchToggleOption "CaseSensitivity"; }
bind "w" { SearchToggleOption "Wrap"; }
bind "o" { SearchToggleOption "WholeWord"; }
}
entersearch {
bind "Enter" { SwitchToMode "search"; }
bind "Ctrl c" "Esc" { SearchInput 27; SwitchToMode "scroll"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenameTab {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenameTab; SwitchToMode "tab"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenamePane {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenamePane; SwitchToMode "pane"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
tmux {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "[" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "Ctrl b" { Write 2; SwitchToMode "normal"; }
bind "\"" { NewPane "Down"; SwitchToMode "normal"; }
bind "%" { NewPane "Right"; SwitchToMode "normal"; }
bind "z" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "c" { NewTab; SwitchToMode "normal"; }
bind "," { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "p" { GoToPreviousTab; SwitchToMode "normal"; }
bind "n" { GoToNextTab; SwitchToMode "normal"; }
bind "Left" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "Right" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "Down" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "Up" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "h" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "l" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "j" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "k" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "o" { FocusNextPane; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "d" { Detach; }
}
}
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed
// Options:
// - detach (Default)
// - quit
//
// on_force_close "quit"
// Send a request for a simplified ui (without arrow fonts) to plugins
// Options:
// - true
// - false (Default)
//
// simplified_ui true
// Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL
//
// default_shell "fish"
// Toggle between having pane frames around the panes
// Options:
// - true (default)
// - false
//
// pane_frames true
// Choose the theme that is specified in the themes section.
// Default: default
//
// theme "default"
// The name of the default layout to load on startup
// Default: "default"
//
// default_layout "compact"
// Choose the mode that zellij uses when starting up.
// Default: normal
//
// default_mode "locked"
// Toggle enabling the mouse mode.
// On certain configurations, or terminals this could
// potentially interfere with copying text.
// Options:
// - true (default)
// - false
//
// mouse_mode false
// Configure the scroll back buffer size
// This is the number of lines zellij stores for each pane in the scroll back
// buffer. Excess number of lines are discarded in a FIFO fashion.
// Valid values: positive integers
// Default value: 10000
//
// scroll_buffer_size 10000
// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
// copy_command "xclip -selection clipboard" // x11
// copy_command "wl-copy" // wayland
// copy_command "pbcopy" // osx
// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
// - system (default)
// - primary
//
// copy_clipboard "primary"
// Enable or disable automatic copy (and clear) of selection when releasing mouse
// Default: true
//
// copy_on_select false
// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
//
// scrollback_editor "/usr/bin/vim"
// When attaching to an existing session with other users,
// should the session be mirrored (true)
// or should each user have their own cursor (false)
// Default: false
//
// mirror_session true
// The folder in which Zellij will look for layouts
//
// layout_dir /path/to/my/layout_dir
// The folder in which Zellij will look for themes
//
// theme_dir "/path/to/my/theme_dir"
plugins {
tab-bar { path "tab-bar"; }
status-bar { path "status-bar"; }
strider { path "strider"; }
compact-bar { path "compact-bar"; }
}
ui {
pane_frames {
rounded_corners true
}
}

View file

@ -0,0 +1,410 @@
---
source: zellij-client/src/old_config_converter/./unit/convert_config_tests.rs
assertion_line: 57
expression: "format!(\"{}\", kdl_config)"
---
keybinds {
normal clear-defaults=true {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
locked {
bind "Ctrl g" { SwitchToMode "normal"; }
}
pane {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl p" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { MoveFocus "Left"; }
bind "l" "Right" { MoveFocus "Right"; }
bind "j" "Down" { MoveFocus "Down"; }
bind "k" "Up" { MoveFocus "Up"; }
bind "p" { SwitchFocus; }
bind "n" { NewPane; SwitchToMode "normal"; }
bind "d" { NewPane "Down"; SwitchToMode "normal"; }
bind "r" { NewPane "Right"; SwitchToMode "normal"; }
bind "x" { CloseFocus; SwitchToMode "normal"; }
bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "z" { TogglePaneFrames; SwitchToMode "normal"; }
bind "w" { ToggleFloatingPanes; SwitchToMode "normal"; }
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0; }
}
tab {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "Ctrl q" { Quit; }
bind "h" "Left" "Up" "k" { GoToPreviousTab; }
bind "l" "Right" "Down" "j" { GoToNextTab; }
bind "n" { NewTab; SwitchToMode "normal"; }
bind "x" { CloseTab; SwitchToMode "normal"; }
bind "s" { ToggleActiveSyncTab; SwitchToMode "normal"; }
bind "1" { GoToTab 1; SwitchToMode "normal"; }
bind "2" { GoToTab 2; SwitchToMode "normal"; }
bind "3" { GoToTab 3; SwitchToMode "normal"; }
bind "4" { GoToTab 4; SwitchToMode "normal"; }
bind "5" { GoToTab 5; SwitchToMode "normal"; }
bind "6" { GoToTab 6; SwitchToMode "normal"; }
bind "7" { GoToTab 7; SwitchToMode "normal"; }
bind "8" { GoToTab 8; SwitchToMode "normal"; }
bind "9" { GoToTab 9; SwitchToMode "normal"; }
bind "Tab" { ToggleTab; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
resize {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { Resize "Left"; }
bind "j" "Down" { Resize "Down"; }
bind "k" "Up" { Resize "Up"; }
bind "l" "Right" { Resize "Right"; }
bind "=" { Resize "Increase"; }
bind "+" { Resize "Increase"; }
bind "-" { Resize "Decrease"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
move {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl h" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl q" { Quit; }
bind "n" "Tab" { MovePane; }
bind "h" "Left" { MovePane "Left"; }
bind "j" "Down" { MovePane "Down"; }
bind "k" "Up" { MovePane "Up"; }
bind "l" "Right" { MovePane "Right"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
scroll {
bind "e" { EditScrollback; SwitchToMode "normal"; }
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
}
session {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "d" { Detach; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
search {
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
bind "n" { Search "Down"; }
bind "p" { Search "Up"; }
bind "c" { SearchToggleOption "CaseSensitivity"; }
bind "w" { SearchToggleOption "Wrap"; }
bind "o" { SearchToggleOption "WholeWord"; }
}
entersearch {
bind "Enter" { SwitchToMode "search"; }
bind "Ctrl c" "Esc" { SearchInput 27; SwitchToMode "scroll"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenameTab {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenameTab; SwitchToMode "tab"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenamePane {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenamePane; SwitchToMode "pane"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
tmux {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "[" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "Ctrl b" { Write 2; SwitchToMode "normal"; }
bind "\"" { NewPane "Down"; SwitchToMode "normal"; }
bind "%" { NewPane "Right"; SwitchToMode "normal"; }
bind "z" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "c" { NewTab; SwitchToMode "normal"; }
bind "," { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "p" { GoToPreviousTab; SwitchToMode "normal"; }
bind "n" { GoToNextTab; SwitchToMode "normal"; }
bind "Left" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "Right" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "Down" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "Up" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "h" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "l" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "j" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "k" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "o" { FocusNextPane; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "d" { Detach; }
}
}
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed
// Options:
// - detach (Default)
// - quit
//
// on_force_close "quit"
// Send a request for a simplified ui (without arrow fonts) to plugins
// Options:
// - true
// - false (Default)
//
// simplified_ui true
// Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL
//
// default_shell "fish"
// Toggle between having pane frames around the panes
// Options:
// - true (default)
// - false
//
// pane_frames true
// Choose the theme that is specified in the themes section.
// Default: default
//
// theme "default"
// The name of the default layout to load on startup
// Default: "default"
//
// default_layout "compact"
// Choose the mode that zellij uses when starting up.
// Default: normal
//
// default_mode "locked"
// Toggle enabling the mouse mode.
// On certain configurations, or terminals this could
// potentially interfere with copying text.
// Options:
// - true (default)
// - false
//
// mouse_mode false
// Configure the scroll back buffer size
// This is the number of lines zellij stores for each pane in the scroll back
// buffer. Excess number of lines are discarded in a FIFO fashion.
// Valid values: positive integers
// Default value: 10000
//
// scroll_buffer_size 10000
// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
// copy_command "xclip -selection clipboard" // x11
// copy_command "wl-copy" // wayland
// copy_command "pbcopy" // osx
// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
// - system (default)
// - primary
//
// copy_clipboard "primary"
// Enable or disable automatic copy (and clear) of selection when releasing mouse
// Default: true
//
// copy_on_select false
// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
//
// scrollback_editor "/usr/bin/vim"
// When attaching to an existing session with other users,
// should the session be mirrored (true)
// or should each user have their own cursor (false)
// Default: false
//
// mirror_session true
// The folder in which Zellij will look for layouts
//
// layout_dir /path/to/my/layout_dir
// The folder in which Zellij will look for themes
//
// theme_dir "/path/to/my/theme_dir"
plugins {
tab-bar { path "tab-bar"; }
status-bar { path "status-bar"; }
strider { path "strider"; }
compact-bar { path "compact-bar"; }
}

View file

@ -0,0 +1,410 @@
---
source: zellij-client/src/old_config_converter/./unit/convert_config_tests.rs
assertion_line: 13
expression: "format!(\"{}\", kdl_config)"
---
keybinds clear-defaults=true {
normal {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
locked {
bind "Ctrl g" { SwitchToMode "normal"; }
}
pane {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl p" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { MoveFocus "Left"; }
bind "l" "Right" { MoveFocus "Right"; }
bind "j" "Down" { MoveFocus "Down"; }
bind "k" "Up" { MoveFocus "Up"; }
bind "p" { SwitchFocus; }
bind "n" { NewPane; SwitchToMode "normal"; }
bind "d" { NewPane "Down"; SwitchToMode "normal"; }
bind "r" { NewPane "Right"; SwitchToMode "normal"; }
bind "x" { CloseFocus; SwitchToMode "normal"; }
bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "z" { TogglePaneFrames; SwitchToMode "normal"; }
bind "w" { ToggleFloatingPanes; SwitchToMode "normal"; }
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0; }
}
tab {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl t" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "Ctrl q" { Quit; }
bind "h" "Left" "Up" "k" { GoToPreviousTab; }
bind "l" "Right" "Down" "j" { GoToNextTab; }
bind "n" { NewTab; SwitchToMode "normal"; }
bind "x" { CloseTab; SwitchToMode "normal"; }
bind "s" { ToggleActiveSyncTab; SwitchToMode "normal"; }
bind "1" { GoToTab 1; SwitchToMode "normal"; }
bind "2" { GoToTab 2; SwitchToMode "normal"; }
bind "3" { GoToTab 3; SwitchToMode "normal"; }
bind "4" { GoToTab 4; SwitchToMode "normal"; }
bind "5" { GoToTab 5; SwitchToMode "normal"; }
bind "6" { GoToTab 6; SwitchToMode "normal"; }
bind "7" { GoToTab 7; SwitchToMode "normal"; }
bind "8" { GoToTab 8; SwitchToMode "normal"; }
bind "9" { GoToTab 9; SwitchToMode "normal"; }
bind "Tab" { ToggleTab; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
resize {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl q" { Quit; }
bind "h" "Left" { Resize "Left"; }
bind "j" "Down" { Resize "Down"; }
bind "k" "Up" { Resize "Up"; }
bind "l" "Right" { Resize "Right"; }
bind "=" { Resize "Increase"; }
bind "+" { Resize "Increase"; }
bind "-" { Resize "Decrease"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
move {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl h" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl q" { Quit; }
bind "n" "Tab" { MovePane; }
bind "h" "Left" { MovePane "Left"; }
bind "j" "Down" { MovePane "Down"; }
bind "k" "Up" { MovePane "Up"; }
bind "l" "Right" { MovePane "Right"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
scroll {
bind "e" { EditScrollback; SwitchToMode "normal"; }
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
}
session {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "d" { Detach; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
search {
bind "Ctrl s" "Space" "Enter" "Esc" { SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl b" { SwitchToMode "tmux"; }
bind "Ctrl o" { SwitchToMode "session"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "Ctrl q" { Quit; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
bind "n" { Search "Down"; }
bind "p" { Search "Up"; }
bind "c" { SearchToggleOption "CaseSensitivity"; }
bind "w" { SearchToggleOption "Wrap"; }
bind "o" { SearchToggleOption "WholeWord"; }
}
entersearch {
bind "Enter" { SwitchToMode "search"; }
bind "Ctrl c" "Esc" { SearchInput 27; SwitchToMode "scroll"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenameTab {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenameTab; SwitchToMode "tab"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
RenamePane {
bind "Enter" "Ctrl c" "Esc" { SwitchToMode "normal"; }
bind "Esc" { UndoRenamePane; SwitchToMode "pane"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
tmux {
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Ctrl n" { SwitchToMode "resize"; }
bind "Ctrl p" { SwitchToMode "pane"; }
bind "Ctrl h" { SwitchToMode "move"; }
bind "Ctrl t" { SwitchToMode "tab"; }
bind "Ctrl o" "Enter" "Space" "Esc" { SwitchToMode "normal"; }
bind "Ctrl s" { SwitchToMode "scroll"; }
bind "[" { SwitchToMode "scroll"; }
bind "Ctrl q" { Quit; }
bind "Ctrl b" { Write 2; SwitchToMode "normal"; }
bind "\"" { NewPane "Down"; SwitchToMode "normal"; }
bind "%" { NewPane "Right"; SwitchToMode "normal"; }
bind "z" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "c" { NewTab; SwitchToMode "normal"; }
bind "," { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "p" { GoToPreviousTab; SwitchToMode "normal"; }
bind "n" { GoToNextTab; SwitchToMode "normal"; }
bind "Left" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "Right" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "Down" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "Up" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "h" { MoveFocus "Left"; SwitchToMode "normal"; }
bind "l" { MoveFocus "Right"; SwitchToMode "normal"; }
bind "j" { MoveFocus "Down"; SwitchToMode "normal"; }
bind "k" { MoveFocus "Up"; SwitchToMode "normal"; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "o" { FocusNextPane; }
bind "Alt =" { Resize "Increase"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "d" { Detach; }
}
}
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed
// Options:
// - detach (Default)
// - quit
//
// on_force_close "quit"
// Send a request for a simplified ui (without arrow fonts) to plugins
// Options:
// - true
// - false (Default)
//
// simplified_ui true
// Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL
//
// default_shell "fish"
// Toggle between having pane frames around the panes
// Options:
// - true (default)
// - false
//
// pane_frames true
// Choose the theme that is specified in the themes section.
// Default: default
//
// theme "default"
// The name of the default layout to load on startup
// Default: "default"
//
// default_layout "compact"
// Choose the mode that zellij uses when starting up.
// Default: normal
//
// default_mode "locked"
// Toggle enabling the mouse mode.
// On certain configurations, or terminals this could
// potentially interfere with copying text.
// Options:
// - true (default)
// - false
//
// mouse_mode false
// Configure the scroll back buffer size
// This is the number of lines zellij stores for each pane in the scroll back
// buffer. Excess number of lines are discarded in a FIFO fashion.
// Valid values: positive integers
// Default value: 10000
//
// scroll_buffer_size 10000
// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
// copy_command "xclip -selection clipboard" // x11
// copy_command "wl-copy" // wayland
// copy_command "pbcopy" // osx
// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
// - system (default)
// - primary
//
// copy_clipboard "primary"
// Enable or disable automatic copy (and clear) of selection when releasing mouse
// Default: true
//
// copy_on_select false
// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
//
// scrollback_editor "/usr/bin/vim"
// When attaching to an existing session with other users,
// should the session be mirrored (true)
// or should each user have their own cursor (false)
// Default: false
//
// mirror_session true
// The folder in which Zellij will look for layouts
//
// layout_dir /path/to/my/layout_dir
// The folder in which Zellij will look for themes
//
// theme_dir "/path/to/my/theme_dir"
plugins {
tab-bar { path "tab-bar"; }
status-bar { path "status-bar"; }
strider { path "strider"; }
compact-bar { path "compact-bar"; }
}

View file

@ -0,0 +1,14 @@
---
source: zellij-client/src/old_config_converter/./unit/convert_layout_tests.rs
assertion_line: 13
expression: "format!(\"{}\", kdl_config)"
---
layout {
pane size=1 borderless=true {
plugin location="zellij:tab-bar"
}
pane
pane size=2 borderless=true {
plugin location="zellij:status-bar"
}
}

View file

@ -0,0 +1,61 @@
---
source: zellij-client/src/old_config_converter/./unit/convert_layout_tests.rs
assertion_line: 68
expression: "format!(\"{}\", kdl_config)"
---
layout {
default_tab_template {
pane size=1 borderless=true {
plugin location="zellij:tab-bar"
}
children
pane size=2 borderless=true {
plugin location="zellij:status-bar"
}
}
tab split_direction="Vertical" {
pane split_direction="Vertical" {
pane size="50%"
pane size="50%"
}
}
tab
tab split_direction="Vertical" {
pane split_direction="Vertical" {
pane size="50%"
pane size="50%"
}
}
tab split_direction="Vertical" {
pane split_direction="Vertical" {
pane size="50%"
pane size="50%" split_direction="Horizontal" {
pane size="50%"
pane size="50%"
}
}
}
tab
tab
tab
tab split_direction="Vertical" {
pane split_direction="Vertical" {
pane size="20%" {
plugin location="zellij:strider"
}
pane size="80%" split_direction="Horizontal" {
pane size="50%"
pane size="50%"
}
}
}
tab split_direction="Vertical" {
pane split_direction="Vertical" {
pane size="40%"
pane size="60%" split_direction="Horizontal" {
pane size="50%"
pane size="50%"
}
}
}
}

View file

@ -0,0 +1,60 @@
---
source: zellij-client/src/old_config_converter/./unit/convert_layout_tests.rs
assertion_line: 79
expression: "format!(\"{}\", kdl_config)"
---
layout {
default_tab_template {
pane size=1 borderless=true {
plugin location="zellij:tab-bar"
}
children
pane size=2 borderless=true {
plugin location="zellij:status-bar"
}
}
tab split_direction="Vertical" {
pane split_direction="Vertical" {
pane command="htop" size="50%"
pane size="50%"
}
}
tab split_direction="Vertical" {
pane split_direction="Vertical" {
pane size="50%"
pane size="50%"
}
}
tab split_direction="Vertical" {
pane split_direction="Vertical" {
pane size="50%"
pane size="50%" split_direction="Horizontal" {
pane size="50%"
pane size="50%"
}
}
}
tab
tab
tab
tab split_direction="Vertical" {
pane split_direction="Vertical" {
pane size="20%" {
plugin location="zellij:strider"
}
pane size="80%" split_direction="Horizontal" {
pane size="50%"
pane size="50%"
}
}
}
tab split_direction="Vertical" {
pane split_direction="Vertical" {
pane size="40%"
pane size="60%" split_direction="Horizontal" {
pane size="50%"
pane size="50%"
}
}
}
}

Some files were not shown because too many files have changed in this diff Show more