summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKutsuzawa Ryo <kutsuzawa2851@gmail.com>2019-09-16 05:44:53 +0900
committerMatan Kushner <hello@matchai.me>2019-09-15 16:44:53 -0400
commit7a98ec1d8e9365feb74d18e115862dd2952ce433 (patch)
tree8f390bfb109aad5423ff1911ed1fb798f8cc666e
parent8014e9276ee704882ed6ba84960bb5fe00606aa2 (diff)
feat: Add configuration for the `git_status` prefix and suffix (#367)
-rw-r--r--docs/config/README.md32
-rw-r--r--src/modules/git_status.rs22
-rw-r--r--tests/testsuite/git_status.rs42
3 files changed, 78 insertions, 18 deletions
diff --git a/docs/config/README.md b/docs/config/README.md
index fe362dbca..4c7fa93f2 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 badf0face..9b97a2f24 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<Module<'a>> {
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<Module<'a>> {
let module_style = module
.config_value_style("style")
.unwrap_or_else(|| Color::Red.bold());
-
- module.get_prefix().set_value("[").set_style(module_style);
- module.get_suffix().set_value("] ").set_style(module_style);
+ 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(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 9859d6170..50378580a 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(())
+}