From 7a98ec1d8e9365feb74d18e115862dd2952ce433 Mon Sep 17 00:00:00 2001 From: Kutsuzawa Ryo Date: Mon, 16 Sep 2019 05:44:53 +0900 Subject: [PATCH] feat: Add configuration for the `git_status` prefix and suffix (#367) --- docs/config/README.md | 32 +++++++++++++------------- src/modules/git_status.rs | 20 +++++++++++++++-- tests/testsuite/git_status.rs | 42 +++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 17 deletions(-) diff --git a/docs/config/README.md b/docs/config/README.md index fe362dbc..4c7fa93f 100644 --- a/docs/config/README.md +++ b/docs/config/README.md @@ -326,21 +326,23 @@ current directory. ### Options -| Variable | Default | Description | -| ----------------- | ------------ | ------------------------------------------------------- | -| `conflicted` | `"="` | This branch has merge conflicts. | -| `ahead` | `"⇡"` | This branch is ahead of the branch being tracked. | -| `behind` | `"⇣"` | This branch is behind of the branch being tracked. | -| `diverged` | `"⇕"` | This branch has diverged from the branch being tracked. | -| `untracked` | `"?"` | There are untracked files in the working directory. | -| `stashed` | `"$"` | A stash exists for the local repository. | -| `modified` | `"!"` | There are file modifications in the working directory. | -| `staged` | `"+"` | A new file has been added to the staging area. | -| `renamed` | `"»"` | A renamed file has been added to the staging area. | -| `deleted` | `"✘"` | A file's deletion has been added to the staging area. | -| `show_sync_count` | `false` | Show ahead/behind count of the branch being tracked. | -| `style` | `"bold red"` | The style for the module. | -| `disabled` | `false` | Disables the `git_status` module. | +| Variable | Default | Description | +| ------------------------ | ------------ | ------------------------------------------------------- | +| `conflicted` | `"="` | This branch has merge conflicts. | +| `ahead` | `"⇡"` | This branch is ahead of the branch being tracked. | +| `behind` | `"⇣"` | This branch is behind of the branch being tracked. | +| `diverged` | `"⇕"` | This branch has diverged from the branch being tracked. | +| `untracked` | `"?"` | There are untracked files in the working directory. | +| `stashed` | `"$"` | A stash exists for the local repository. | +| `modified` | `"!"` | There are file modifications in the working directory. | +| `staged` | `"+"` | A new file has been added to the staging area. | +| `renamed` | `"»"` | A renamed file has been added to the staging area. | +| `deleted` | `"✘"` | A file's deletion has been added to the staging area. | +| `show_sync_count` | `false` | Show ahead/behind count of the branch being tracked. | +| `prefix` | `[` | Prefix to display immediately before git status. | +| `suffix` | `]` | Suffix to display immediately after git status. | +| `style` | `"bold red"` | The style for the module. | +| `disabled` | `false` | Disables the `git_status` module. | ### Example diff --git a/src/modules/git_status.rs b/src/modules/git_status.rs index badf0fac..9b97a2f2 100644 --- a/src/modules/git_status.rs +++ b/src/modules/git_status.rs @@ -29,6 +29,8 @@ pub fn module<'a>(context: &'a Context) -> Option> { const GIT_STATUS_ADDED: &str = "+"; const GIT_STATUS_RENAMED: &str = "»"; const GIT_STATUS_DELETED: &str = "✘"; + const PREFIX: &str = "["; + const SUFFIX: &str = "] "; let repo = context.get_repo().ok()?; let branch_name = repo.branch.as_ref()?; @@ -40,9 +42,23 @@ pub fn module<'a>(context: &'a Context) -> Option> { let module_style = module .config_value_style("style") .unwrap_or_else(|| Color::Red.bold()); + let start_symbol = module + .config_value_str("prefix") + .unwrap_or(PREFIX) + .to_owned(); + let end_symbol = module + .config_value_str("suffix") + .unwrap_or(SUFFIX) + .to_owned(); - module.get_prefix().set_value("[").set_style(module_style); - module.get_suffix().set_value("] ").set_style(module_style); + module + .get_prefix() + .set_value(start_symbol) + .set_style(module_style); + module + .get_suffix() + .set_value(end_symbol) + .set_style(module_style); module.set_style(module_style); let ahead_behind = get_ahead_behind(&repository, branch_name); diff --git a/tests/testsuite/git_status.rs b/tests/testsuite/git_status.rs index 9859d617..50378580 100644 --- a/tests/testsuite/git_status.rs +++ b/tests/testsuite/git_status.rs @@ -370,3 +370,45 @@ fn shows_deleted_file() -> io::Result<()> { Ok(()) } + +#[test] +#[ignore] +fn prefix() -> io::Result<()> { + let repo_dir = common::create_fixture_repo()?; + File::create(repo_dir.join("prefix"))?; + let output = common::render_module("git_status") + .arg("--path") + .arg(repo_dir) + .env_clear() + .use_config(toml::toml! { + [git_status] + prefix = "(" + style = "" + }) + .output()?; + let actual = String::from_utf8(output.stdout).unwrap(); + let expected = "("; + assert!(actual.starts_with(&expected)); + Ok(()) +} + +#[test] +#[ignore] +fn suffix() -> io::Result<()> { + let repo_dir = common::create_fixture_repo()?; + File::create(repo_dir.join("suffix"))?; + let output = common::render_module("git_status") + .arg("--path") + .arg(repo_dir) + .env_clear() + .use_config(toml::toml! { + [git_status] + suffix = ")" + style = "" + }) + .output()?; + let actual = String::from_utf8(output.stdout).unwrap(); + let expected = ")"; + assert!(actual.ends_with(&expected)); + Ok(()) +}