Compare commits
128 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
e38696a0ac | |
|
|
af11a50854 | |
|
|
05ef68acbc | |
|
|
78f88406cf | |
|
|
feb468b517 | |
|
|
66ae9b0de8 | |
|
|
2e52d2a77c | |
|
|
4c2e644db1 | |
|
|
f0941e9ba2 | |
|
|
ad2b55804e | |
|
|
ec3c06fa33 | |
|
|
686a5e45cb | |
|
|
cfe46e3d36 | |
|
|
5f59cb5438 | |
|
|
7c7e4f90ec | |
|
|
1c9cfd056b | |
|
|
7c77223b15 | |
|
|
00062bfcb6 | |
|
|
bf2034d13d | |
|
|
c222e5001c | |
|
|
606272ac23 | |
|
|
d237ab9aa4 | |
|
|
0ab80429ce | |
|
|
8bedbe47a7 | |
|
|
e5e7785c96 | |
|
|
3294df5d3e | |
|
|
d770030513 | |
|
|
407f2f5b5f | |
|
|
5a62acd253 | |
|
|
129340d24d | |
|
|
2ef5d483e3 | |
|
|
03b3a977aa | |
|
|
c0dc83edfc | |
|
|
f2bc6c4e6d | |
|
|
4dddba3bc6 | |
|
|
c2698882e4 | |
|
|
135d480c7d | |
|
|
e11576f260 | |
|
|
d7fb6b3235 | |
|
|
35334cdcb0 | |
|
|
b95094153f | |
|
|
6ccd9f5adf | |
|
|
1ffbc85a62 | |
|
|
60c4c0b598 | |
|
|
088212fd32 | |
|
|
d1b831a92d | |
|
|
69407018a7 | |
|
|
a481ff41ab | |
|
|
7cc2ced3b9 | |
|
|
66fbed7f6f | |
|
|
6b0ca17df0 | |
|
|
23efb39fb0 | |
|
|
9a71556b99 | |
|
|
e1ddf6e311 | |
|
|
0068315c35 | |
|
|
b839294827 | |
|
|
634c1f8c18 | |
|
|
4686ce1f12 | |
|
|
a6fd93076d | |
|
|
13531c9534 | |
|
|
77c135956d | |
|
|
23ac376f10 | |
|
|
ec6d371db8 | |
|
|
db6fd42104 | |
|
|
f2b4d82527 | |
|
|
6ba527ff98 | |
|
|
55e698a737 | |
|
|
3a778072db | |
|
|
866e5be86b | |
|
|
1c2fc2837f | |
|
|
4e0e59230b | |
|
|
6ca10cf84c | |
|
|
33505d4db1 | |
|
|
09e8c25b64 | |
|
|
ad1d73aaa1 | |
|
|
ca8101b34a | |
|
|
9dece7fe58 | |
|
|
49649c5f0c | |
|
|
6a53066b05 | |
|
|
53e5965f2d | |
|
|
999b787c92 | |
|
|
0286a50fcd | |
|
|
f7cba27f10 | |
|
|
029e53a433 | |
|
|
6d422f17e4 | |
|
|
dc380e9ed6 | |
|
|
6734baf950 | |
|
|
df87b41635 | |
|
|
7762aa687a | |
|
|
c9efc161ff | |
|
|
d86a182b6e | |
|
|
c6ac9109d7 | |
|
|
2b3af0d8c9 | |
|
|
ac0d91b682 | |
|
|
1d73537dbf | |
|
|
6bacd5fb1c | |
|
|
fbc5d0a5af | |
|
|
0e0e0d3035 | |
|
|
a9dda3d358 | |
|
|
0d55a2406c | |
|
|
f0dfe1a67f | |
|
|
b686515877 | |
|
|
a36a4c4038 | |
|
|
fbf7efa1b8 | |
|
|
4a9df8ec88 | |
|
|
6e2e0af7f9 | |
|
|
beac9c430a | |
|
|
fd91211704 | |
|
|
629a1b0c0d | |
|
|
e5cd10112c | |
|
|
1ddec65d56 | |
|
|
425ef3e10a | |
|
|
2a95e983d0 | |
|
|
c837232643 | |
|
|
de31a308f9 | |
|
|
fd1771d45c | |
|
|
cb9b999f06 | |
|
|
014c102b71 | |
|
|
fdff1d81cd | |
|
|
5c592c9a6f | |
|
|
1722ea963e | |
|
|
be755d63af | |
|
|
df1881acfa | |
|
|
2927f672fd | |
|
|
2b8928f2bd | |
|
|
dfe681d223 | |
|
|
eb91f4ec69 | |
|
|
a4e41badf1 |
|
|
@ -1,46 +0,0 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: Create a bug report to help us improve
|
||||
title: ''
|
||||
labels: bug:general
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!--- Provide a general summary of the issue in the Title above -->
|
||||
|
||||
## Expected Behavior
|
||||
<!--- Tell us what should happen -->
|
||||
|
||||
## Current Behavior
|
||||
<!--- Tell us what happens instead of the expected behavior -->
|
||||
|
||||
## Possible Solution
|
||||
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
|
||||
|
||||
## Context
|
||||
<!--- How has this issue affected you? What are you trying to accomplish? -->
|
||||
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
|
||||
|
||||
## Steps to Reproduce
|
||||
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
|
||||
<!--- reproduce this bug. Include code to reproduce, if relevant -->
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
4.
|
||||
|
||||
## Your Environment
|
||||
<!--- Include as many relevant details about the environment you experienced the bug in -->
|
||||
* Bash-it version used:
|
||||
* List of enabled plugins, themes and aliases (use ``bash-it show (plugins/themes/aliases)``):
|
||||
* ``bash-it doctor`` output:
|
||||
* Bash version:
|
||||
* Operating System and version:
|
||||
|
||||
## Your Bash Config File
|
||||
<!--- Please paste here your bash config file (.bashrc/.bash_profile) -->
|
||||
<!--- This will help us debug and locate the problem -->
|
||||
```bash
|
||||
# Your bash config file should be here
|
||||
```
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
name: 🐛 Bug report
|
||||
title: "[Bug]: "
|
||||
description: Create a bug report to help us improve
|
||||
labels: "bug:general"
|
||||
body:
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Expected behavior
|
||||
description: Tell us what should happen.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Current behavior
|
||||
description: Tell us what happens instead of the expected behavior.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Possible solution
|
||||
description: Tell us how it could be fixed at your glance.
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Context
|
||||
description: >
|
||||
How has this issue affected you? What are you trying to accomplish?
|
||||
Providing context helps us come up with a solution that is most useful in the real world.
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
description: >
|
||||
Provide a link to a live example, or an unambiguous set of steps to reproduce this bug. Include code to reproduce, if relevant.
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Bash-it version
|
||||
placeholder: "How to get: bash-it version"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: List of enabled plugins, themes and aliases
|
||||
placeholder: "How to get: bash-it show plugins|themes|aliases (it is not a pipe)"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Bash version
|
||||
placeholder: "How to get: bash --version"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Operating system and version
|
||||
placeholder: "How to get: neofetch (or another command)"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: "bash-it doctor output"
|
||||
value: |
|
||||
```
|
||||
# How to get: bash-it doctor
|
||||
```
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Your ~/.bashrc
|
||||
value: |
|
||||
```bash
|
||||
# How to get: cat ~/.bashrc
|
||||
```
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Notes
|
||||
description: >
|
||||
Provide any extra details here.
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: Libera chat
|
||||
url: https://web.libera.chat/?channel=#bash-it
|
||||
about: You can ask and answer questions here
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: feature request
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!--- Provide a general summary of the issue in the Title above -->
|
||||
|
||||
## Expected Behavior
|
||||
<!--- Tell us how your feature should work -->
|
||||
|
||||
## Current Behavior
|
||||
<!--- Explain the difference your feature will have from current behavior -->
|
||||
|
||||
## Possible Solution
|
||||
<!--- Not obligatory, but suggest ideas on how to implement the addition or change -->
|
||||
|
||||
## Context
|
||||
<!--- How has this issue affected you? What are you trying to accomplish? -->
|
||||
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
name: 💡 Feature request
|
||||
title: "[Feature]: "
|
||||
description: Suggest an idea for this project
|
||||
labels: "feature request"
|
||||
body:
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Expected behavior
|
||||
description: Tell us how your feature should work.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Current behavior
|
||||
description: Explain the difference your feature will have from current behavior.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Possible solution
|
||||
description: Tell us how it could be fixed at your glance.
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Context
|
||||
description: >
|
||||
How has this issue affected you? What are you trying to accomplish?
|
||||
Providing context helps us come up with a solution that is most useful in the real world.
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Notes
|
||||
description: >
|
||||
Provide any extra details here.
|
||||
|
|
@ -7,7 +7,7 @@ jobs:
|
|||
bats-test:
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-20.04, ubuntu-18.04, macos-10.15, macos-11]
|
||||
os: [ubuntu-20.04, ubuntu-22.04, macos-12, macos-11]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
|
|
@ -49,10 +49,17 @@ jobs:
|
|||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: 3.8
|
||||
# - name: Update APT Package Lists
|
||||
# run: sudo apt-get update
|
||||
- name: Install shfmt
|
||||
run: GO111MODULE=on go get mvdan.cc/sh/v3/cmd/shfmt
|
||||
- name: Install shellcheck
|
||||
run: brew install shellcheck
|
||||
env:
|
||||
scversion: stable # Or latest, vxx, etc
|
||||
run: |
|
||||
wget -qO- "https://github.com/koalaman/shellcheck/releases/download/${scversion?}/shellcheck-${scversion?}.linux.x86_64.tar.xz" | tar -xJv "shellcheck-${scversion}/shellcheck"
|
||||
sudo cp "shellcheck-${scversion}/shellcheck" /usr/bin/
|
||||
shellcheck --version
|
||||
- name: Install pre-commit
|
||||
run: python3 -m pip install -r test/lint-requirements.txt
|
||||
- name: Run lint
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ fi
|
|||
alias c='clear'
|
||||
alias cls='clear'
|
||||
|
||||
alias edit='${EDITOR:-${ALTERNATE_EDITOR?}}'
|
||||
alias edit='${EDITOR:-${ALTERNATE_EDITOR:-nano}}'
|
||||
alias pager='${PAGER:=less}'
|
||||
|
||||
alias q='exit'
|
||||
|
|
@ -71,10 +71,6 @@ alias rd='rmdir'
|
|||
# Shorten extract
|
||||
alias xt='extract'
|
||||
|
||||
# sudo editors
|
||||
alias svim='sudo ${VISUAL:-vim}'
|
||||
alias snano='sudo nano'
|
||||
|
||||
# Display whatever file is regular file or folder
|
||||
function catt() {
|
||||
for i in "$@"; do
|
||||
|
|
|
|||
|
|
@ -8,13 +8,18 @@ alias get='git'
|
|||
alias ga='git add'
|
||||
alias gall='git add -A'
|
||||
alias gap='git add -p'
|
||||
alias gav='git add -v'
|
||||
|
||||
# branch
|
||||
alias gb='git branch'
|
||||
alias gbD='git branch -D'
|
||||
alias gba='git branch -a'
|
||||
alias gba='git branch --all'
|
||||
alias gbd='git branch -d'
|
||||
alias gbm='git branch -m'
|
||||
alias gbD='git branch -D'
|
||||
alias gbl='git branch --list'
|
||||
alias gbla='git branch --list --all'
|
||||
alias gblr='git branch --list --remotes'
|
||||
alias gbm='git branch --move'
|
||||
alias gbr='git branch --remotes'
|
||||
alias gbt='git branch --track'
|
||||
alias gdel='git branch -D'
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
# shellcheck shell=bash
|
||||
about-alias 'kubectl aliases'
|
||||
|
||||
function _set_pkg_aliases() {
|
||||
if _command_exists kubectl; then
|
||||
if _command_exists kubectl; then
|
||||
alias kc='kubectl'
|
||||
alias kcgp='kubectl get pods'
|
||||
alias kcgd='kubectl get deployments'
|
||||
|
|
@ -14,7 +13,4 @@ function _set_pkg_aliases() {
|
|||
alias kcgdan='kubectl get deployments --all-namespaces'
|
||||
# launches a disposable netshoot pod in the k8s cluster
|
||||
alias kcnetshoot='kubectl run netshoot-$(date +%s) --rm -i --tty --image nicolaka/netshoot -- /bin/bash'
|
||||
fi
|
||||
}
|
||||
|
||||
_set_pkg_aliases
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ alias safari='open -a safari'
|
|||
alias firefox='open -a firefox'
|
||||
alias chrome='open -a "Google Chrome"'
|
||||
alias chromium='open -a chromium'
|
||||
alias brave='open -a "Brave Browser"'
|
||||
alias dashcode='open -a dashcode'
|
||||
alias f='open -a Finder '
|
||||
alias fh='open -a Finder .'
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
about-alias 'Aliases for Terraform and Terragrunt'
|
||||
|
||||
alias tf='terraform'
|
||||
alias tfi='tf init'
|
||||
alias tfv='terraform validate'
|
||||
alias tfp='terraform plan'
|
||||
alias tfa='terraform apply'
|
||||
|
|
|
|||
|
|
@ -51,8 +51,6 @@ if [[ -n "${BASH_IT_THEME:-}" ]]; then
|
|||
source "${BASH_IT}/themes/githelpers.theme.bash"
|
||||
BASH_IT_LOG_PREFIX="themes: p4helpers: "
|
||||
source "${BASH_IT}/themes/p4helpers.theme.bash"
|
||||
BASH_IT_LOG_PREFIX="themes: command_duration: "
|
||||
source "${BASH_IT}/themes/command_duration.theme.bash"
|
||||
BASH_IT_LOG_PREFIX="themes: base: "
|
||||
source "${BASH_IT}/themes/base.theme.bash"
|
||||
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ lint_clean_files.sh
|
|||
#
|
||||
completion/available/apm.completion.bash
|
||||
completion/available/awless.completion.bash
|
||||
completion/available/awscli.completion.bash
|
||||
completion/available/bash-it.completion.bash
|
||||
completion/available/brew.completion.bash
|
||||
completion/available/cargo.completion.bash
|
||||
|
|
@ -45,6 +46,7 @@ completion/available/dmidecode.completion.bash
|
|||
completion/available/docker-machine.completion.bash
|
||||
completion/available/docker.completion.bash
|
||||
completion/available/dotnet.completion.bash
|
||||
completion/available/flutter.completion.bash
|
||||
completion/available/gcloud.completion.bash
|
||||
completion/available/gem.completion.bash
|
||||
completion/available/git.completion.bash
|
||||
|
|
@ -74,9 +76,12 @@ completion/available/system.completion.bash
|
|||
completion/available/vault.completion.bash
|
||||
completion/available/vuejs.completion.bash
|
||||
completion/available/wpscan.completion.bash
|
||||
completion/available/yarn.completion.bash
|
||||
|
||||
# libraries
|
||||
lib/appearance.bash
|
||||
lib/colors.bash
|
||||
lib/command_duration.bash
|
||||
lib/helpers.bash
|
||||
lib/history.bash
|
||||
lib/log.bash
|
||||
|
|
@ -134,10 +139,9 @@ plugins/available/zoxide.plugin.bash
|
|||
|
||||
# tests
|
||||
#
|
||||
test/plugins/alias-completion.plugin.bats
|
||||
test/completion/aliases.completion.bats
|
||||
test/run
|
||||
test/test_helper.bash
|
||||
test/test_helper_libs.bash
|
||||
|
||||
# themes
|
||||
#
|
||||
|
|
@ -155,11 +159,13 @@ themes/bobby-python
|
|||
themes/brainy
|
||||
themes/brunton
|
||||
themes/candy
|
||||
themes/command_duration.theme.bash
|
||||
themes/easy
|
||||
themes/essential
|
||||
themes/githelpers.theme.bash
|
||||
themes/modern
|
||||
themes/norbu
|
||||
themes/oh-my-posh
|
||||
themes/p4helpers.theme.bash
|
||||
themes/pete
|
||||
themes/powerline
|
||||
themes/pure
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ function _bash-it-component-completion-callback-on-init-aliases() {
|
|||
fi
|
||||
|
||||
# skip aliases to pipes, boolean control structures and other command lists
|
||||
chars='\|\&\;\)\(\n\<\>'
|
||||
chars=$'|&;()<>\n'
|
||||
if [[ "${alias_defn}" =~ [$chars] ]]; then
|
||||
continue
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
# shellcheck shell=bash
|
||||
|
||||
if _command_exists aws_completer
|
||||
then
|
||||
if _command_exists aws_completer; then
|
||||
complete -C "$(command -v aws_completer)" aws
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -14,17 +14,17 @@ fi
|
|||
_bash_it_homebrew_check || return 0
|
||||
|
||||
if [[ -r "$BASH_IT_HOMEBREW_PREFIX/etc/bash_completion.d/brew" ]]; then
|
||||
# shellcheck disable=1090
|
||||
# shellcheck disable=1090,1091
|
||||
source "$BASH_IT_HOMEBREW_PREFIX/etc/bash_completion.d/brew"
|
||||
|
||||
elif [[ -r "$BASH_IT_HOMEBREW_PREFIX/Library/Contributions/brew_bash_completion.sh" ]]; then
|
||||
# shellcheck disable=1090
|
||||
# shellcheck disable=1090,1091
|
||||
source "$BASH_IT_HOMEBREW_PREFIX/Library/Contributions/brew_bash_completion.sh"
|
||||
|
||||
elif [[ -f "$BASH_IT_HOMEBREW_PREFIX/completions/bash/brew" ]]; then
|
||||
# For the git-clone based installation, see here for more info:
|
||||
# https://github.com/Bash-it/bash-it/issues/1458
|
||||
# https://docs.brew.sh/Shell-Completion
|
||||
# shellcheck disable=1090
|
||||
# shellcheck disable=1090,1091
|
||||
source "$BASH_IT_HOMEBREW_PREFIX/completions/bash/brew"
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
#
|
||||
# Bash completion support for Fabric (http://fabfile.org/)
|
||||
#
|
||||
|
|
@ -91,7 +91,7 @@ function __fab_completion() {
|
|||
-*)
|
||||
if [[ -z "${__FAB_COMPLETION_LONG_OPT}" ]]; then
|
||||
export __FAB_COMPLETION_LONG_OPT=$(
|
||||
fab --help | egrep -o "\-\-[A-Za-z_\-]+\=?" | sort -u)
|
||||
fab --help | grep -E -o "\-\-[A-Za-z_\-]+\=?" | sort -u)
|
||||
fi
|
||||
opts="${__FAB_COMPLETION_LONG_OPT}"
|
||||
;;
|
||||
|
|
@ -101,7 +101,7 @@ function __fab_completion() {
|
|||
# -*)
|
||||
# if [[ -z "${__FAB_COMPLETION_SHORT_OPT}" ]]; then
|
||||
# export __FAB_COMPLETION_SHORT_OPT=$(
|
||||
# fab --help | egrep -o "^ +\-[A-Za-z_\]" | sort -u)
|
||||
# fab --help | grep -E -o "^ +\-[A-Za-z_\]" | sort -u)
|
||||
# fi
|
||||
# opts="${__FAB_COMPLETION_SHORT_OPT}"
|
||||
# ;;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/bash
|
||||
# shellcheck shell=bash
|
||||
|
||||
if _command_exists flutter; then
|
||||
eval "$(flutter bash-completion)"
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
# shellcheck shell=bash
|
||||
|
||||
# Copyright (c) 2017 Eric Wendelin
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
|
|
@ -66,7 +68,7 @@ __gradle-generate-script-cache() {
|
|||
|
||||
if [[ ! $(find $cache_dir/$cache_name -mmin -$cache_ttl_mins 2>/dev/null) ]]; then
|
||||
# Cache all Gradle scripts
|
||||
local gradle_build_scripts=$(find $project_root_dir -type f -name "*.gradle" -o -name "*.gradle.kts" 2>/dev/null | egrep -v "$script_exclude_pattern")
|
||||
local gradle_build_scripts=$(find $project_root_dir -type f -name "*.gradle" -o -name "*.gradle.kts" 2>/dev/null | grep -E -v "$script_exclude_pattern")
|
||||
printf "%s\n" "${gradle_build_scripts[@]}" > $cache_dir/$cache_name
|
||||
fi
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
# shellcheck shell=bash
|
||||
|
||||
# Bash completion for Makefile
|
||||
# Loosely adapted from http://stackoverflow.com/a/38415982/1472048
|
||||
|
||||
|
|
@ -17,7 +19,7 @@ _makecomplete() {
|
|||
for f in "${files[@]}" ; do
|
||||
while IFS='' read -r line ; do
|
||||
targets+=("$line")
|
||||
done < <(grep -oE '^[a-zA-Z0-9_-]+:([^=]|$)' "$f" | cut -d':' -f1)
|
||||
done < <(grep -E -o '^[a-zA-Z0-9_-]+:([^=]|$)' "$f" | cut -d':' -f1)
|
||||
done
|
||||
|
||||
[ "${#targets[@]}" -eq 0 ] && return 0
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ _is_function _rl_enabled ||
|
|||
_pj() {
|
||||
_is_function _init_completion || return
|
||||
_is_function _rl_enabled || return
|
||||
[ -n "$PROJECT_PATHS" ] || return
|
||||
[ -n "$BASH_IT_PROJECT_PATHS" ] || return
|
||||
shift
|
||||
[ "$1" == "open" ] && shift
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ _pj() {
|
|||
local -r mark_dirs=$(_rl_enabled mark-directories && echo y)
|
||||
local -r mark_symdirs=$(_rl_enabled mark-symlinked-directories && echo y)
|
||||
|
||||
for i in ${PROJECT_PATHS//:/$'\n'}; do
|
||||
for i in ${BASH_IT_PROJECT_PATHS//:/$'\n'}; do
|
||||
# create an array of matched subdirs
|
||||
k="${#COMPREPLY[@]}"
|
||||
for j in $( compgen -d $i/$cur ); do
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
# shellcheck shell=bash
|
||||
about-completion "yarn cli completions"
|
||||
|
||||
# shellcheck disable=SC1090 source=../../vendor/github.com/dsifford/yarn-completion/yarn
|
||||
source "${BASH_IT}/vendor/github.com/dsifford/yarn-completion/yarn"
|
||||
|
|
@ -4,7 +4,6 @@
|
|||

|
||||

|
||||

|
||||
[](https://web.libera.chat/?channel=#bash-it)
|
||||
|
||||
**Bash-it** is a collection of community Bash commands and scripts for Bash 3.2+.
|
||||
(And a shameless ripoff of [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh) :smiley:)
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@
|
|||
# import sys
|
||||
# sys.path.insert(0, os.path.abspath('.'))
|
||||
|
||||
|
||||
# -- Project information -----------------------------------------------------
|
||||
|
||||
project = 'Bash-it'
|
||||
|
|
@ -24,7 +23,6 @@ author = 'Bash-it Team'
|
|||
# The full version, including alpha/beta/rc tags
|
||||
release = ''
|
||||
|
||||
|
||||
# -- General configuration ---------------------------------------------------
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
|
|
@ -41,8 +39,7 @@ templates_path = ['_templates']
|
|||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
# This pattern also affects html_static_path and html_extra_path.
|
||||
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
||||
|
||||
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', "venv"]
|
||||
|
||||
# -- Options for HTML output -------------------------------------------------
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
sphinx==3.2.1
|
||||
sphinx==4.5.0
|
||||
sphinx-rtd-theme==0.5.0
|
||||
sphinxemoji==0.1.8
|
||||
docutils==0.17.1
|
||||
|
|
|
|||
|
|
@ -8,13 +8,35 @@ A minimal theme with a clean git prompt
|
|||
Provided Information
|
||||
--------------------
|
||||
|
||||
|
||||
* Current git remote tool logo (support: github, gitlab, bitbucket)
|
||||
* Current path (red when user is root)
|
||||
* Current git info
|
||||
* Last command exit code (only shown when the exit code is greater than 0)
|
||||
* user@hostname for ssh connection
|
||||
|
||||
Default configuration
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
BARBUK_PROMPT="git-uptream-remote-logo ssh path scm python_venv ruby node terraform cloud duration exit"
|
||||
|
||||
You can override BARBUK_PROMPT to display only the desired information.
|
||||
|
||||
available block:
|
||||
|
||||
* git-uptream-remote-logo
|
||||
* ssh
|
||||
* path
|
||||
* scm
|
||||
* python_venv
|
||||
* ruby
|
||||
* node
|
||||
* terraform
|
||||
* cloud
|
||||
* duration
|
||||
* exit
|
||||
|
||||
Fonts and glyphs
|
||||
----------------
|
||||
|
||||
|
|
@ -39,6 +61,12 @@ Default theme glyphs
|
|||
BARBUK_EXIT_CODE_ICON=' '
|
||||
BARBUK_PYTHON_VENV_CHAR=' '
|
||||
BARBUK_COMMAND_DURATION_ICON=' '
|
||||
BARBUK_RUBY_CHAR=' '
|
||||
BARBUK_NODE_CHAR=' '
|
||||
BARBUK_TERRAFORM_CHAR="❲t❳ "
|
||||
BARBUK_AWS_PROFILE_CHAR=" aws "
|
||||
BARBUK_SCALEWAY_PROFILE_CHAR=" scw "
|
||||
BARBUK_GCLOUD_CHAR=" gcp "
|
||||
|
||||
Customize glyphs
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -346,6 +346,19 @@ NWinkler
|
|||
:alt:
|
||||
|
||||
|
||||
----
|
||||
|
||||
.. _oh_my_posh_image:
|
||||
|
||||
Oh-My-Posh
|
||||
^^^^^^^^^^
|
||||
|
||||
|
||||
.. image:: https://bash-it.github.io/bash-it/docs/images/oh-my-posh.png
|
||||
:target: https://bash-it.github.io/bash-it/docs/images/oh-my-posh.png
|
||||
:alt:
|
||||
|
||||
|
||||
----
|
||||
|
||||
Pete
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
.. _oh-my-posh:
|
||||
|
||||
Oh-My-Posh Theme
|
||||
================
|
||||
|
||||
The oh-my-posh ״theme״ is really a plug to a whole other system
|
||||
of managing your prompt. To use it please start here:
|
||||
`Oh-My-Posh homepage <https://ohmyposh.dev/>`_
|
||||
|
||||
It is beyond the scope of bash-it to install and manage oh-my-posh,
|
||||
this theme is here just to make sure your OMP setup doesn't clash
|
||||
with other bash-it themes. Once installed, OMP will load a default
|
||||
OMP theme (jandedobbeleer), which you can then customize or override.
|
||||
|
||||
Note: Nerd Fonts are highly recommended, as most of the themes are graphic candies.
|
||||
|
|
@ -8,9 +8,38 @@ Table of Contents
|
|||
|
||||
* `I'm stuck in the LightDM login screen after setting up bash-it. <im-stuck-in-the-lightdm-login-screen-after-setting-up-bash-it>`_
|
||||
|
||||
* `I'm getting strange line break and wrapping behaviour on macOS. <im-getting-strange-line-break-and-wrapping-behaviour-on-macos>`_
|
||||
|
||||
I'm stuck in the LightDM login screen after setting up bash-it
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Possible issue**\ : `#672 <https://github.com/Bash-it/bash-it/issues/672>`_
|
||||
|
||||
**Solution**\ : Check `this comment <https://github.com/Bash-it/bash-it/issues/672#issuecomment-257870653>`_ for detailed information about the cause and solution for this issue.
|
||||
|
||||
I'm getting strange line break and wrapping behaviour on macOS
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Possible issue**\ : `#1614 <https://github.com/Bash-it/bash-it/issues/1614>`_
|
||||
|
||||
**Solution**\ : Bash-it requires Bash 4.?? or later to run correctly. Any reasonably current Linux distribution should have shipped with a compatible version of Bash. However, macOS users must upgrade from the included, obsolete Bash version 3. While some functionality might work with Bash 3, there is no guarantee that everything will work perfectly. Thus, we recommend using `Homebrew <https://brew.sh/>`_ to ensure Bash is up to date:
|
||||
|
||||
x86 Mac
|
||||
^^^^^^^
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
brew install bash
|
||||
sudo sh -c 'echo /usr/local/bin/bash >> /etc/shells'
|
||||
chsh -s /usr/local/bin/bash
|
||||
|
||||
M1 Mac
|
||||
^^^^^^
|
||||
|
||||
Homebrew's default installation location on M1 is ``/opt/homebrew/bin/``:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
brew install bash
|
||||
sudo sh -c 'echo /opt/homebrew/bin/bash >> /etc/shells'
|
||||
chsh -s /opt/homebrew/bin/bash
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ function _bash-it_show_usage() {
|
|||
echo "--no-modify-config (-n): Do not modify existing config file"
|
||||
echo "--append-to-config (-a): Keep existing config file and append bash-it templates at the end"
|
||||
echo "--overwrite-backup (-f): Overwrite existing backup"
|
||||
exit 0
|
||||
}
|
||||
|
||||
# enable a thing
|
||||
|
|
|
|||
|
|
@ -1,16 +1,15 @@
|
|||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
|
||||
# colored ls
|
||||
export LSCOLORS='Gxfxcxdxdxegedabagacad'
|
||||
: "${CLICOLOR:=$(tput colors)}"
|
||||
export CLICOLOR
|
||||
|
||||
if [[ -z "$CUSTOM_THEME_DIR" ]]; then
|
||||
CUSTOM_THEME_DIR="${BASH_IT_CUSTOM:=${BASH_IT}/custom}/themes"
|
||||
fi
|
||||
: "${CUSTOM_THEME_DIR:="${BASH_IT_CUSTOM:=${BASH_IT}/custom}/themes"}"
|
||||
|
||||
# Load the theme
|
||||
if [[ $BASH_IT_THEME ]]; then
|
||||
if [[ -f $BASH_IT_THEME ]]; then
|
||||
source $BASH_IT_THEME
|
||||
# shellcheck disable=SC1090
|
||||
if [[ -n "${BASH_IT_THEME:-}" ]]; then
|
||||
if [[ -f "${BASH_IT_THEME}" ]]; then
|
||||
source "${BASH_IT_THEME}"
|
||||
elif [[ -f "$CUSTOM_THEME_DIR/$BASH_IT_THEME/$BASH_IT_THEME.theme.bash" ]]; then
|
||||
source "$CUSTOM_THEME_DIR/$BASH_IT_THEME/$BASH_IT_THEME.theme.bash"
|
||||
else
|
||||
|
|
|
|||
|
|
@ -0,0 +1,76 @@
|
|||
# shellcheck shell=bash
|
||||
#
|
||||
# Functions for measuring and reporting how long a command takes to run.
|
||||
|
||||
# Get shell duration in decimal format regardless of runtime locale.
|
||||
# Notice: This function runs as a sub-shell - notice '(' vs '{'.
|
||||
function _shell_duration_en() (
|
||||
# DFARREL You would think LC_NUMERIC would do it, but not working in my local
|
||||
LC_ALL='en_US.UTF-8'
|
||||
printf "%s" "${EPOCHREALTIME:-$SECONDS}"
|
||||
)
|
||||
|
||||
: "${COMMAND_DURATION_START_SECONDS:=$(_shell_duration_en)}"
|
||||
: "${COMMAND_DURATION_ICON:=🕘}"
|
||||
: "${COMMAND_DURATION_MIN_SECONDS:=1}"
|
||||
|
||||
function _command_duration_pre_exec() {
|
||||
COMMAND_DURATION_START_SECONDS="$(_shell_duration_en)"
|
||||
}
|
||||
|
||||
function _command_duration_pre_cmd() {
|
||||
COMMAND_DURATION_START_SECONDS=""
|
||||
}
|
||||
|
||||
function _dynamic_clock_icon {
|
||||
local clock_hand
|
||||
# clock hand value is between 90 and 9b in hexadecimal.
|
||||
# so between 144 and 155 in base 10.
|
||||
printf -v clock_hand '%x' $(((${1:-${SECONDS}} % 12) + 144))
|
||||
printf -v 'COMMAND_DURATION_ICON' '%b' "\xf0\x9f\x95\x$clock_hand"
|
||||
}
|
||||
|
||||
function _command_duration() {
|
||||
[[ -n "${BASH_IT_COMMAND_DURATION:-}" ]] || return
|
||||
[[ -n "${COMMAND_DURATION_START_SECONDS:-}" ]] || return
|
||||
|
||||
local command_duration=0 command_start="${COMMAND_DURATION_START_SECONDS:-0}"
|
||||
local -i minutes=0 seconds=0 deciseconds=0
|
||||
local -i command_start_seconds="${command_start%.*}"
|
||||
local -i command_start_deciseconds=$((10#${command_start##*.}))
|
||||
command_start_deciseconds="${command_start_deciseconds:0:1}"
|
||||
local current_time
|
||||
current_time="$(_shell_duration_en)"
|
||||
local -i current_time_seconds="${current_time%.*}"
|
||||
local -i current_time_deciseconds="$((10#${current_time##*.}))"
|
||||
current_time_deciseconds="${current_time_deciseconds:0:1}"
|
||||
|
||||
if [[ "${command_start_seconds:-0}" -gt 0 ]]; then
|
||||
# seconds
|
||||
command_duration="$((current_time_seconds - command_start_seconds))"
|
||||
|
||||
if ((current_time_deciseconds >= command_start_deciseconds)); then
|
||||
deciseconds="$((current_time_deciseconds - command_start_deciseconds))"
|
||||
else
|
||||
((command_duration -= 1))
|
||||
deciseconds="$((10 - (command_start_deciseconds - current_time_deciseconds)))"
|
||||
fi
|
||||
else
|
||||
command_duration=0
|
||||
fi
|
||||
|
||||
if ((command_duration >= COMMAND_DURATION_MIN_SECONDS)); then
|
||||
minutes=$((command_duration / 60))
|
||||
seconds=$((command_duration % 60))
|
||||
|
||||
_dynamic_clock_icon "${command_duration}"
|
||||
if ((minutes > 0)); then
|
||||
printf "%s %s%dm %ds" "${COMMAND_DURATION_ICON:-}" "${COMMAND_DURATION_COLOR:-}" "$minutes" "$seconds"
|
||||
else
|
||||
printf "%s %s%d.%01ds" "${COMMAND_DURATION_ICON:-}" "${COMMAND_DURATION_COLOR:-}" "$seconds" "$deciseconds"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
_bash_it_library_finalize_hook+=("safe_append_preexec '_command_duration_pre_exec'")
|
||||
_bash_it_library_finalize_hook+=("safe_append_prompt_command '_command_duration_pre_cmd'")
|
||||
|
|
@ -211,7 +211,7 @@ function _is_function() {
|
|||
_example '$ _is_function ls && echo exists'
|
||||
_group 'lib'
|
||||
local msg="${2:-Function '$1' does not exist}"
|
||||
if LC_ALL=C type -t "$1" | _bash-it-egrep -q 'function'; then
|
||||
if LC_ALL=C type -t "$1" | _bash-it-fgrep -q 'function'; then
|
||||
return 0
|
||||
else
|
||||
_log_debug "$msg"
|
||||
|
|
@ -290,6 +290,7 @@ function _bash-it-update-() {
|
|||
DIFF=$(git diff --name-status)
|
||||
if [[ -n "$DIFF" ]]; then
|
||||
echo -e "Local changes detected in bash-it directory. Clean '$BASH_IT' directory to proceed.\n$DIFF"
|
||||
popd > /dev/null || return
|
||||
return 1
|
||||
fi
|
||||
|
||||
|
|
@ -334,7 +335,7 @@ function _bash-it-update-() {
|
|||
log_color="%Cred"
|
||||
fi
|
||||
|
||||
git log --format="${log_color}%h: %s (%an)" "${revision}"
|
||||
git log --no-merges --format="${log_color}%h: %s (%an)" "${revision}"
|
||||
echo ""
|
||||
|
||||
if [[ -n "${silent}" ]]; then
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ function _bash-it-log-prefix-by-path() {
|
|||
|
||||
function _has_colors() {
|
||||
# Check that stdout is a terminal, and that it has at least 8 colors.
|
||||
[[ -t 1 && "${_bash_it_available_colors:=$(tput colors 2> /dev/null)}" -ge 8 ]]
|
||||
[[ -t 1 && "${CLICOLOR:=$(tput colors 2> /dev/null)}" -ge 8 ]]
|
||||
}
|
||||
|
||||
function _bash-it-log-message() {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ function _bash-it-preview() {
|
|||
# shellcheck disable=SC2034
|
||||
for BASH_IT_THEME in "${themes[@]}"; do
|
||||
BASH_IT_LOG_LEVEL=0
|
||||
bash --init-file "${BASH_IT_BASHRC:-${BASH_IT?}/bash_it.sh}" -i <<< '_bash-it-flash-term "${#BASH_IT_THEME}" "${BASH_IT_THEME}"'
|
||||
bash --init-file "${BASH_IT?}/bash_it.sh" -i <<< '_bash-it-flash-term "${#BASH_IT_THEME}" "${BASH_IT_THEME}"'
|
||||
done
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -347,7 +347,7 @@ function _bash-it-flash-term() {
|
|||
local -i len="${1:-0}" # redundant
|
||||
local term="${2:-}"
|
||||
# as currently implemented, `$match` has already been printed to screen the first time
|
||||
local delay=0.1
|
||||
local delay=0.2
|
||||
local color
|
||||
[[ "${#term}" -gt 0 ]] && len="${#term}"
|
||||
|
||||
|
|
|
|||
|
|
@ -60,15 +60,21 @@ function _bash-it-array-dedup() {
|
|||
printf '%s\n' "$@" | sort -u
|
||||
}
|
||||
|
||||
# Outputs a full path of the grep found on the filesystem
|
||||
# Runs `grep` with *just* the provided arguments
|
||||
function _bash-it-grep() {
|
||||
: "${BASH_IT_GREP:=$(type -p egrep || type -p grep)}"
|
||||
printf "%s" "${BASH_IT_GREP:-/usr/bin/grep}"
|
||||
: "${BASH_IT_GREP:=$(type -P grep)}"
|
||||
"${BASH_IT_GREP:-/usr/bin/grep}" "$@"
|
||||
}
|
||||
|
||||
# Runs `grep` with extended regular expressions
|
||||
# Runs `grep` with fixed-string expressions (-F)
|
||||
function _bash-it-fgrep() {
|
||||
: "${BASH_IT_GREP:=$(type -P grep)}"
|
||||
"${BASH_IT_GREP:-/usr/bin/grep}" -F "$@"
|
||||
}
|
||||
|
||||
# Runs `grep` with extended regular expressions (-E)
|
||||
function _bash-it-egrep() {
|
||||
: "${BASH_IT_GREP:=$(type -p egrep || type -p grep)}"
|
||||
: "${BASH_IT_GREP:=$(type -P grep)}"
|
||||
"${BASH_IT_GREP:-/usr/bin/grep}" -E "$@"
|
||||
}
|
||||
|
||||
|
|
@ -150,12 +156,12 @@ function _bash-it-component-list-matching() {
|
|||
|
||||
function _bash-it-component-list-enabled() {
|
||||
local IFS=$'\n' component="$1"
|
||||
_bash-it-component-help "${component}" | _bash-it-egrep '\[x\]' | awk '{print $1}' | sort -u
|
||||
_bash-it-component-help "${component}" | _bash-it-fgrep '[x]' | awk '{print $1}' | sort -u
|
||||
}
|
||||
|
||||
function _bash-it-component-list-disabled() {
|
||||
local IFS=$'\n' component="$1"
|
||||
_bash-it-component-help "${component}" | _bash-it-egrep -v '\[x\]' | awk '{print $1}' | sort -u
|
||||
_bash-it-component-help "${component}" | _bash-it-fgrep -v '[x]' | awk '{print $1}' | sort -u
|
||||
}
|
||||
|
||||
# Checks if a given item is enabled for a particular component/file-type.
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@
|
|||
# shellcheck disable=SC2002 # Prefer 'cat' for cleaner script
|
||||
mapfile -t FILES < <(
|
||||
cat clean_files.txt \
|
||||
| grep -v -E '^\s*$' \
|
||||
| grep -v -E '^\s*#' \
|
||||
| grep -E -v '^\s*$' \
|
||||
| grep -E -v '^\s*#' \
|
||||
| xargs -n1 -I{} find "{}" -type f
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
# shellcheck shell=bash
|
||||
cite about-plugin
|
||||
about-plugin 'AWS helper functions'
|
||||
|
||||
|
|
@ -40,13 +41,13 @@ function __awskeys_help {
|
|||
function __awskeys_get {
|
||||
local ln=$(grep -n "\[ *$1 *\]" "${AWS_SHARED_CREDENTIALS_FILE}" | cut -d ":" -f 1)
|
||||
if [[ -n "${ln}" ]]; then
|
||||
tail -n +${ln} "${AWS_SHARED_CREDENTIALS_FILE}" | egrep -m 2 "aws_access_key_id|aws_secret_access_key"
|
||||
tail -n +${ln} "${AWS_SHARED_CREDENTIALS_FILE}" | egrep -m 1 "aws_session_token"
|
||||
tail -n +${ln} "${AWS_SHARED_CREDENTIALS_FILE}" | grep -F -m 2 -e "aws_access_key_id" -e "aws_secret_access_key"
|
||||
tail -n +${ln} "${AWS_SHARED_CREDENTIALS_FILE}" | grep -F -m 1 "aws_session_token"
|
||||
fi
|
||||
}
|
||||
|
||||
function __awskeys_list {
|
||||
local credentials_list="$((egrep '^\[ *[a-zA-Z0-9_-]+ *\]$' "${AWS_SHARED_CREDENTIALS_FILE}"; grep "\[profile" "${AWS_CONFIG_FILE}" | sed "s|\[profile |\[|g") | sort | uniq)"
|
||||
local credentials_list="$((grep -E '^\[ *[a-zA-Z0-9_-]+ *\]$' "${AWS_SHARED_CREDENTIALS_FILE}"; grep "\[profile" "${AWS_CONFIG_FILE}" | sed "s|\[profile |\[|g") | sort | uniq)"
|
||||
if [[ -n $"{credentials_list}" ]]; then
|
||||
echo -e "Available credentials profiles:\n"
|
||||
for profile in ${credentials_list}; do
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ about-plugin 'display info about your battery charge level'
|
|||
function ac_adapter_connected() {
|
||||
local batteries
|
||||
if _command_exists upower; then
|
||||
batteries="$(upower -e | grep --max-count=1 -i BAT)"
|
||||
upower -i "${batteries}" | grep 'state' | grep -q 'charging\|fully-charged'
|
||||
IFS=$'\n' read -d '' -ra batteries < <(upower -e | grep -i BAT)
|
||||
upower -i "${batteries[0]:-}" | grep 'state' | grep -q 'charging\|fully-charged'
|
||||
elif _command_exists acpi; then
|
||||
acpi -a | grep -q "on-line"
|
||||
elif _command_exists pmset; then
|
||||
|
|
@ -20,8 +20,8 @@ function ac_adapter_connected() {
|
|||
function ac_adapter_disconnected() {
|
||||
local batteries
|
||||
if _command_exists upower; then
|
||||
batteries="$(upower -e | grep --max-count=1 -i BAT)"
|
||||
upower -i "${batteries}" | grep 'state' | grep -q 'discharging'
|
||||
IFS=$'\n' read -d '' -ra batteries < <(upower -e | grep -i BAT)
|
||||
upower -i "${batteries[0]:-}" | grep 'state' | grep -q 'discharging'
|
||||
elif _command_exists acpi; then
|
||||
acpi -a | grep -q "off-line"
|
||||
elif _command_exists pmset; then
|
||||
|
|
@ -40,8 +40,8 @@ function battery_percentage() {
|
|||
local command_output batteries
|
||||
|
||||
if _command_exists upower; then
|
||||
batteries="$(upower --enumerate | grep --max-count=1 -i BAT)"
|
||||
command_output="$(upower --show-info "${batteries:-}" | grep percentage | grep -o '[0-9]\+' | head -1)"
|
||||
IFS=$'\n' read -d '' -ra batteries < <(upower -e | grep -i BAT)
|
||||
command_output="$(upower --show-info "${batteries[0]:-}" | grep percentage | grep -o '[0-9]\+' | head -1)"
|
||||
elif _command_exists acpi; then
|
||||
command_output=$(acpi -b | awk -F, '/,/{gsub(/ /, "", $0); gsub(/%/,"", $0); print $2}')
|
||||
elif _command_exists pmset; then
|
||||
|
|
|
|||
|
|
@ -2,15 +2,16 @@
|
|||
cite about-plugin
|
||||
about-plugin 'Alert (BEL) when process ends after a threshold of seconds'
|
||||
|
||||
precmd_return_notification() {
|
||||
export LAST_COMMAND_DURATION=$(($(date +%s) - ${LAST_COMMAND_TIME:=$(date +%s)}))
|
||||
[[ ${LAST_COMMAND_DURATION} -gt ${NOTIFY_IF_COMMAND_RETURNS_AFTER:-5} ]] && echo -e "\a"
|
||||
export LAST_COMMAND_TIME=
|
||||
function precmd_return_notification() {
|
||||
local command_start="${COMMAND_DURATION_START_SECONDS:=0}"
|
||||
local current_time
|
||||
current_time="$(_shell_duration_en)"
|
||||
local -i command_duration="$((${current_time%.*} - ${command_start%.*}))"
|
||||
if [[ "${command_duration}" -gt "${NOTIFY_IF_COMMAND_RETURNS_AFTER:-5}" ]]; then
|
||||
printf '\a'
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
preexec_return_notification() {
|
||||
[[ -z "${LAST_COMMAND_TIME}" ]] && LAST_COMMAND_TIME=$(date +%s)
|
||||
}
|
||||
|
||||
precmd_functions+=(precmd_return_notification)
|
||||
preexec_functions+=(preexec_return_notification)
|
||||
safe_append_prompt_command 'precmd_return_notification'
|
||||
safe_append_preexec '_command_duration_pre_exec'
|
||||
|
|
|
|||
|
|
@ -8,13 +8,13 @@ function __() {
|
|||
function __make_ansi() {
|
||||
next=$1
|
||||
shift
|
||||
echo "\[\e[$("__$next" "$@")m\]"
|
||||
echo -e "\[\e[$("__$next" "$@")m\]"
|
||||
}
|
||||
|
||||
function __make_echo() {
|
||||
next=$1
|
||||
shift
|
||||
echo "\033[$("__$next" "$@")m"
|
||||
echo -e "\033[$("__$next" "$@")m"
|
||||
}
|
||||
|
||||
function __reset() {
|
||||
|
|
|
|||
|
|
@ -63,12 +63,15 @@ function dirs-help() {
|
|||
if [[ -f "${BASH_IT_DIRS_BKS?}" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "${BASH_IT_DIRS_BKS?}"
|
||||
elif [[ -f ~/.dirs ]]; then
|
||||
else
|
||||
mkdir -p "${BASH_IT_DIRS_BKS%/*}"
|
||||
if [[ -f ~/.dirs ]]; then
|
||||
mv -vn ~/.dirs "${BASH_IT_DIRS_BKS?}"
|
||||
# shellcheck disable=SC1090
|
||||
source "${BASH_IT_DIRS_BKS?}"
|
||||
else
|
||||
else
|
||||
touch "${BASH_IT_DIRS_BKS?}"
|
||||
fi
|
||||
fi
|
||||
|
||||
alias L='cat "${BASH_IT_DIRS_BKS?}"'
|
||||
|
|
|
|||
|
|
@ -30,8 +30,8 @@ function editpost() {
|
|||
pushd "${SITE}/_posts" > /dev/null || return
|
||||
|
||||
for POST in *; do
|
||||
DATE="$(echo "${POST}" | grep -oE "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}")"
|
||||
TITLE="$(grep -oE "title: (.+)" < "${POST}")"
|
||||
DATE="$(echo "${POST}" | grep -E -o "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}")"
|
||||
TITLE="$(grep -E -o "title: (.+)" < "${POST}")"
|
||||
TITLE="${TITLE/title: /}"
|
||||
echo "${COUNTER}) ${DATE} ${TITLE}"
|
||||
POSTS[COUNTER]="$POST"
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
# shellcheck shell=bash
|
||||
cite about-plugin
|
||||
about-plugin 'postgres helper functions'
|
||||
|
||||
|
|
@ -50,7 +51,7 @@ function postgres_status {
|
|||
|
||||
|
||||
function is_postgres_running {
|
||||
$POSTGRES_BIN/pg_ctl -D $PGDATA status | egrep -o "no server running"
|
||||
$POSTGRES_BIN/pg_ctl -D $PGDATA status | grep -F -o "no server running"
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ function pj() {
|
|||
# with the same name in project directories
|
||||
IFS=':' read -ra dests <<< "${BASH_IT_PROJECT_PATHS?${FUNCNAME[0]}: project working folders must be configured}"
|
||||
for d in "${!dests[@]}"; do
|
||||
if [[ ! -d "${dests[d]}" ]]; then
|
||||
if [[ ! -d "${dests[d]}/${proj}" ]]; then
|
||||
unset 'dests[d]'
|
||||
fi
|
||||
done
|
||||
|
|
|
|||
|
|
@ -1,19 +1,11 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
|
||||
function local_setup {
|
||||
setup_test_fixture
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
function local_setup_file() {
|
||||
# Copy the test fixture to the Bash-it folder
|
||||
if command -v rsync &> /dev/null
|
||||
then
|
||||
rsync -a "$BASH_IT/test/fixtures/bash_it/" "$BASH_IT/"
|
||||
else
|
||||
find "$BASH_IT/test/fixtures/bash_it" \
|
||||
-mindepth 1 -maxdepth 1 \
|
||||
-exec cp -r {} "$BASH_IT/" \;
|
||||
fi
|
||||
cp -fRP "${BASH_IT?}/test/fixtures/bash_it"/* "${BASH_IT?}/" || true
|
||||
# don't load any libraries as the tests here test the *whole* kit
|
||||
}
|
||||
|
||||
@test "bash-it: verify that the test fixture is available" {
|
||||
|
|
|
|||
|
|
@ -1,28 +1,30 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load ../test_helper_libs
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
# Load something, anything...
|
||||
load ../../completion/available/capistrano.completion
|
||||
function local_setup_file() {
|
||||
setup_libs "helpers"
|
||||
# Load something, anything...
|
||||
load ../../completion/available/capistrano.completion
|
||||
}
|
||||
|
||||
@test "alias-completion: See that aliases with double quotes and brackets do not break the plugin" {
|
||||
alias gtest="git log --graph --pretty=format:'%C(bold)%h%Creset%C(magenta)%d%Creset %s %C(yellow)<%an> %C(cyan)(%cr)%Creset' --abbrev-commit --date=relative"
|
||||
run load ../../completion/available/aliases.completion
|
||||
run load "${BASH_IT?}/completion/available/aliases.completion.bash"
|
||||
|
||||
assert_success
|
||||
}
|
||||
|
||||
@test "alias-completion: See that aliases with single quotes and brackets do not break the plugin" {
|
||||
alias gtest='git log --graph --pretty=format:"%C(bold)%h%Creset%C(magenta)%d%Creset %s %C(yellow)<%an> %C(cyan)(%cr)%Creset" --abbrev-commit --date=relative'
|
||||
run load ../../completion/available/aliases.completion
|
||||
run load "${BASH_IT?}/completion/available/aliases.completion.bash"
|
||||
|
||||
assert_success
|
||||
}
|
||||
|
||||
@test "alias-completion: See that having aliased rm command does not output unnecessary output" {
|
||||
alias rm='rm -v'
|
||||
run load ../../completion/available/aliases.completion
|
||||
run load "${BASH_IT?}/completion/available/aliases.completion.bash"
|
||||
|
||||
refute_output
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,17 +1,16 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load ../../lib/utilities
|
||||
load ../../lib/helpers
|
||||
load ../../completion/available/bash-it.completion
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
function local_setup {
|
||||
setup_test_fixture
|
||||
function local_setup_file() {
|
||||
setup_libs "helpers"
|
||||
load "${BASH_IT?}/completion/available/bash-it.completion.bash"
|
||||
}
|
||||
|
||||
@test "completion bash-it: ensure that the _bash-it function is available" {
|
||||
type -a _bash-it &> /dev/null
|
||||
run type -t _bash-it
|
||||
assert_success
|
||||
assert_output "function"
|
||||
}
|
||||
|
||||
function __check_completion () {
|
||||
|
|
|
|||
|
|
@ -1,19 +1,22 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
# Determine which config file to use based on OS.
|
||||
case $OSTYPE in
|
||||
function local_setup() {
|
||||
export HOME="$BATS_TEST_TMPDIR"
|
||||
}
|
||||
|
||||
function local_setup_file() {
|
||||
# Determine which config file to use based on OS.
|
||||
case $OSTYPE in
|
||||
darwin*)
|
||||
export BASH_IT_CONFIG_FILE=.bash_profile
|
||||
;;
|
||||
*)
|
||||
export BASH_IT_CONFIG_FILE=.bashrc
|
||||
;;
|
||||
esac
|
||||
|
||||
function local_setup {
|
||||
setup_test_fixture
|
||||
esac
|
||||
# don't load any libraries as the tests here test the *whole* kit
|
||||
}
|
||||
|
||||
@test "install: verify that the install script exists" {
|
||||
|
|
@ -25,7 +28,7 @@ function local_setup {
|
|||
|
||||
./install.sh --silent
|
||||
|
||||
assert_file_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
|
||||
assert_file_exist "$HOME/$BASH_IT_CONFIG_FILE"
|
||||
|
||||
assert_link_exist "$BASH_IT/enabled/150---general.aliases.bash"
|
||||
assert_link_exist "$BASH_IT/enabled/250---base.plugin.bash"
|
||||
|
|
@ -37,16 +40,16 @@ function local_setup {
|
|||
@test "install: verify that a backup file is created" {
|
||||
cd "$BASH_IT"
|
||||
|
||||
touch "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
|
||||
echo "test file content" > "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
|
||||
local md5_orig=$(md5sum "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE" | awk '{print $1}')
|
||||
touch "$HOME/$BASH_IT_CONFIG_FILE"
|
||||
echo "test file content" > "$HOME/$BASH_IT_CONFIG_FILE"
|
||||
local md5_orig=$(md5sum "$HOME/$BASH_IT_CONFIG_FILE" | awk '{print $1}')
|
||||
|
||||
./install.sh --silent
|
||||
|
||||
assert_file_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
|
||||
assert_file_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.bak"
|
||||
assert_file_exist "$HOME/$BASH_IT_CONFIG_FILE"
|
||||
assert_file_exist "$HOME/$BASH_IT_CONFIG_FILE.bak"
|
||||
|
||||
local md5_bak=$(md5sum "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.bak" | awk '{print $1}')
|
||||
local md5_bak=$(md5sum "$HOME/$BASH_IT_CONFIG_FILE.bak" | awk '{print $1}')
|
||||
|
||||
assert_equal "$md5_orig" "$md5_bak"
|
||||
}
|
||||
|
|
@ -70,15 +73,15 @@ function local_setup {
|
|||
@test "install: verify that the template is appended" {
|
||||
cd "$BASH_IT"
|
||||
|
||||
touch "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
|
||||
echo "test file content" > "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
|
||||
touch "$HOME/$BASH_IT_CONFIG_FILE"
|
||||
echo "test file content" > "$HOME/$BASH_IT_CONFIG_FILE"
|
||||
|
||||
./install.sh --silent --append-to-config
|
||||
|
||||
assert_file_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
|
||||
assert_file_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.bak"
|
||||
assert_file_exist "$HOME/$BASH_IT_CONFIG_FILE"
|
||||
assert_file_exist "$HOME/$BASH_IT_CONFIG_FILE.bak"
|
||||
|
||||
run cat $BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE
|
||||
run cat "$HOME/$BASH_IT_CONFIG_FILE"
|
||||
|
||||
assert_line "test file content"
|
||||
assert_line "source \"\$BASH_IT\"/bash_it.sh"
|
||||
|
|
|
|||
|
|
@ -1,19 +1,22 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
# Determine which config file to use based on OS.
|
||||
case $OSTYPE in
|
||||
function local_setup() {
|
||||
export HOME="$BATS_TEST_TMPDIR"
|
||||
}
|
||||
|
||||
function local_setup_file() {
|
||||
# Determine which config file to use based on OS.
|
||||
case $OSTYPE in
|
||||
darwin*)
|
||||
export BASH_IT_CONFIG_FILE=.bash_profile
|
||||
;;
|
||||
*)
|
||||
export BASH_IT_CONFIG_FILE=.bashrc
|
||||
;;
|
||||
esac
|
||||
|
||||
function local_setup {
|
||||
setup_test_fixture
|
||||
esac
|
||||
# don't load any libraries as the tests here test the *whole* kit
|
||||
}
|
||||
|
||||
@test "uninstall: verify that the uninstall script exists" {
|
||||
|
|
@ -23,19 +26,18 @@ function local_setup {
|
|||
@test "uninstall: run the uninstall script with an existing backup file" {
|
||||
cd "$BASH_IT"
|
||||
|
||||
echo "test file content for backup" > "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.bak"
|
||||
echo "test file content for original file" > "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
|
||||
local md5_bak=$(md5sum "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.bak" | awk '{print $1}')
|
||||
|
||||
./uninstall.sh
|
||||
echo "test file content for backup" > "$HOME/$BASH_IT_CONFIG_FILE.bak"
|
||||
echo "test file content for original file" > "$HOME/$BASH_IT_CONFIG_FILE"
|
||||
local md5_bak=$(md5sum "$HOME/$BASH_IT_CONFIG_FILE.bak" | awk '{print $1}')
|
||||
|
||||
run ./uninstall.sh
|
||||
assert_success
|
||||
|
||||
assert_file_not_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.uninstall"
|
||||
assert_file_not_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.bak"
|
||||
assert_file_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
|
||||
assert_file_not_exist "$HOME/$BASH_IT_CONFIG_FILE.uninstall"
|
||||
assert_file_not_exist "$HOME/$BASH_IT_CONFIG_FILE.bak"
|
||||
assert_file_exist "$HOME/$BASH_IT_CONFIG_FILE"
|
||||
|
||||
local md5_conf=$(md5sum "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE" | awk '{print $1}')
|
||||
local md5_conf=$(md5sum "$HOME/$BASH_IT_CONFIG_FILE" | awk '{print $1}')
|
||||
|
||||
assert_equal "$md5_bak" "$md5_conf"
|
||||
}
|
||||
|
|
@ -43,18 +45,17 @@ function local_setup {
|
|||
@test "uninstall: run the uninstall script without an existing backup file" {
|
||||
cd "$BASH_IT"
|
||||
|
||||
echo "test file content for original file" > "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
|
||||
local md5_orig=$(md5sum "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE" | awk '{print $1}')
|
||||
|
||||
./uninstall.sh
|
||||
echo "test file content for original file" > "$HOME/$BASH_IT_CONFIG_FILE"
|
||||
local md5_orig=$(md5sum "$HOME/$BASH_IT_CONFIG_FILE" | awk '{print $1}')
|
||||
|
||||
run ./uninstall.sh
|
||||
assert_success
|
||||
|
||||
assert_file_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.uninstall"
|
||||
assert_file_not_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.bak"
|
||||
assert_file_not_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
|
||||
assert_file_exist "$HOME/$BASH_IT_CONFIG_FILE.uninstall"
|
||||
assert_file_not_exist "$HOME/$BASH_IT_CONFIG_FILE.bak"
|
||||
assert_file_not_exist "$HOME/$BASH_IT_CONFIG_FILE"
|
||||
|
||||
local md5_uninstall=$(md5sum "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.uninstall" | awk '{print $1}')
|
||||
local md5_uninstall=$(md5sum "$HOME/$BASH_IT_CONFIG_FILE.uninstall" | awk '{print $1}')
|
||||
|
||||
assert_equal "$md5_orig" "$md5_uninstall"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,11 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
function local_setup_file() {
|
||||
true
|
||||
# don't load any libraries as the tests here test the *whole* kit
|
||||
}
|
||||
|
||||
@test "lib composure: _composure_keywords()" {
|
||||
run _composure_keywords
|
||||
|
|
|
|||
|
|
@ -1,21 +1,15 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load ../test_helper_libs
|
||||
load ../../plugins/available/base.plugin
|
||||
load ../../lib/colors
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
function local_setup {
|
||||
setup_test_fixture
|
||||
function local_setup_file() {
|
||||
setup_libs "colors"
|
||||
load "${BASH_IT?}/plugins/available/base.plugin.bash"
|
||||
}
|
||||
|
||||
function local_setup() {
|
||||
# Copy the test fixture to the Bash-it folder
|
||||
if command -v rsync &> /dev/null; then
|
||||
rsync -a "$BASH_IT/test/fixtures/bash_it/" "$BASH_IT/"
|
||||
else
|
||||
find "$BASH_IT/test/fixtures/bash_it" \
|
||||
-mindepth 1 -maxdepth 1 \
|
||||
-exec cp -r {} "$BASH_IT/" \;
|
||||
fi
|
||||
cp -RP "$BASH_IT/test/fixtures/bash_it"/* "$BASH_IT/"
|
||||
}
|
||||
|
||||
# TODO Create global __is_enabled function
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load ../../lib/colors
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
load ../../lib/log
|
||||
load ../../lib/helpers
|
||||
load ../../plugins/available/base.plugin
|
||||
function local_setup_file() {
|
||||
setup_libs "log"
|
||||
}
|
||||
|
||||
@test "lib log: basic debug logging with BASH_IT_LOG_LEVEL_ALL" {
|
||||
BASH_IT_LOG_LEVEL=$BASH_IT_LOG_LEVEL_ALL
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ function local_setup {
|
|||
|
||||
@test "lib preexec: __check_precmd_conflict()" {
|
||||
test_precmd_function_name="test"
|
||||
load ../test_helper_libs
|
||||
setup_libs "preexec"
|
||||
|
||||
run __check_precmd_conflict "$test_precmd_function_name"
|
||||
assert_failure
|
||||
|
|
@ -124,7 +124,7 @@ function local_setup {
|
|||
|
||||
@test "lib preexec: __check_preexec_conflict()" {
|
||||
test_preexec_function_name="test"
|
||||
load ../test_helper_libs
|
||||
setup_libs "preexec"
|
||||
|
||||
run __check_preexec_conflict "$test_preexec_function_name"
|
||||
assert_failure
|
||||
|
|
@ -137,7 +137,7 @@ function local_setup {
|
|||
|
||||
@test "lib preexec: safe_append_prompt_command()" {
|
||||
test_precmd_function_name="test"
|
||||
load ../test_helper_libs
|
||||
setup_libs "preexec"
|
||||
|
||||
export precmd_functions=()
|
||||
assert_equal "${precmd_functions[*]}" ""
|
||||
|
|
@ -151,7 +151,7 @@ function local_setup {
|
|||
|
||||
@test "lib preexec: safe_append_preexec()" {
|
||||
test_preexec_function_name="test"
|
||||
load ../test_helper_libs
|
||||
setup_libs "preexec"
|
||||
|
||||
export preexec_functions=()
|
||||
assert_equal "${preexec_functions[*]}" ""
|
||||
|
|
|
|||
|
|
@ -1,28 +1,14 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load ../test_helper_libs
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
load ../../plugins/available/base.plugin
|
||||
load ../../aliases/available/git.aliases
|
||||
load ../../plugins/available/ruby.plugin
|
||||
load ../../plugins/available/rails.plugin
|
||||
load ../../completion/available/bundler.completion
|
||||
load ../../completion/available/gem.completion
|
||||
load ../../completion/available/rake.completion
|
||||
|
||||
load ../../lib/helpers
|
||||
|
||||
function local_setup {
|
||||
setup_test_fixture
|
||||
|
||||
export OLD_PATH="$PATH"
|
||||
export PATH="/usr/bin:/bin:/usr/sbin"
|
||||
function local_setup_file() {
|
||||
setup_libs "search"
|
||||
}
|
||||
|
||||
function local_teardown {
|
||||
export PATH="$OLD_PATH"
|
||||
unset OLD_PATH
|
||||
function local_setup() {
|
||||
# shellcheck disable=SC2034
|
||||
BASH_IT_SEARCH_USE_COLOR=false
|
||||
}
|
||||
|
||||
@test "search: plugin base" {
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load ../test_helper_libs
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
function local_setup {
|
||||
setup_test_fixture
|
||||
function local_setup_file() {
|
||||
setup_libs "helpers"
|
||||
}
|
||||
|
||||
@test "_bash-it-component-item-is-enabled() - for a disabled item" {
|
||||
|
|
|
|||
|
|
@ -1,14 +1,13 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load ../test_helper_libs
|
||||
load ../../plugins/available/base.plugin
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
function local_setup_file() {
|
||||
setup_libs "helpers"
|
||||
load "${BASH_IT?}/plugins/available/base.plugin.bash"
|
||||
}
|
||||
|
||||
@test 'plugins base: ips()' {
|
||||
if [[ $CI ]]; then
|
||||
skip 'ifconfig probably requires sudo on TravisCI'
|
||||
fi
|
||||
|
||||
declare -r localhost='127.0.0.1'
|
||||
run ips
|
||||
assert_success
|
||||
|
|
@ -23,7 +22,7 @@ load ../../plugins/available/base.plugin
|
|||
}
|
||||
|
||||
@test 'plugins base: pickfrom()' {
|
||||
stub_file="${BASH_IT_ROOT}/stub_file"
|
||||
stub_file="${BATS_TEST_TMPDIR}/stub_file"
|
||||
printf "l1\nl2\nl3" > $stub_file
|
||||
run pickfrom $stub_file
|
||||
assert_success
|
||||
|
|
@ -31,28 +30,30 @@ load ../../plugins/available/base.plugin
|
|||
}
|
||||
|
||||
@test 'plugins base: mkcd()' {
|
||||
cd "${BASH_IT_ROOT}"
|
||||
cd "${BATS_TEST_TMPDIR}"
|
||||
declare -r dir_name="-dir_with_dash"
|
||||
|
||||
# Make sure that the directory does not exist prior to the test
|
||||
rm -rf "${BASH_IT_ROOT}/${dir_name}"
|
||||
rm -rf "${BATS_TEST_TMPDIR}/${dir_name}"
|
||||
|
||||
run mkcd "${dir_name}"
|
||||
assert_success
|
||||
assert_dir_exist "${BATS_TEST_TMPDIR}/${dir_name}"
|
||||
|
||||
mkcd "${dir_name}"
|
||||
assert_success
|
||||
assert_dir_exist "${BASH_IT_ROOT}/${dir_name}"
|
||||
assert_equal "${PWD}" "${BASH_IT_ROOT//\/\///}/${dir_name}"
|
||||
assert_equal "${PWD}" "${BATS_TEST_TMPDIR//\/\///}/${dir_name}"
|
||||
}
|
||||
|
||||
@test 'plugins base: lsgrep()' {
|
||||
for i in 1 2 3; do mkdir -p "${BASH_IT_TEST_DIR}/${i}"; done
|
||||
cd $BASH_IT_TEST_DIR
|
||||
for i in 1 2 3; do mkdir -p "${BASH_IT}/${i}"; done
|
||||
cd $BASH_IT
|
||||
run lsgrep 2
|
||||
assert_success
|
||||
assert_equal $output 2
|
||||
}
|
||||
|
||||
@test 'plugins base: buf()' {
|
||||
declare -r file="${BASH_IT_ROOT}/file"
|
||||
declare -r file="${BATS_TEST_TMPDIR}/file"
|
||||
touch $file
|
||||
|
||||
# Take one timestamp before running the `buf` function
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load ../test_helper_libs
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
load ../../plugins/available/battery.plugin
|
||||
function local_setup_file() {
|
||||
setup_libs "helpers"
|
||||
load "${BASH_IT?}/plugins/available/battery.plugin.bash"
|
||||
}
|
||||
|
||||
# Sets up the `_command_exists` function so that it only responds `true` if called with
|
||||
# the name of the function that was passed in as an argument to `setup_command_exists`.
|
||||
|
|
@ -199,8 +201,7 @@ function setup_upower {
|
|||
function upower {
|
||||
case $1 in
|
||||
'-e'|'--enumerate')
|
||||
# don't just `echo` twice because `grep` will close the pipe after matching the first line...
|
||||
echo "$BAT0"$'\n'"/org/freedesktop/UPower/devices/mouse_hid_${RANDOM}_battery"
|
||||
printf '%s\n' "$BAT0" "/org/freedesktop/UPower/devices/mouse_hid_${RANDOM}_battery"
|
||||
;;
|
||||
'-i'|'--show-info')
|
||||
if [[ $2 == "$BAT0" ]]
|
||||
|
|
|
|||
|
|
@ -1,13 +1,15 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load ../test_helper_libs
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
load ../../plugins/available/cmd-returned-notify.plugin
|
||||
function local_setup_file() {
|
||||
setup_libs "command_duration"
|
||||
load "${BASH_IT?}/plugins/available/cmd-returned-notify.plugin.bash"
|
||||
}
|
||||
|
||||
@test "plugins cmd-returned-notify: notify after elapsed time" {
|
||||
export NOTIFY_IF_COMMAND_RETURNS_AFTER=0
|
||||
export LAST_COMMAND_TIME=$(date +%s)
|
||||
export COMMAND_DURATION_START_SECONDS="$(_shell_duration_en)"
|
||||
sleep 1
|
||||
run precmd_return_notification
|
||||
assert_success
|
||||
|
|
@ -16,31 +18,24 @@ load ../../plugins/available/cmd-returned-notify.plugin
|
|||
|
||||
@test "plugins cmd-returned-notify: do not notify before elapsed time" {
|
||||
export NOTIFY_IF_COMMAND_RETURNS_AFTER=10
|
||||
export LAST_COMMAND_TIME=$(date +%s)
|
||||
export COMMAND_DURATION_START_SECONDS="$(_shell_duration_en)"
|
||||
sleep 1
|
||||
run precmd_return_notification
|
||||
assert_success
|
||||
assert_output $''
|
||||
}
|
||||
|
||||
@test "plugins cmd-returned-notify: preexec no output" {
|
||||
export LAST_COMMAND_TIME=
|
||||
run preexec_return_notification
|
||||
@test "lib command_duration: preexec no output" {
|
||||
export COMMAND_DURATION_START_SECONDS=
|
||||
run _command_duration_pre_exec
|
||||
assert_success
|
||||
assert_output ""
|
||||
}
|
||||
|
||||
@test "plugins cmd-returned-notify: preexec no output env set" {
|
||||
export LAST_COMMAND_TIME=$(date +%s)
|
||||
run preexec_return_notification
|
||||
assert_failure
|
||||
assert_output ""
|
||||
}
|
||||
|
||||
@test "plugins cmd-returned-notify: preexec set LAST_COMMAND_TIME" {
|
||||
export LAST_COMMAND_TIME=
|
||||
assert_equal "${LAST_COMMAND_TIME}" ""
|
||||
NOW=$(date +%s)
|
||||
preexec_return_notification
|
||||
assert_equal "${LAST_COMMAND_TIME}" "${NOW}"
|
||||
@test "lib command_duration: preexec set COMMAND_DURATION_START_SECONDS" {
|
||||
export COMMAND_DURATION_START_SECONDS=
|
||||
assert_equal "${COMMAND_DURATION_START_SECONDS}" ""
|
||||
NOW="$(_shell_duration_en)"
|
||||
_command_duration_pre_exec
|
||||
# We need to make sure to account for nanoseconds...
|
||||
assert_equal "${COMMAND_DURATION_START_SECONDS%.*}" "${NOW%.*}"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load ../test_helper_libs
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
function local_setup()
|
||||
{
|
||||
setup_test_fixture
|
||||
function local_setup_file() {
|
||||
setup_libs "helpers"
|
||||
}
|
||||
|
||||
function setup_go_path()
|
||||
|
|
|
|||
|
|
@ -1,24 +1,15 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load ../test_helper_libs
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
function local_setup {
|
||||
setup_test_fixture
|
||||
|
||||
_command_exists "ruby" && mkdir -p "$(ruby -e 'print Gem.user_dir')/bin"
|
||||
|
||||
export OLD_PATH="$PATH"
|
||||
export PATH="/usr/bin:/bin:/usr/sbin"
|
||||
}
|
||||
|
||||
function local_teardown {
|
||||
export PATH="$OLD_PATH"
|
||||
unset OLD_PATH
|
||||
function local_setup_file() {
|
||||
setup_libs "helpers"
|
||||
}
|
||||
|
||||
@test "plugins ruby: remove_gem is defined" {
|
||||
load ../../plugins/available/ruby.plugin
|
||||
run load "${BASH_IT?}/plugins/available/ruby.plugin.bash"
|
||||
assert_success
|
||||
load "${BASH_IT?}/plugins/available/ruby.plugin.bash"
|
||||
|
||||
run type remove_gem
|
||||
assert_line -n 1 "remove_gem () "
|
||||
|
|
@ -31,7 +22,9 @@ function local_teardown {
|
|||
|
||||
mkdir -p "$(ruby -e 'print Gem.user_dir')/bin"
|
||||
|
||||
load ../../plugins/available/ruby.plugin
|
||||
run load "${BASH_IT?}/plugins/available/ruby.plugin.bash"
|
||||
assert_success
|
||||
load "${BASH_IT?}/plugins/available/ruby.plugin.bash"
|
||||
|
||||
local last_path_entry="$(tail -1 <<<"${PATH//:/$'\n'}")"
|
||||
[[ "${last_path_entry}" == "$(ruby -e 'print Gem.user_dir')/bin" ]]
|
||||
|
|
|
|||
|
|
@ -1,21 +1,10 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load ../test_helper_libs
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
load ../../plugins/available/xterm.plugin
|
||||
|
||||
function local_setup {
|
||||
setup_test_fixture
|
||||
|
||||
# Copy the test fixture to the Bash-it folder
|
||||
if _command_exists rsync; then
|
||||
rsync -a "$BASH_IT/test/fixtures/plugin/xterm/" "$BASH_IT/"
|
||||
else
|
||||
find "$BASH_IT/test/fixtures/plugin/xterm" \
|
||||
-mindepth 1 -maxdepth 1 \
|
||||
-exec cp -r {} "$BASH_IT/" \;
|
||||
fi
|
||||
function local_setup_file() {
|
||||
setup_libs "helpers"
|
||||
load "${BASH_IT?}/plugins/available/xterm.plugin.bash"
|
||||
}
|
||||
|
||||
@test "plugins xterm: shorten command output" {
|
||||
|
|
|
|||
20
test/run
20
test/run
|
|
@ -2,17 +2,23 @@
|
|||
test_directory="$(cd "$(dirname "$0")" && pwd)"
|
||||
bats_executable="${test_directory}/../test_lib/bats-core/bin/bats"
|
||||
|
||||
# Locate ourselves for easy reference.
|
||||
export MAIN_BASH_IT_DIR="${test_directory%/*}"
|
||||
export MAIN_BASH_IT_GITDIR="${MAIN_BASH_IT_DIR}/.git"
|
||||
|
||||
# Make sure BATS is available:
|
||||
git submodule init && git submodule update
|
||||
|
||||
if [[ -z "${BASH_IT}" ]]; then
|
||||
BASH_IT="$(cd "${test_directory}" && dirname "${PWD}")"
|
||||
export BASH_IT
|
||||
# Warn user that tests run from the current git HEAD
|
||||
if ! git diff --quiet; then
|
||||
echo "${BASH_SOURCE##*/}: your worktree is dirty; uncommitted changes will *not* be tested!"
|
||||
fi
|
||||
|
||||
if [[ -z "$1" ]]; then
|
||||
# Which tests do we run?
|
||||
if [[ $# -eq '0' ]]; then
|
||||
test_dirs=("${test_directory}"/{bash_it,completion,install,lib,plugins,themes})
|
||||
else
|
||||
test_dirs=("$1")
|
||||
test_dirs=("$@")
|
||||
fi
|
||||
|
||||
# Make sure that the `parallel` command is installed,
|
||||
|
|
@ -38,8 +44,8 @@ if command -v parallel &> /dev/null \
|
|||
fi
|
||||
)"
|
||||
exec "$bats_executable" "${CI:+--tap}" --jobs "${test_jobs_effective}" \
|
||||
"${test_dirs[@]}"
|
||||
--no-parallelize-within-files "${test_dirs[@]}"
|
||||
else
|
||||
# Run `bats` in single-threaded mode.
|
||||
exec "$bats_executable" ${CI:+--tap} "${test_dirs[@]}"
|
||||
exec "$bats_executable" "${CI:+--tap}" "${test_dirs[@]}"
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -1,105 +1,117 @@
|
|||
#!/usr/bin/env bats
|
||||
load "${BASH_IT}/vendor/github.com/erichs/composure/composure.sh"
|
||||
# shellcheck shell=bash
|
||||
|
||||
unset BASH_IT_THEME
|
||||
unset GIT_HOSTING
|
||||
unset NGINX_PATH
|
||||
unset IRC_CLIENT
|
||||
unset TODO
|
||||
unset SCM_CHECK
|
||||
unset BASH_IT_AUTOMATIC_RELOAD_AFTER_CONFIG_CHANGE
|
||||
|
||||
export TEST_MAIN_DIR="${BATS_TEST_DIRNAME}/.."
|
||||
export TEST_DEPS_DIR="${TEST_DEPS_DIR-${TEST_MAIN_DIR}/../test_lib}"
|
||||
|
||||
# be independent of git's system configuration
|
||||
export GIT_CONFIG_NOSYSTEM
|
||||
|
||||
load "${TEST_DEPS_DIR}/bats-support/load.bash"
|
||||
load "${TEST_DEPS_DIR}/bats-assert/load.bash"
|
||||
load "${TEST_DEPS_DIR}/bats-file/load.bash"
|
||||
|
||||
# support 'plumbing' metadata
|
||||
cite _about _param _example _group _author _version
|
||||
cite about-alias about-plugin about-completion
|
||||
|
||||
local_setup() {
|
||||
true
|
||||
function setup_file() {
|
||||
common_setup_file
|
||||
}
|
||||
|
||||
local_teardown() {
|
||||
true
|
||||
}
|
||||
function common_setup_file() {
|
||||
# export *everything* to subshells, needed to support tests
|
||||
set -a
|
||||
|
||||
# This function sets up a local test fixture, i.e. a completely
|
||||
# fresh and isolated Bash-it directory. This is done to avoid
|
||||
# messing with your own Bash-it source directory.
|
||||
# If you need this, call it in your .bats file's `local_setup` function.
|
||||
setup_test_fixture() {
|
||||
mkdir -p "$BASH_IT"
|
||||
lib_directory="$(cd "$(dirname "$0")" && pwd)"
|
||||
local src_topdir="$lib_directory/../../../.."
|
||||
# Locate ourselves for easy reference.
|
||||
TEST_MAIN_DIR="${MAIN_BASH_IT_DIR:-${BATS_TEST_DIRNAME?}/../..}/test"
|
||||
TEST_DEPS_DIR="${MAIN_BASH_IT_DIR:-${TEST_MAIN_DIR}/..}/test_lib"
|
||||
|
||||
if command -v rsync &> /dev/null; then
|
||||
# Use rsync to copy Bash-it to the temp folder
|
||||
rsync -qavrKL -d --delete-excluded --exclude=.git --exclude=helper.bash --exclude=enabled "$src_topdir" "$BASH_IT"
|
||||
else
|
||||
rm -rf "$BASH_IT"
|
||||
mkdir -p "$BASH_IT"
|
||||
# Load the BATS modules we use:
|
||||
load "${TEST_DEPS_DIR}/bats-support/load.bash"
|
||||
load "${TEST_DEPS_DIR}/bats-assert/load.bash"
|
||||
load "${TEST_DEPS_DIR}/bats-file/load.bash"
|
||||
|
||||
find "$src_topdir" \
|
||||
-mindepth 1 -maxdepth 1 \
|
||||
-not -name .git \
|
||||
-exec cp -r {} "$BASH_IT" \;
|
||||
fi
|
||||
|
||||
rm -rf "$BASH_IT"/enabled
|
||||
rm -rf "$BASH_IT"/aliases/enabled
|
||||
rm -rf "$BASH_IT"/completion/enabled
|
||||
rm -rf "$BASH_IT"/plugins/enabled
|
||||
|
||||
mkdir -p "$BASH_IT"/enabled
|
||||
mkdir -p "$BASH_IT"/aliases/enabled
|
||||
mkdir -p "$BASH_IT"/completion/enabled
|
||||
mkdir -p "$BASH_IT"/plugins/enabled
|
||||
|
||||
# Some tests use the BASH_IT_TEST_HOME variable, e.g. install/uninstall
|
||||
export BASH_IT_TEST_HOME="$TEST_TEMP_DIR"
|
||||
}
|
||||
|
||||
setup() {
|
||||
# The `temp_make` function from "bats-file" requires the tralston/bats-file fork,
|
||||
# since the original ztombol/bats-file's `temp_make` does not work on macOS.
|
||||
TEST_TEMP_DIR="$(temp_make --prefix 'bash-it-test-')"
|
||||
export TEST_TEMP_DIR
|
||||
|
||||
export BASH_IT_TEST_DIR="${TEST_TEMP_DIR}/.bash_it"
|
||||
|
||||
export BASH_IT_ROOT="${BASH_IT_TEST_DIR}/root"
|
||||
export BASH_IT=$BASH_IT_TEST_DIR
|
||||
|
||||
mkdir -p -- "${BASH_IT_ROOT}"
|
||||
# shellcheck disable=SC2034 # Clear any inherited environment:
|
||||
XDG_DUMMY="" BASH_IT_DUMMY="" # avoid possible invalid reference:
|
||||
unset "${!XDG_@}" "${!BASH_IT@}" # unset all BASH_IT* and XDG_* variables
|
||||
unset GIT_HOSTING NGINX_PATH IRC_CLIENT TODO SCM_CHECK
|
||||
|
||||
# Some tools, e.g. `git` use configuration files from the $HOME directory,
|
||||
# which interferes with our tests. The only way to keep `git` from doing this
|
||||
# seems to set HOME explicitly to a separate location.
|
||||
# which interferes with our tests. The only way to keep `git` from doing
|
||||
# this seems to set HOME explicitly to a separate location.
|
||||
# Refer to https://git-scm.com/docs/git-config#FILES.
|
||||
unset XDG_CONFIG_HOME
|
||||
export HOME="${TEST_TEMP_DIR}"
|
||||
readonly HOME="${BATS_SUITE_TMPDIR?}"
|
||||
mkdir -p "${HOME}"
|
||||
|
||||
# For `git` tests to run well, user name and email need to be set.
|
||||
# Refer to https://git-scm.com/docs/git-commit#_commit_information.
|
||||
# This goes to the test-specific config, due to the $HOME overridden above.
|
||||
git config --global user.name "John Doe"
|
||||
git config --global user.email "johndoe@example.com"
|
||||
git config --global user.name "Bash It BATS Runner"
|
||||
git config --global user.email "bats@bash.it"
|
||||
git config --global advice.detachedHead false
|
||||
git config --global init.defaultBranch "master"
|
||||
|
||||
# Locate the temporary folder, avoid double-slash.
|
||||
BASH_IT="${BATS_FILE_TMPDIR//\/\///}/.bash_it"
|
||||
|
||||
# This sets up a local test fixture, i.e. a completely fresh and isolated Bash-it directory. This is done to avoid messing with your own Bash-it source directory.
|
||||
git --git-dir="${MAIN_BASH_IT_GITDIR?}" worktree add -d "${BASH_IT}"
|
||||
|
||||
load "${BASH_IT?}/vendor/github.com/erichs/composure/composure.sh"
|
||||
# support 'plumbing' metadata
|
||||
cite _about _param _example _group _author _version
|
||||
cite about-alias about-plugin about-completion
|
||||
|
||||
# Run any local test setup
|
||||
local_setup_file
|
||||
set +a # not needed, but symetiric!
|
||||
}
|
||||
|
||||
# Load standard _Bash It_ libraries
|
||||
function setup_libs() {
|
||||
local lib
|
||||
# Use a loop to allow convenient short-circuiting for some test files
|
||||
for lib in "log" "utilities" "helpers" "search" "preexec" "colors" "command_duration"; do
|
||||
load "${BASH_IT?}/lib/${lib}.bash" || return
|
||||
# shellcheck disable=SC2015 # short-circuit if we've reached the requested library
|
||||
[[ "${lib}" == "${1:-}" ]] && return 0 || true
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
||||
function local_setup_file() {
|
||||
true
|
||||
}
|
||||
|
||||
function local_setup() {
|
||||
true
|
||||
}
|
||||
|
||||
function local_teardown() {
|
||||
true
|
||||
}
|
||||
|
||||
function clean_test_fixture() {
|
||||
rm -rf "${BASH_IT_CONFIG?}/enabled"
|
||||
rm -rf "${BASH_IT_CONFIG?}/aliases/enabled"
|
||||
rm -rf "${BASH_IT_CONFIG?}/completion/enabled"
|
||||
rm -rf "${BASH_IT_CONFIG?}/plugins/enabled"
|
||||
|
||||
rm -rf "${BASH_IT_CONFIG?}/tmp/cache"
|
||||
rm -rf "${BASH_IT_CONFIG?}/profiles"/test*.bash_it
|
||||
}
|
||||
|
||||
function setup_test_fixture() {
|
||||
mkdir -p "${BASH_IT_CONFIG?}/enabled"
|
||||
mkdir -p "${BASH_IT_CONFIG?}/aliases/enabled"
|
||||
mkdir -p "${BASH_IT_CONFIG?}/completion/enabled"
|
||||
mkdir -p "${BASH_IT_CONFIG?}/plugins/enabled"
|
||||
}
|
||||
|
||||
function setup() {
|
||||
# be independent of git's system configuration
|
||||
export GIT_CONFIG_NOSYSTEM
|
||||
# Locate the temporary folder:
|
||||
BASH_IT_CONFIG="${BASH_IT?}" #"${BATS_TEST_TMPDIR//\/\///}"
|
||||
export XDG_CACHE_HOME="${BATS_TEST_TMPDIR?}"
|
||||
|
||||
setup_test_fixture
|
||||
local_setup
|
||||
}
|
||||
|
||||
teardown() {
|
||||
function teardown() {
|
||||
unset GIT_CONFIG_NOSYSTEM
|
||||
local_teardown
|
||||
|
||||
rm -rf "${BASH_IT_TEST_DIR}"
|
||||
temp_del "${TEST_TEMP_DIR}"
|
||||
clean_test_fixture
|
||||
}
|
||||
|
||||
function teardown_file() {
|
||||
# This only serves to clean metadata from the real git repo.
|
||||
git --git-dir="${MAIN_BASH_IT_GITDIR?}" worktree remove -f "${BASH_IT?}"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
# shellcheck shell=bash
|
||||
|
||||
load "${BASH_IT}/lib/log.bash"
|
||||
load "${BASH_IT}/lib/utilities.bash"
|
||||
load "${BASH_IT}/lib/helpers.bash"
|
||||
load "${BASH_IT}/lib/search.bash"
|
||||
load "${BASH_IT}/lib/preexec.bash"
|
||||
load "${BASH_IT}/lib/colors.bash"
|
||||
|
|
@ -1,8 +1,11 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load ../test_helper_libs
|
||||
load ../../themes/base.theme
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
function local_setup_file() {
|
||||
setup_libs "colors" #"theme"
|
||||
load "${BASH_IT?}/themes/base.theme.bash"
|
||||
}
|
||||
|
||||
@test 'themes base: battery_percentage should not exist' {
|
||||
run type -a battery_percentage &> /dev/null
|
||||
|
|
@ -10,7 +13,7 @@ load ../../themes/base.theme
|
|||
}
|
||||
|
||||
@test 'themes base: battery_percentage should exist if battery plugin loaded' {
|
||||
load ../../plugins/available/battery.plugin
|
||||
load "${BASH_IT?}/plugins/available/battery.plugin.bash"
|
||||
|
||||
run type -a battery_percentage &> /dev/null
|
||||
assert_success
|
||||
|
|
@ -28,12 +31,12 @@ load ../../themes/base.theme
|
|||
@test 'themes base: battery_char should exist if battery plugin loaded' {
|
||||
unset -f battery_char
|
||||
|
||||
load ../../plugins/available/battery.plugin
|
||||
load "${BASH_IT?}/plugins/available/battery.plugin.bash"
|
||||
run type -t battery_percentage
|
||||
assert_success
|
||||
assert_line "function"
|
||||
|
||||
load ../../themes/base.theme
|
||||
load "${BASH_IT?}/themes/base.theme.bash"
|
||||
run type -t battery_char
|
||||
assert_success
|
||||
assert_line "function"
|
||||
|
|
@ -51,13 +54,13 @@ load ../../themes/base.theme
|
|||
|
||||
run battery_charge
|
||||
assert_success
|
||||
assert_line -n 0 ""
|
||||
assert_output ""
|
||||
}
|
||||
|
||||
@test 'themes base: battery_charge should exist if battery plugin loaded' {
|
||||
unset -f battery_charge
|
||||
load ../../plugins/available/battery.plugin
|
||||
load ../../themes/base.theme
|
||||
load "${BASH_IT?}/plugins/available/battery.plugin.bash"
|
||||
load "${BASH_IT?}/themes/base.theme.bash"
|
||||
|
||||
run type -a battery_charge &> /dev/null
|
||||
assert_success
|
||||
|
|
|
|||
|
|
@ -1,9 +1,14 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
# shellcheck disable=SC2034
|
||||
# shellcheck disable=SC2016
|
||||
|
||||
load ../test_helper
|
||||
load ../test_helper_libs
|
||||
load ../../themes/githelpers.theme
|
||||
load ../../themes/base.theme
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
function local_setup_file() {
|
||||
setup_libs "colors" #"theme"
|
||||
load "${BASH_IT?}/themes/base.theme.bash"
|
||||
load "${BASH_IT?}/themes/githelpers.theme.bash"
|
||||
}
|
||||
|
||||
add_commit() {
|
||||
local file_name="general-${RANDOM}"
|
||||
|
|
|
|||
|
|
@ -1,29 +1,10 @@
|
|||
#!/usr/bin/env bats
|
||||
# shellcheck shell=bats
|
||||
|
||||
load ../test_helper
|
||||
load ../test_helper_libs
|
||||
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
|
||||
|
||||
function local_setup {
|
||||
setup_test_fixture
|
||||
|
||||
# Copy the test fixture to the Bash-it folder
|
||||
if command -v rsync &> /dev/null
|
||||
then
|
||||
rsync -a "$BASH_IT/test/fixtures/bash_it/" "$BASH_IT/"
|
||||
else
|
||||
find "$BASH_IT/test/fixtures/bash_it" \
|
||||
-mindepth 1 -maxdepth 1 \
|
||||
-exec cp -r {} "$BASH_IT/" \;
|
||||
fi
|
||||
|
||||
export OLD_PATH="$PATH"
|
||||
|
||||
load ../../themes/base.theme
|
||||
}
|
||||
|
||||
function local_teardown {
|
||||
export PATH="$OLD_PATH"
|
||||
unset OLD_PATH
|
||||
function local_setup_file() {
|
||||
setup_libs "colors" #"theme"
|
||||
load "${BASH_IT?}/themes/base.theme.bash"
|
||||
}
|
||||
|
||||
function setup_repo {
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ prompt_segment() {
|
|||
# declare -p codes
|
||||
|
||||
if [[ $CURRENT_BG != NONE && $1 != "$CURRENT_BG" ]]; then
|
||||
declare -a intermediate=("$(fg_color $CURRENT_BG)" "$(bg_color "$1")")
|
||||
declare -a intermediate=("$(fg_color "$CURRENT_BG")" "$(bg_color "$1")")
|
||||
debug "pre prompt " "$(ansi intermediate[@])"
|
||||
PR="$PR $(ansi intermediate[@])$SEGMENT_SEPARATOR"
|
||||
debug "post prompt " "$(ansi codes[@])"
|
||||
|
|
|
|||
|
|
@ -1,8 +1,11 @@
|
|||
# shellcheck shell=bash
|
||||
# shellcheck disable=SC2034 # Expected behavior for themes.
|
||||
# shellcheck disable=SC2154 #TODO: fix these all.
|
||||
|
||||
# Prompt defaut configuration
|
||||
BARBUK_PROMPT=${BARBUK_PROMPT:="git-uptream-remote-logo ssh path scm python_venv ruby node terraform cloud duration exit"}
|
||||
|
||||
# Theme custom glyphs
|
||||
# SCM
|
||||
SCM_GIT_CHAR_GITLAB=${BARBUK_GITLAB_CHAR:=' '}
|
||||
SCM_GIT_CHAR_BITBUCKET=${BARBUK_BITBUCKET_CHAR:=' '}
|
||||
SCM_GIT_CHAR_GITHUB=${BARBUK_GITHUB_CHAR:=' '}
|
||||
|
|
@ -10,13 +13,20 @@ SCM_GIT_CHAR_DEFAULT=${BARBUK_GIT_DEFAULT_CHAR:=' '}
|
|||
SCM_GIT_CHAR_ICON_BRANCH=${BARBUK_GIT_BRANCH_ICON:=''}
|
||||
SCM_HG_CHAR=${BARBUK_HG_CHAR:='☿ '}
|
||||
SCM_SVN_CHAR=${BARBUK_SVN_CHAR:='⑆ '}
|
||||
# Exit code
|
||||
EXIT_CODE_ICON=${BARBUK_EXIT_CODE_ICON:=' '}
|
||||
# Programming and tools
|
||||
PYTHON_VENV_CHAR=${BARBUK_PYTHON_VENV_CHAR:=' '}
|
||||
COMMAND_DURATION_ICON=${BARBUK_COMMAND_DURATION_ICON:-"$bold_blue "}
|
||||
RUBY_CHAR=${BARBUK_RUBY_CHAR:=' '}
|
||||
NODE_CHAR=${BARBUK_NODE_CHAR:=' '}
|
||||
TERRAFORM_CHAR=${BARBUK_TERRAFORM_CHAR:="❲t❳ "}
|
||||
# Cloud
|
||||
AWS_PROFILE_CHAR=${BARBUK_AWS_PROFILE_CHAR:=" aws "}
|
||||
SCALEWAY_PROFILE_CHAR=${BARBUK_SCALEWAY_PROFILE_CHAR:=" scw "}
|
||||
GCLOUD_CHAR=${BARBUK_GCLOUD_CHAR:=" google "}
|
||||
|
||||
# Command duration
|
||||
COMMAND_DURATION_MIN_SECONDS=${COMMAND_DURATION_MIN_SECONDS:-1}
|
||||
COMMAND_DURATION_COLOR="$normal"
|
||||
|
||||
# Ssh user and hostname display
|
||||
SSH_INFO=${BARBUK_SSH_INFO:=true}
|
||||
|
|
@ -24,24 +34,32 @@ HOST_INFO=${BARBUK_HOST_INFO:=long}
|
|||
|
||||
# Bash-it default glyphs customization
|
||||
SCM_NONE_CHAR=
|
||||
SCM_THEME_PROMPT_DIRTY=" ${bold_red}✗"
|
||||
SCM_THEME_PROMPT_CLEAN=" ${bold_green}✓"
|
||||
SCM_THEME_PROMPT_DIRTY=" ${bold_red?}✗"
|
||||
SCM_THEME_PROMPT_CLEAN=" ${bold_green?}✓"
|
||||
SCM_THEME_PROMPT_PREFIX="|"
|
||||
SCM_THEME_PROMPT_SUFFIX="${green}| "
|
||||
SCM_GIT_BEHIND_CHAR="${bold_red}↓${normal}"
|
||||
SCM_GIT_AHEAD_CHAR="${bold_green}↑${normal}"
|
||||
SCM_THEME_PROMPT_SUFFIX="${green?}| "
|
||||
SCM_GIT_BEHIND_CHAR="${bold_red?}↓${normal?}"
|
||||
SCM_GIT_AHEAD_CHAR="${bold_green?}↑${normal?}"
|
||||
SCM_GIT_UNTRACKED_CHAR="⌀"
|
||||
SCM_GIT_UNSTAGED_CHAR="${bold_yellow}•${normal}"
|
||||
SCM_GIT_STAGED_CHAR="${bold_green}+${normal}"
|
||||
GIT_THEME_PROMPT_DIRTY=" ${bold_red}✗"
|
||||
GIT_THEME_PROMPT_CLEAN=" ${bold_green}✓"
|
||||
GIT_THEME_PROMPT_PREFIX="${cyan}"
|
||||
GIT_THEME_PROMPT_SUFFIX="${cyan}"
|
||||
SCM_THEME_BRANCH_TRACK_PREFIX="${normal} ⤏ ${cyan}"
|
||||
SCM_GIT_UNSTAGED_CHAR="${bold_yellow?}•${normal?}"
|
||||
SCM_GIT_STAGED_CHAR="${bold_green?}+${normal?}"
|
||||
GIT_THEME_PROMPT_DIRTY=" ${bold_red?}✗"
|
||||
GIT_THEME_PROMPT_CLEAN=" ${bold_green?}✓"
|
||||
GIT_THEME_PROMPT_PREFIX="${cyan?}"
|
||||
GIT_THEME_PROMPT_SUFFIX="${cyan?}"
|
||||
SCM_THEME_BRANCH_TRACK_PREFIX="${normal?} ⤏ ${cyan?}"
|
||||
SCM_THEME_CURRENT_USER_PREFFIX=' '
|
||||
SCM_GIT_SHOW_CURRENT_USER=false
|
||||
NVM_THEME_PROMPT_PREFIX=''
|
||||
NVM_THEME_PROMPT_SUFFIX=''
|
||||
RVM_THEME_PROMPT_PREFIX=''
|
||||
RVM_THEME_PROMPT_SUFFIX=''
|
||||
RBENV_THEME_PROMPT_PREFIX=' '
|
||||
RBENV_THEME_PROMPT_SUFFIX=''
|
||||
RBFU_THEME_PROMPT_PREFIX=''
|
||||
RBFU_THEME_PROMPT_SUFFIX=''
|
||||
|
||||
function _git-uptream-remote-logo {
|
||||
function __git-uptream-remote-logo_prompt() {
|
||||
[[ "$(_git-upstream)" == "" ]] && SCM_GIT_CHAR="$SCM_GIT_CHAR_DEFAULT"
|
||||
|
||||
local remote remote_domain
|
||||
|
|
@ -57,36 +75,72 @@ function _git-uptream-remote-logo {
|
|||
bitbucket) SCM_GIT_CHAR="$SCM_GIT_CHAR_BITBUCKET" ;;
|
||||
*) SCM_GIT_CHAR="$SCM_GIT_CHAR_DEFAULT" ;;
|
||||
esac
|
||||
|
||||
echo "${purple?}$(scm_char)"
|
||||
}
|
||||
|
||||
function git_prompt_info {
|
||||
function git_prompt_info() {
|
||||
git_prompt_vars
|
||||
echo -e " on $SCM_GIT_CHAR_ICON_BRANCH $SCM_PREFIX$SCM_BRANCH$SCM_STATE$SCM_GIT_AHEAD$SCM_GIT_BEHIND$SCM_GIT_STASH$SCM_SUFFIX"
|
||||
echo -e "on $SCM_GIT_CHAR_ICON_BRANCH $SCM_PREFIX$SCM_BRANCH$SCM_STATE$SCM_GIT_AHEAD$SCM_GIT_BEHIND$SCM_GIT_STASH$SCM_SUFFIX "
|
||||
}
|
||||
|
||||
function _exit-code {
|
||||
if [[ "$1" -ne 0 ]]; then
|
||||
exit_code=" ${purple}${EXIT_CODE_ICON}${yellow}${exit_code}${bold_orange}"
|
||||
function __exit_prompt() {
|
||||
if [[ "$exit_code" -ne 0 ]]; then
|
||||
echo "${purple?}${EXIT_CODE_ICON}${yellow?}${exit_code}${bold_orange?} "
|
||||
else
|
||||
exit_code="${bold_green}"
|
||||
echo "${bold_green}"
|
||||
fi
|
||||
}
|
||||
|
||||
function _prompt {
|
||||
local exit_code="$?" wrap_char=' ' dir_color=$green ssh_info='' python_venv='' host command_duration=
|
||||
|
||||
command_duration=$(_command_duration)
|
||||
|
||||
_exit-code exit_code
|
||||
_git-uptream-remote-logo
|
||||
|
||||
history -a
|
||||
|
||||
# Detect root shell
|
||||
if [ "$(whoami)" = root ]; then
|
||||
dir_color=$red
|
||||
function __aws_profile_prompt() {
|
||||
if [[ -n "${AWS_PROFILE}" ]]; then
|
||||
echo -n "${bold_purple?}${AWS_PROFILE_CHAR}${normal?}${AWS_PROFILE} "
|
||||
fi
|
||||
}
|
||||
|
||||
function __scaleway_profile_prompt() {
|
||||
if [[ -n "${SCW_PROFILE}" ]]; then
|
||||
echo -n "${bold_purple?}${SCALEWAY_PROFILE_CHAR}${normal?}${SCW_PROFILE} "
|
||||
fi
|
||||
}
|
||||
|
||||
function __gcloud_prompt() {
|
||||
local active_gcloud_account=""
|
||||
|
||||
active_gcloud_account="$(active_gcloud_account_prompt)"
|
||||
[[ -n "${active_gcloud_account}" ]] && echo "${bold_purple?}${GCLOUD_CHAR}${normal?}${active_gcloud_account} "
|
||||
}
|
||||
|
||||
function __cloud_prompt() {
|
||||
__aws_profile_prompt
|
||||
__scaleway_profile_prompt
|
||||
__gcloud_prompt
|
||||
}
|
||||
|
||||
function __terraform_prompt() {
|
||||
local terraform_workspace=""
|
||||
|
||||
if [ -d .terraform ]; then
|
||||
terraform_workspace="$(terraform_workspace_prompt)"
|
||||
[[ -n "${terraform_workspace}" ]] && echo "${bold_purple?}${TERRAFORM_CHAR}${normal?}${terraform_workspace} "
|
||||
fi
|
||||
}
|
||||
|
||||
function __node_prompt() {
|
||||
local node_version=""
|
||||
|
||||
node_version="$(node_version_prompt)"
|
||||
[[ -n "${node_version}" ]] && echo "${bold_purple?}${NODE_CHAR}${normal?}${node_version} "
|
||||
}
|
||||
|
||||
function __ruby_prompt() {
|
||||
local ruby_version=""
|
||||
|
||||
ruby_version="$(ruby_version_prompt)"
|
||||
[[ -n "${ruby_version}" ]] && echo "${bold_purple?}${RUBY_CHAR}${normal?}${ruby_version} "
|
||||
}
|
||||
|
||||
function __ssh_prompt() {
|
||||
# Detect ssh
|
||||
if [[ -n "${SSH_CONNECTION}" ]] && [ "$SSH_INFO" = true ]; then
|
||||
if [ "$HOST_INFO" = long ]; then
|
||||
|
|
@ -94,19 +148,56 @@ function _prompt {
|
|||
else
|
||||
host="\h"
|
||||
fi
|
||||
ssh_info="${bold_blue}\u${bold_orange}@${cyan}$host ${bold_orange}in"
|
||||
echo "${bold_blue?}\u${bold_orange?}@${cyan?}$host ${bold_orange?}in "
|
||||
fi
|
||||
}
|
||||
|
||||
function __python_venv_prompt() {
|
||||
# Detect python venv
|
||||
if [[ -n "${CONDA_DEFAULT_ENV}" ]]; then
|
||||
python_venv="$PYTHON_VENV_CHAR${CONDA_DEFAULT_ENV} "
|
||||
echo "${bold_purple?}$PYTHON_VENV_CHAR${normal?}${CONDA_DEFAULT_ENV} "
|
||||
elif [[ -n "${VIRTUAL_ENV}" ]]; then
|
||||
python_venv="$PYTHON_VENV_CHAR$(basename "${VIRTUAL_ENV}") "
|
||||
echo "${bold_purple?}$PYTHON_VENV_CHAR${normal?}$(basename "${VIRTUAL_ENV}") "
|
||||
fi
|
||||
}
|
||||
|
||||
function __path_prompt() {
|
||||
local dir_color=${green?}
|
||||
# Detect root shell
|
||||
if [ "$(whoami)" = root ]; then
|
||||
dir_color=${red?}
|
||||
fi
|
||||
|
||||
echo "${dir_color}\w${normal} "
|
||||
}
|
||||
|
||||
function __scm_prompt() {
|
||||
scm_prompt_info
|
||||
}
|
||||
|
||||
function __duration_prompt() {
|
||||
[[ -n "$command_duration" ]] && echo "${command_duration} "
|
||||
}
|
||||
|
||||
function __prompt-command() {
|
||||
exit_code="$?"
|
||||
command_duration=$(_command_duration)
|
||||
local wrap_char
|
||||
|
||||
# Generate prompt
|
||||
PS1="\n "
|
||||
for segment in $BARBUK_PROMPT; do
|
||||
local info
|
||||
info="$(__"${segment}"_prompt)"
|
||||
[[ -n "${info}" ]] && PS1+="${info}"
|
||||
done
|
||||
|
||||
# Cut prompt when it's too long
|
||||
if [[ ${#PS1} -gt $((COLUMNS * 2)) ]]; then
|
||||
wrap_char="\n"
|
||||
fi
|
||||
|
||||
PS1="\\n${ssh_info} ${purple}$(scm_char)${python_venv}${dir_color}\\w${normal}$(scm_prompt_info)${command_duration}${exit_code}"
|
||||
[[ ${#PS1} -gt $((COLUMNS * 2)) ]] && wrap_char="\\n"
|
||||
PS1="${PS1}${wrap_char}❯${normal} "
|
||||
}
|
||||
|
||||
safe_append_prompt_command _prompt
|
||||
safe_append_prompt_command __prompt-command
|
||||
|
|
|
|||
|
|
@ -1,16 +1,20 @@
|
|||
# shellcheck shell=bash
|
||||
# shellcheck disable=SC2034 # Expected behavior for themes.
|
||||
|
||||
# Colors for listing files, using default color scheme.
|
||||
# To customize color scheme by theme, check out https://geoff.greer.fm/lscolors/
|
||||
export CLICOLOR LSCOLORS LS_COLORS
|
||||
|
||||
CLOCK_CHAR_THEME_PROMPT_PREFIX=''
|
||||
CLOCK_CHAR_THEME_PROMPT_SUFFIX=''
|
||||
CLOCK_THEME_PROMPT_PREFIX=''
|
||||
CLOCK_THEME_PROMPT_SUFFIX=''
|
||||
|
||||
THEME_PROMPT_HOST='\H'
|
||||
THEME_PROMPT_HOST='\h'
|
||||
|
||||
SCM=
|
||||
|
||||
SCM_CHECK=${SCM_CHECK:=true}
|
||||
: "${SCM_CHECK:=true}"
|
||||
|
||||
SCM_THEME_PROMPT_DIRTY=' ✗'
|
||||
SCM_THEME_PROMPT_CLEAN=' ✓'
|
||||
|
|
@ -30,15 +34,15 @@ SCM_THEME_CHAR_SUFFIX=''
|
|||
: "${THEME_CHECK_SUDO:=false}"
|
||||
: "${THEME_BATTERY_PERCENTAGE_CHECK:=true}"
|
||||
|
||||
SCM_GIT_SHOW_DETAILS=${SCM_GIT_SHOW_DETAILS:=true}
|
||||
SCM_GIT_SHOW_REMOTE_INFO=${SCM_GIT_SHOW_REMOTE_INFO:=auto}
|
||||
SCM_GIT_IGNORE_UNTRACKED=${SCM_GIT_IGNORE_UNTRACKED:=false}
|
||||
SCM_GIT_SHOW_CURRENT_USER=${SCM_GIT_SHOW_CURRENT_USER:=false}
|
||||
SCM_GIT_SHOW_MINIMAL_INFO=${SCM_GIT_SHOW_MINIMAL_INFO:=false}
|
||||
SCM_GIT_SHOW_STASH_INFO=${SCM_GIT_SHOW_STASH_INFO:=true}
|
||||
SCM_GIT_SHOW_COMMIT_COUNT=${SCM_GIT_SHOW_COMMIT_COUNT:=true}
|
||||
SCM_GIT_USE_GITSTATUS=${SCM_GIT_USE_GITSTATUS:=false}
|
||||
SCM_GIT_GITSTATUS_RAN=${SCM_GIT_GITSTATUS_RAN:=false}
|
||||
: "${SCM_GIT_SHOW_DETAILS:=true}"
|
||||
: "${SCM_GIT_SHOW_REMOTE_INFO:=auto}"
|
||||
: "${SCM_GIT_IGNORE_UNTRACKED:=false}"
|
||||
: "${SCM_GIT_SHOW_CURRENT_USER:=false}"
|
||||
: "${SCM_GIT_SHOW_MINIMAL_INFO:=false}"
|
||||
: "${SCM_GIT_SHOW_STASH_INFO:=true}"
|
||||
: "${SCM_GIT_SHOW_COMMIT_COUNT:=true}"
|
||||
: "${SCM_GIT_USE_GITSTATUS:=false}"
|
||||
: "${SCM_GIT_GITSTATUS_RAN:=false}"
|
||||
|
||||
SCM_GIT='git'
|
||||
SCM_GIT_CHAR='±'
|
||||
|
|
@ -73,9 +77,9 @@ NVM_THEME_PROMPT_SUFFIX='|'
|
|||
RVM_THEME_PROMPT_PREFIX=' |'
|
||||
RVM_THEME_PROMPT_SUFFIX='|'
|
||||
|
||||
THEME_SHOW_RUBY_PROMPT=${THEME_SHOW_RUBY_PROMPT:=true}
|
||||
: "${THEME_SHOW_RUBY_PROMPT:=true}"
|
||||
|
||||
THEME_SHOW_USER_HOST=${THEME_SHOW_USER_HOST:=false}
|
||||
: "${THEME_SHOW_USER_HOST:=false}"
|
||||
USER_HOST_THEME_PROMPT_PREFIX=''
|
||||
USER_HOST_THEME_PROMPT_SUFFIX=''
|
||||
|
||||
|
|
@ -88,154 +92,160 @@ RBENV_THEME_PROMPT_SUFFIX='|'
|
|||
RBFU_THEME_PROMPT_PREFIX=' |'
|
||||
RBFU_THEME_PROMPT_SUFFIX='|'
|
||||
|
||||
: "${GIT_EXE:=$SCM_GIT}"
|
||||
: "${P4_EXE:=$SCM_P4}"
|
||||
: "${HG_EXE:=$SCM_HG}"
|
||||
: "${SVN_EXE:=$SCM_SVN}"
|
||||
: "${GIT_EXE:=${SCM_GIT?}}"
|
||||
: "${HG_EXE:=${SCM_HG?}}"
|
||||
: "${SVN_EXE:=${SCM_SVN?}}"
|
||||
: "${P4_EXE:=${SCM_P4?}}"
|
||||
|
||||
function _bash_it_appearance_scm_init() {
|
||||
GIT_EXE="$(type -P $SCM_GIT || true)"
|
||||
P4_EXE="$(type -P $SCM_P4 || true)"
|
||||
HG_EXE="$(type -P $SCM_HG || true)"
|
||||
SVN_EXE="$(type -P $SCM_SVN || true)"
|
||||
GIT_EXE="$(type -P "${SCM_GIT:-git}" || true)"
|
||||
HG_EXE="$(type -P "${SCM_HG:-hg}" || true)"
|
||||
SVN_EXE="$(type -P "${SCM_SVN:-svn}" || true)"
|
||||
P4_EXE="$(type -P "${SCM_P4:-p4}" || true)"
|
||||
|
||||
# Check for broken SVN exe that is caused by some versions of Xcode.
|
||||
# See https://github.com/Bash-it/bash-it/issues/1612 for more details.
|
||||
if [[ -x "$SVN_EXE" && -x "${SVN_EXE%/*}/xcrun" ]]; then
|
||||
if ! "$SVN_EXE" --version > /dev/null 2>&1; then
|
||||
if [[ -x "${SVN_EXE-}" && -x "${SVN_EXE%/svn}/xcrun" ]]; then
|
||||
if ! "${SVN_EXE}" --version > /dev/null 2>&1; then
|
||||
# Unset the SVN exe variable so that SVN commands are avoided.
|
||||
SVN_EXE=""
|
||||
fi
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
_bash_it_library_finalize_hook+=('_bash_it_appearance_scm_init')
|
||||
|
||||
function scm {
|
||||
if [[ "$SCM_CHECK" = false ]]; then
|
||||
SCM=$SCM_NONE
|
||||
elif [[ -f .git/HEAD ]] && [[ -x "$GIT_EXE" ]]; then
|
||||
SCM=$SCM_GIT
|
||||
elif [[ -d .hg ]] && [[ -x "$HG_EXE" ]]; then
|
||||
SCM=$SCM_HG
|
||||
elif [[ -d .svn ]] && [[ -x "$SVN_EXE" ]]; then
|
||||
SCM=$SCM_SVN
|
||||
elif [[ -x "$GIT_EXE" ]] && [[ -n "$(git rev-parse --is-inside-work-tree 2> /dev/null)" ]]; then
|
||||
SCM=$SCM_GIT
|
||||
elif [[ -x "$HG_EXE" ]] && [[ -n "$(hg root 2> /dev/null)" ]]; then
|
||||
SCM=$SCM_HG
|
||||
elif [[ -x "$SVN_EXE" ]] && [[ -n "$(svn info --show-item wc-root 2> /dev/null)" ]]; then
|
||||
SCM=$SCM_SVN
|
||||
elif [[ -x "$P4_EXE" ]] && [[ -n "$(p4 set P4CLIENT 2> /dev/null)" ]]; then
|
||||
SCM=$SCM_P4
|
||||
function scm() {
|
||||
if [[ "${SCM_CHECK:-true}" == "false" ]]; then
|
||||
SCM="${SCM_NONE-NONE}"
|
||||
elif [[ -x "${GIT_EXE-}" ]] && _bash-it-find-in-ancestor '.git' > /dev/null; then
|
||||
SCM="${SCM_GIT?}"
|
||||
elif [[ -x "${HG_EXE-}" ]] && _bash-it-find-in-ancestor '.hg' > /dev/null; then
|
||||
SCM="${SCM_HG?}"
|
||||
elif [[ -x "${SVN_EXE-}" ]] && _bash-it-find-in-ancestor '.svn' > /dev/null; then
|
||||
SCM="${SCM_SVN?}"
|
||||
elif [[ -x "${P4_EXE-}" && -n "$(p4 set P4CLIENT 2> /dev/null)" ]]; then
|
||||
SCM="${SCM_P4?}"
|
||||
else
|
||||
SCM=$SCM_NONE
|
||||
SCM="${SCM_NONE-NONE}"
|
||||
fi
|
||||
}
|
||||
|
||||
scm_prompt() {
|
||||
local CHAR
|
||||
CHAR="$(scm_char)"
|
||||
local format=${SCM_PROMPT_FORMAT:-'[%s%s]'}
|
||||
function scm_prompt() {
|
||||
local format="${SCM_PROMPT_FORMAT-"[%s%s]"}"
|
||||
local scm_char scm_prompt_info
|
||||
scm_char="$(scm_char)"
|
||||
scm_prompt_info="$(scm_prompt_info)"
|
||||
|
||||
if [[ "${CHAR}" != "$SCM_NONE_CHAR" ]]; then
|
||||
if [[ "${scm_char}" != "${SCM_NONE_CHAR:-}" ]]; then
|
||||
# shellcheck disable=2059
|
||||
printf "$format\n" "$CHAR" "$(scm_prompt_info)"
|
||||
printf "${format}" "${scm_char}" "${scm_prompt_info}"
|
||||
fi
|
||||
}
|
||||
|
||||
function scm_prompt_char {
|
||||
if [[ -z $SCM ]]; then scm; fi
|
||||
if [[ $SCM == "$SCM_GIT" ]]; then
|
||||
SCM_CHAR=$SCM_GIT_CHAR
|
||||
elif [[ $SCM == "$SCM_P4" ]]; then
|
||||
SCM_CHAR=$SCM_P4_CHAR
|
||||
elif [[ $SCM == "$SCM_HG" ]]; then
|
||||
SCM_CHAR=$SCM_HG_CHAR
|
||||
elif [[ $SCM == "$SCM_SVN" ]]; then
|
||||
SCM_CHAR=$SCM_SVN_CHAR
|
||||
else
|
||||
SCM_CHAR=$SCM_NONE_CHAR
|
||||
function scm_prompt_char() {
|
||||
if [[ -z "${SCM:-}" ]]; then
|
||||
scm
|
||||
fi
|
||||
|
||||
case ${SCM?} in
|
||||
"${SCM_GIT?}")
|
||||
SCM_CHAR="${SCM_GIT_CHAR?}"
|
||||
;;
|
||||
"${SCM_HG?}")
|
||||
SCM_CHAR="${SCM_HG_CHAR?}"
|
||||
;;
|
||||
"${SCM_SVN?}")
|
||||
SCM_CHAR="${SCM_SVN_CHAR?}"
|
||||
;;
|
||||
"${SCM_P4?}")
|
||||
SCM_CHAR="${SCM_P4_CHAR?}"
|
||||
;;
|
||||
*)
|
||||
SCM_CHAR="${SCM_NONE_CHAR:-}"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
function scm_prompt_vars {
|
||||
function scm_prompt_vars() {
|
||||
scm
|
||||
scm_prompt_char
|
||||
SCM_DIRTY=0
|
||||
SCM_STATE=''
|
||||
[[ $SCM == "$SCM_GIT" ]] && git_prompt_vars && return
|
||||
[[ $SCM == "$SCM_P4" ]] && p4_prompt_vars && return
|
||||
[[ $SCM == "$SCM_HG" ]] && hg_prompt_vars && return
|
||||
[[ $SCM == "$SCM_SVN" ]] && svn_prompt_vars && return
|
||||
|
||||
local prompt_vars="${SCM}_prompt_vars"
|
||||
_is_function "${prompt_vars}" && "${prompt_vars}"
|
||||
}
|
||||
|
||||
function scm_prompt_info {
|
||||
function scm_prompt_info() {
|
||||
scm
|
||||
scm_prompt_char
|
||||
scm_prompt_info_common
|
||||
}
|
||||
|
||||
function scm_prompt_char_info {
|
||||
function scm_prompt_char_info() {
|
||||
scm_prompt_char
|
||||
echo -ne "${SCM_THEME_CHAR_PREFIX}${SCM_CHAR}${SCM_THEME_CHAR_SUFFIX}"
|
||||
echo -ne "${SCM_THEME_CHAR_PREFIX-}${SCM_CHAR?}${SCM_THEME_CHAR_SUFFIX-}"
|
||||
scm_prompt_info_common
|
||||
}
|
||||
|
||||
function scm_prompt_info_common {
|
||||
function scm_prompt_info_common() {
|
||||
local prompt_info
|
||||
SCM_DIRTY=0
|
||||
SCM_STATE=''
|
||||
|
||||
if [[ ${SCM} == "${SCM_GIT}" ]]; then
|
||||
if [[ ${SCM_GIT_SHOW_MINIMAL_INFO} == true ]]; then
|
||||
case ${SCM?} in
|
||||
"${SCM_GIT?}")
|
||||
if [[ ${SCM_GIT_SHOW_MINIMAL_INFO:-false} == "true" ]]; then
|
||||
# user requests minimal git status information
|
||||
git_prompt_minimal_info
|
||||
prompt_info="${SCM}_prompt_minimal_info"
|
||||
else
|
||||
# more detailed git status
|
||||
git_prompt_info
|
||||
prompt_info="${SCM}_prompt_info"
|
||||
fi
|
||||
return
|
||||
fi
|
||||
|
||||
;;
|
||||
*)
|
||||
# TODO: consider adding minimal status information for hg and svn
|
||||
{ [[ ${SCM} == "${SCM_P4}" ]] && p4_prompt_info && return; } || true
|
||||
{ [[ ${SCM} == "${SCM_HG}" ]] && hg_prompt_info && return; } || true
|
||||
{ [[ ${SCM} == "${SCM_SVN}" ]] && svn_prompt_info && return; } || true
|
||||
prompt_info="${SCM}_prompt_info"
|
||||
;;
|
||||
esac
|
||||
_is_function "${prompt_info}" && "${prompt_info}"
|
||||
}
|
||||
|
||||
function terraform_workspace_prompt {
|
||||
function terraform_workspace_prompt() {
|
||||
if _command_exists terraform; then
|
||||
if [ -d .terraform ]; then
|
||||
echo -e "$(terraform workspace show 2> /dev/null)"
|
||||
if [[ -d .terraform ]]; then
|
||||
terraform workspace show 2> /dev/null
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function active_gcloud_account_prompt {
|
||||
function active_gcloud_account_prompt() {
|
||||
if _command_exists gcloud; then
|
||||
echo -e "$(gcloud config list account --format "value(core.account)" 2> /dev/null)"
|
||||
gcloud config list account --format "value(core.account)" 2> /dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
function git_prompt_minimal_info {
|
||||
SCM_STATE=${SCM_THEME_PROMPT_CLEAN}
|
||||
function git_prompt_minimal_info() {
|
||||
SCM_STATE="${SCM_THEME_PROMPT_CLEAN?}"
|
||||
|
||||
_git-hide-status && return
|
||||
|
||||
SCM_BRANCH="${SCM_THEME_BRANCH_PREFIX}\$(_git-friendly-ref)"
|
||||
SCM_BRANCH="${SCM_THEME_BRANCH_PREFIX-}\$(_git-friendly-ref)"
|
||||
|
||||
if [[ -n "$(_git-status | tail -n1)" ]]; then
|
||||
SCM_DIRTY=1
|
||||
SCM_STATE=${SCM_THEME_PROMPT_DIRTY}
|
||||
SCM_STATE="${SCM_THEME_PROMPT_DIRTY?}"
|
||||
fi
|
||||
|
||||
# Output the git prompt
|
||||
SCM_PREFIX=${SCM_THEME_PROMPT_PREFIX}
|
||||
SCM_SUFFIX=${SCM_THEME_PROMPT_SUFFIX}
|
||||
echo -e "${SCM_PREFIX}${SCM_BRANCH}${SCM_STATE}${SCM_SUFFIX}"
|
||||
SCM_PREFIX="${SCM_THEME_PROMPT_PREFIX-}"
|
||||
SCM_SUFFIX="${SCM_THEME_PROMPT_SUFFIX-}"
|
||||
echo -ne "${SCM_PREFIX}${SCM_BRANCH}${SCM_STATE}${SCM_SUFFIX}"
|
||||
}
|
||||
|
||||
function git_prompt_vars {
|
||||
if ${SCM_GIT_USE_GITSTATUS} && _command_exists gitstatus_query && gitstatus_query && [[ "${VCS_STATUS_RESULT}" == "ok-sync" ]]; then
|
||||
function git_prompt_vars() {
|
||||
if [[ "${SCM_GIT_USE_GITSTATUS:-false}" != "false" ]] && _command_exists gitstatus_query && gitstatus_query && [[ "${VCS_STATUS_RESULT:-}" == "ok-sync" ]]; then
|
||||
# we can use faster gitstatus
|
||||
# use this variable in githelpers and below to choose gitstatus output
|
||||
SCM_GIT_GITSTATUS_RAN=true
|
||||
|
|
@ -251,190 +261,174 @@ function git_prompt_vars {
|
|||
|
||||
local detached_prefix
|
||||
if _git-tag &> /dev/null; then
|
||||
detached_prefix=${SCM_THEME_TAG_PREFIX}
|
||||
detached_prefix="${SCM_THEME_TAG_PREFIX}"
|
||||
else
|
||||
detached_prefix=${SCM_THEME_DETACHED_PREFIX}
|
||||
detached_prefix="${SCM_THEME_DETACHED_PREFIX}"
|
||||
fi
|
||||
SCM_BRANCH="${detached_prefix}\$(_git-friendly-ref)"
|
||||
fi
|
||||
|
||||
if [[ "${SCM_GIT_GITSTATUS_RAN}" == "true" ]]; then
|
||||
commits_behind=${VCS_STATUS_COMMITS_BEHIND}
|
||||
commits_ahead=${VCS_STATUS_COMMITS_AHEAD}
|
||||
if [[ "${SCM_GIT_GITSTATUS_RAN:-}" == "true" ]]; then
|
||||
commits_behind="${VCS_STATUS_COMMITS_BEHIND?}"
|
||||
commits_ahead="${VCS_STATUS_COMMITS_AHEAD?}"
|
||||
else
|
||||
IFS=$'\t' read -r commits_behind commits_ahead <<< "$(_git-upstream-behind-ahead)"
|
||||
fi
|
||||
if [[ "${commits_ahead}" -gt 0 ]]; then
|
||||
SCM_BRANCH+="${SCM_GIT_AHEAD_BEHIND_PREFIX_CHAR}${SCM_GIT_AHEAD_CHAR}"
|
||||
[[ "${SCM_GIT_SHOW_COMMIT_COUNT}" = "true" ]] && SCM_BRANCH+="${commits_ahead}"
|
||||
[[ "${SCM_GIT_SHOW_COMMIT_COUNT}" == "true" ]] && SCM_BRANCH+="${commits_ahead}"
|
||||
fi
|
||||
if [[ "${commits_behind}" -gt 0 ]]; then
|
||||
SCM_BRANCH+="${SCM_GIT_AHEAD_BEHIND_PREFIX_CHAR}${SCM_GIT_BEHIND_CHAR}"
|
||||
[[ "${SCM_GIT_SHOW_COMMIT_COUNT}" = "true" ]] && SCM_BRANCH+="${commits_behind}"
|
||||
[[ "${SCM_GIT_SHOW_COMMIT_COUNT}" == "true" ]] && SCM_BRANCH+="${commits_behind}"
|
||||
fi
|
||||
|
||||
if [[ "${SCM_GIT_SHOW_STASH_INFO}" = "true" ]]; then
|
||||
if [[ "${SCM_GIT_SHOW_STASH_INFO}" == "true" ]]; then
|
||||
local stash_count
|
||||
if [[ "${SCM_GIT_GITSTATUS_RAN}" == "true" ]]; then
|
||||
stash_count=${VCS_STATUS_STASHES}
|
||||
stash_count="${VCS_STATUS_STASHES?}"
|
||||
else
|
||||
stash_count="$(git stash list 2> /dev/null | wc -l | tr -d ' ')"
|
||||
fi
|
||||
[[ "${stash_count}" -gt 0 ]] && SCM_BRANCH+=" ${SCM_GIT_STASH_CHAR_PREFIX}${stash_count}${SCM_GIT_STASH_CHAR_SUFFIX}"
|
||||
fi
|
||||
|
||||
SCM_STATE=${GIT_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
|
||||
SCM_STATE="${GIT_THEME_PROMPT_CLEAN:-${SCM_THEME_PROMPT_CLEAN:-}}"
|
||||
if ! _git-hide-status; then
|
||||
if [[ "${SCM_GIT_GITSTATUS_RAN}" == "true" ]]; then
|
||||
untracked_count=${VCS_STATUS_NUM_UNTRACKED}
|
||||
unstaged_count=${VCS_STATUS_NUM_UNSTAGED}
|
||||
staged_count=${VCS_STATUS_NUM_STAGED}
|
||||
if [[ "${SCM_GIT_GITSTATUS_RAN:-}" == "true" ]]; then
|
||||
untracked_count="${VCS_STATUS_NUM_UNTRACKED?}"
|
||||
unstaged_count="${VCS_STATUS_NUM_UNSTAGED?}"
|
||||
staged_count="${VCS_STATUS_NUM_STAGED?}"
|
||||
else
|
||||
IFS=$'\t' read -r untracked_count unstaged_count staged_count <<< "$(_git-status-counts)"
|
||||
IFS=$'\t' read -r untracked_count unstaged_count staged_count < <(_git-status-counts)
|
||||
fi
|
||||
if [[ "${untracked_count}" -gt 0 || "${unstaged_count}" -gt 0 || "${staged_count}" -gt 0 ]]; then
|
||||
SCM_DIRTY=1
|
||||
if [[ "${SCM_GIT_SHOW_DETAILS}" = "true" ]]; then
|
||||
if [[ "${SCM_GIT_SHOW_DETAILS}" == "true" ]]; then
|
||||
[[ "${staged_count}" -gt 0 ]] && SCM_BRANCH+=" ${SCM_GIT_STAGED_CHAR}${staged_count}" && SCM_DIRTY=3
|
||||
[[ "${unstaged_count}" -gt 0 ]] && SCM_BRANCH+=" ${SCM_GIT_UNSTAGED_CHAR}${unstaged_count}" && SCM_DIRTY=2
|
||||
[[ "${untracked_count}" -gt 0 ]] && SCM_BRANCH+=" ${SCM_GIT_UNTRACKED_CHAR}${untracked_count}" && SCM_DIRTY=1
|
||||
fi
|
||||
SCM_STATE=${GIT_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
|
||||
SCM_STATE="${GIT_THEME_PROMPT_DIRTY:-${SCM_THEME_PROMPT_DIRTY?}}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# no if for gitstatus here, user extraction is not supported by it
|
||||
[[ "${SCM_GIT_SHOW_CURRENT_USER}" == "true" ]] && SCM_BRANCH+="$(git_user_info)"
|
||||
|
||||
SCM_PREFIX=${GIT_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
|
||||
SCM_SUFFIX=${GIT_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
|
||||
SCM_PREFIX="${GIT_THEME_PROMPT_PREFIX:-${SCM_THEME_PROMPT_PREFIX-}}"
|
||||
SCM_SUFFIX="${GIT_THEME_PROMPT_SUFFIX:-${SCM_THEME_PROMPT_SUFFIX-}}"
|
||||
|
||||
SCM_CHANGE=$(_git-short-sha 2> /dev/null || echo "")
|
||||
SCM_CHANGE=$(_git-short-sha 2> /dev/null || true)
|
||||
}
|
||||
|
||||
function p4_prompt_vars {
|
||||
function p4_prompt_vars() {
|
||||
local opened_count non_default_changes default_count \
|
||||
add_file_count edit_file_count delete_file_count
|
||||
|
||||
IFS=$'\t' read -r \
|
||||
opened_count non_default_changes default_count \
|
||||
add_file_count edit_file_count delete_file_count \
|
||||
<<< "$(_p4-opened-counts)"
|
||||
< <(_p4-opened-counts)
|
||||
if [[ "${opened_count}" -gt 0 ]]; then
|
||||
SCM_DIRTY=1
|
||||
SCM_STATE=${SCM_THEME_PROMPT_DIRTY}
|
||||
[[ "${opened_count}" -gt 0 ]] && SCM_BRANCH+=" ${SCM_P4_OPENED_CHAR}${opened_count}"
|
||||
[[ "${non_default_changes}" -gt 0 ]] && SCM_BRANCH+=" ${SCM_P4_CHANGES_CHAR}${non_default_changes}"
|
||||
[[ "${default_count}" -gt 0 ]] && SCM_BRANCH+=" ${SCM_P4_DEFAULT_CHAR}${default_count}"
|
||||
SCM_STATE="${SCM_THEME_PROMPT_DIRTY?}"
|
||||
[[ "${opened_count}" -gt 0 ]] && SCM_BRANCH+=" ${SCM_P4_OPENED_CHAR?}${opened_count}"
|
||||
[[ "${non_default_changes}" -gt 0 ]] && SCM_BRANCH+=" ${SCM_P4_CHANGES_CHAR?}${non_default_changes}"
|
||||
[[ "${default_count}" -gt 0 ]] && SCM_BRANCH+=" ${SCM_P4_DEFAULT_CHAR?}${default_count}"
|
||||
else
|
||||
SCM_DIRTY=0
|
||||
SCM_STATE=${SCM_THEME_PROMPT_DIRTY}
|
||||
SCM_STATE="${SCM_THEME_PROMPT_CLEAN?}"
|
||||
fi
|
||||
|
||||
SCM_PREFIX=${P4_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
|
||||
SCM_SUFFIX=${P4_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
|
||||
SCM_PREFIX="${P4_THEME_PROMPT_PREFIX:-${SCM_THEME_PROMPT_PREFIX-}}"
|
||||
SCM_SUFFIX="${P4_THEME_PROMPT_SUFFIX:-${SCM_THEME_PROMPT_SUFFIX-}}"
|
||||
}
|
||||
|
||||
function svn_prompt_vars {
|
||||
if [[ -n $(svn status | head -c1 2> /dev/null) ]]; then
|
||||
function svn_prompt_vars() {
|
||||
if [[ -n "$(svn status | head -c1 2> /dev/null)" ]]; then
|
||||
SCM_DIRTY=1
|
||||
SCM_STATE=${SVN_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
|
||||
SCM_STATE="${SVN_THEME_PROMPT_DIRTY:-${SCM_THEME_PROMPT_DIRTY?}}"
|
||||
else
|
||||
SCM_DIRTY=0
|
||||
SCM_STATE=${SVN_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
|
||||
SCM_STATE="${SVN_THEME_PROMPT_CLEAN:-${SCM_THEME_PROMPT_CLEAN?}}"
|
||||
fi
|
||||
SCM_PREFIX=${SVN_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
|
||||
SCM_SUFFIX=${SVN_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
|
||||
SCM_BRANCH=$(svn info --show-item=url 2> /dev/null | awk -F/ '{ for (i=0; i<=NF; i++) { if ($i == "branches" || $i == "tags" ) { print $(i+1); break }; if ($i == "trunk") { print $i; break } } }') || return
|
||||
SCM_CHANGE=$(svn info --show-item=revision 2> /dev/null)
|
||||
SCM_PREFIX="${SVN_THEME_PROMPT_PREFIX:-${SCM_THEME_PROMPT_PREFIX-}}"
|
||||
SCM_SUFFIX="${SVN_THEME_PROMPT_SUFFIX:-${SCM_THEME_PROMPT_SUFFIX-}}"
|
||||
SCM_BRANCH="$(svn info --show-item=url 2> /dev/null | awk -F/ '{ for (i=0; i<=NF; i++) { if ($i == "branches" || $i == "tags" ) { print $(i+1); break }; if ($i == "trunk") { print $i; break } } }')" || return
|
||||
SCM_CHANGE="$(svn info --show-item=revision 2> /dev/null)"
|
||||
}
|
||||
|
||||
# this functions returns absolute location of .hg directory if one exists
|
||||
# It starts in the current directory and moves its way up until it hits /.
|
||||
# If we get to / then no Mercurial repository was found.
|
||||
# Example:
|
||||
# - lets say we cd into ~/Projects/Foo/Bar
|
||||
# - .hg is located in ~/Projects/Foo/.hg
|
||||
# - get_hg_root starts at ~/Projects/Foo/Bar and sees that there is no .hg directory, so then it goes into ~/Projects/Foo
|
||||
function get_hg_root {
|
||||
local CURRENT_DIR="${PWD}"
|
||||
|
||||
while [[ "${CURRENT_DIR:-/}" != "/" ]]; do
|
||||
if [[ -d "$CURRENT_DIR/.hg" ]]; then
|
||||
echo "$CURRENT_DIR/.hg"
|
||||
return
|
||||
fi
|
||||
|
||||
CURRENT_DIR="${CURRENT_DIR%/*}"
|
||||
done
|
||||
}
|
||||
|
||||
function hg_prompt_vars {
|
||||
function hg_prompt_vars() {
|
||||
local hg_root bookmark
|
||||
if [[ -n $(hg status 2> /dev/null) ]]; then
|
||||
SCM_DIRTY=1
|
||||
SCM_STATE=${HG_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
|
||||
SCM_STATE="${HG_THEME_PROMPT_DIRTY:-${SCM_THEME_PROMPT_DIRTY?}}"
|
||||
else
|
||||
SCM_DIRTY=0
|
||||
SCM_STATE=${HG_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
|
||||
SCM_STATE="${HG_THEME_PROMPT_CLEAN:-${SCM_THEME_PROMPT_CLEAN?}}"
|
||||
fi
|
||||
SCM_PREFIX=${HG_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
|
||||
SCM_SUFFIX=${HG_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
|
||||
SCM_PREFIX="${HG_THEME_PROMPT_PREFIX:-${SCM_THEME_PROMPT_PREFIX-}}"
|
||||
SCM_SUFFIX="${HG_THEME_PROMPT_SUFFIX:-${SCM_THEME_PROMPT_SUFFIX-}}"
|
||||
|
||||
HG_ROOT=$(get_hg_root)
|
||||
hg_root="$(_bash-it-find-in-ancestor ".hg")/.hg"
|
||||
|
||||
if [ -f "$HG_ROOT/branch" ]; then
|
||||
if [[ -f "$hg_root/branch" ]]; then
|
||||
# Mercurial holds it's current branch in .hg/branch file
|
||||
SCM_BRANCH=$(< "${HG_ROOT}/branch")
|
||||
local bookmark=${HG_ROOT}/bookmarks.current
|
||||
[[ -f ${bookmark} ]] && SCM_BRANCH+=:$(< "${bookmark}")
|
||||
SCM_BRANCH=$(< "${hg_root}/branch")
|
||||
bookmark="${hg_root}/bookmarks.current"
|
||||
[[ -f "${bookmark}" ]] && SCM_BRANCH+=:$(< "${bookmark}")
|
||||
else
|
||||
SCM_BRANCH=$(hg summary 2> /dev/null | grep branch: | awk '{print $2}')
|
||||
fi
|
||||
|
||||
if [ -f "$HG_ROOT/dirstate" ]; then
|
||||
if [[ -f "$hg_root/dirstate" ]]; then
|
||||
# Mercurial holds various information about the working directory in .hg/dirstate file. More on http://mercurial.selenic.com/wiki/DirState
|
||||
SCM_CHANGE=$(hexdump -vn 10 -e '1/1 "%02x"' "$HG_ROOT/dirstate" | cut -c-12)
|
||||
SCM_CHANGE=$(hexdump -vn 10 -e '1/1 "%02x"' "$hg_root/dirstate" | cut -c-12)
|
||||
else
|
||||
SCM_CHANGE=$(hg summary 2> /dev/null | grep parent: | awk '{print $2}')
|
||||
fi
|
||||
}
|
||||
|
||||
function nvm_version_prompt {
|
||||
function nvm_version_prompt() {
|
||||
local node
|
||||
if _is_function nvm; then
|
||||
node=$(nvm current 2> /dev/null)
|
||||
[[ "${node}" == "system" ]] && return
|
||||
echo -e "${NVM_THEME_PROMPT_PREFIX}${node}${NVM_THEME_PROMPT_SUFFIX}"
|
||||
echo -ne "${NVM_THEME_PROMPT_PREFIX-}${node}${NVM_THEME_PROMPT_SUFFIX-}"
|
||||
fi
|
||||
}
|
||||
|
||||
function node_version_prompt {
|
||||
echo -e "$(nvm_version_prompt)"
|
||||
function node_version_prompt() {
|
||||
nvm_version_prompt
|
||||
}
|
||||
|
||||
function rvm_version_prompt {
|
||||
if which rvm &> /dev/null; then
|
||||
rvm=$(rvm-prompt) || return
|
||||
if [ -n "$rvm" ]; then
|
||||
echo -e "$RVM_THEME_PROMPT_PREFIX$rvm$RVM_THEME_PROMPT_SUFFIX"
|
||||
function rvm_version_prompt() {
|
||||
if _command_exists rvm; then
|
||||
rvm="$(rvm-prompt)" || return
|
||||
if [[ -n "$rvm" ]]; then
|
||||
echo -ne "${RVM_THEME_PROMPT_PREFIX-}${rvm}${RVM_THEME_PROMPT_SUFFIX-}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function rbenv_version_prompt {
|
||||
if which rbenv &> /dev/null; then
|
||||
function rbenv_version_prompt() {
|
||||
if _command_exists rbenv; then
|
||||
rbenv=$(rbenv version-name) || return
|
||||
rbenv commands | grep -q gemset && gemset=$(rbenv gemset active 2> /dev/null) && rbenv="$rbenv@${gemset%% *}"
|
||||
if [ "$rbenv" != "system" ]; then
|
||||
echo -e "$RBENV_THEME_PROMPT_PREFIX$rbenv$RBENV_THEME_PROMPT_SUFFIX"
|
||||
if [[ "$rbenv" != "system" ]]; then
|
||||
echo -ne "${RBENV_THEME_PROMPT_PREFIX-}${rbenv}${RBENV_THEME_PROMPT_SUFFIX-}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function rbfu_version_prompt {
|
||||
if [[ $RBFU_RUBY_VERSION ]]; then
|
||||
echo -e "${RBFU_THEME_PROMPT_PREFIX}${RBFU_RUBY_VERSION}${RBFU_THEME_PROMPT_SUFFIX}"
|
||||
function rbfu_version_prompt() {
|
||||
if [[ -n "${RBFU_RUBY_VERSION:-}" ]]; then
|
||||
echo -ne "${RBFU_THEME_PROMPT_PREFIX-}${RBFU_RUBY_VERSION}${RBFU_THEME_PROMPT_SUFFIX-}"
|
||||
fi
|
||||
}
|
||||
|
||||
function chruby_version_prompt {
|
||||
function chruby_version_prompt() {
|
||||
if _is_function chruby; then
|
||||
if _is_function chruby_auto; then
|
||||
chruby_auto
|
||||
|
|
@ -445,141 +439,142 @@ function chruby_version_prompt {
|
|||
if ! chruby | grep -q '\*'; then
|
||||
ruby_version="${ruby_version} (system)"
|
||||
fi
|
||||
echo -e "${CHRUBY_THEME_PROMPT_PREFIX}${ruby_version}${CHRUBY_THEME_PROMPT_SUFFIX}"
|
||||
echo -ne "${CHRUBY_THEME_PROMPT_PREFIX-}${ruby_version}${CHRUBY_THEME_PROMPT_SUFFIX-}"
|
||||
fi
|
||||
}
|
||||
|
||||
function ruby_version_prompt {
|
||||
if [[ "${THEME_SHOW_RUBY_PROMPT}" = "true" ]]; then
|
||||
echo -e "$(rbfu_version_prompt)$(rbenv_version_prompt)$(rvm_version_prompt)$(chruby_version_prompt)"
|
||||
function ruby_version_prompt() {
|
||||
if [[ "${THEME_SHOW_RUBY_PROMPT:-}" == "true" ]]; then
|
||||
rbfu_version_prompt
|
||||
rbenv_version_prompt
|
||||
rvm_version_prompt
|
||||
chruby_version_prompt
|
||||
fi
|
||||
}
|
||||
|
||||
function k8s_context_prompt {
|
||||
echo -e "$(kubectl config current-context 2> /dev/null)"
|
||||
function k8s_context_prompt() {
|
||||
kubectl config current-context 2> /dev/null
|
||||
}
|
||||
|
||||
function k8s_namespace_prompt {
|
||||
echo -e "$(kubectl config view --minify --output 'jsonpath={..namespace}' 2> /dev/null)"
|
||||
function k8s_namespace_prompt() {
|
||||
kubectl config view --minify --output 'jsonpath={..namespace}' 2> /dev/null
|
||||
}
|
||||
|
||||
function virtualenv_prompt {
|
||||
if [[ -n "$VIRTUAL_ENV" ]]; then
|
||||
virtualenv=$(basename "$VIRTUAL_ENV")
|
||||
echo -e "$VIRTUALENV_THEME_PROMPT_PREFIX$virtualenv$VIRTUALENV_THEME_PROMPT_SUFFIX"
|
||||
function virtualenv_prompt() {
|
||||
local virtualenv
|
||||
if [[ -n "${VIRTUAL_ENV:-}" ]]; then
|
||||
virtualenv="${VIRTUAL_ENV##*/}"
|
||||
echo -ne "${VIRTUALENV_THEME_PROMPT_PREFIX-}${virtualenv}${VIRTUALENV_THEME_PROMPT_SUFFIX-}"
|
||||
fi
|
||||
}
|
||||
|
||||
function condaenv_prompt {
|
||||
if [[ $CONDA_DEFAULT_ENV ]]; then
|
||||
echo -e "${CONDAENV_THEME_PROMPT_PREFIX}${CONDA_DEFAULT_ENV}${CONDAENV_THEME_PROMPT_SUFFIX}"
|
||||
function condaenv_prompt() {
|
||||
if [[ -n "${CONDA_DEFAULT_ENV:-}" ]]; then
|
||||
echo -ne "${CONDAENV_THEME_PROMPT_PREFIX-}${CONDA_DEFAULT_ENV}${CONDAENV_THEME_PROMPT_SUFFIX-}"
|
||||
fi
|
||||
}
|
||||
|
||||
function py_interp_prompt {
|
||||
py_version=$(python --version 2>&1 | awk 'NR==1{print "py-"$2;}') || return
|
||||
echo -e "${PYTHON_THEME_PROMPT_PREFIX}${py_version}${PYTHON_THEME_PROMPT_SUFFIX}"
|
||||
function py_interp_prompt() {
|
||||
local py_version
|
||||
py_version="$(python --version 2>&1 | awk 'NR==1{print "py-"$2;}')" || return
|
||||
echo -ne "${PYTHON_THEME_PROMPT_PREFIX-}${py_version}${PYTHON_THEME_PROMPT_SUFFIX-}"
|
||||
}
|
||||
|
||||
function python_version_prompt {
|
||||
echo -e "$(virtualenv_prompt)$(condaenv_prompt)$(py_interp_prompt)"
|
||||
function python_version_prompt() {
|
||||
virtualenv_prompt
|
||||
condaenv_prompt
|
||||
py_interp_prompt
|
||||
}
|
||||
|
||||
function git_user_info {
|
||||
function git_user_info() {
|
||||
local current_user
|
||||
# support two or more initials, set by 'git pair' plugin
|
||||
SCM_CURRENT_USER=$(git config user.initials | sed 's% %+%')
|
||||
current_user="$(git config user.initials | sed 's% %+%')"
|
||||
# if `user.initials` weren't set, attempt to extract initials from `user.name`
|
||||
[[ -z "${SCM_CURRENT_USER}" ]] && SCM_CURRENT_USER=$(printf "%s" "$(for word in $(git config user.name | PERLIO=:utf8 perl -pe '$_=lc'); do printf "%s" "${word:0:1}"; done)")
|
||||
[[ -n "${SCM_CURRENT_USER}" ]] && printf "%s" "$SCM_THEME_CURRENT_USER_PREFFIX$SCM_CURRENT_USER$SCM_THEME_CURRENT_USER_SUFFIX"
|
||||
[[ -z "${current_user}" ]] && current_user=$(printf "%s" "$(for word in $(git config user.name | PERLIO=:utf8 perl -pe '$_=lc'); do printf "%s" "${word:0:1}"; done)")
|
||||
[[ -n "${current_user}" ]] && printf "%s" "${SCM_THEME_CURRENT_USER_PREFFIX-}${current_user}${SCM_THEME_CURRENT_USER_SUFFIX-}"
|
||||
}
|
||||
|
||||
function clock_char {
|
||||
CLOCK_CHAR=${THEME_CLOCK_CHAR:-"⌚"}
|
||||
CLOCK_CHAR_COLOR=${THEME_CLOCK_CHAR_COLOR:-"$normal"}
|
||||
SHOW_CLOCK_CHAR=${THEME_SHOW_CLOCK_CHAR:-"true"}
|
||||
function clock_char() {
|
||||
local clock_char clock_char_color show_clock_char
|
||||
clock_char="${THEME_CLOCK_CHAR:-⌚}"
|
||||
clock_char_color="${THEME_CLOCK_CHAR_COLOR:-${normal:-}}"
|
||||
show_clock_char="${THEME_SHOW_CLOCK_CHAR:-"true"}"
|
||||
|
||||
if [[ "${SHOW_CLOCK_CHAR}" = "true" ]]; then
|
||||
echo -e "${CLOCK_CHAR_COLOR}${CLOCK_CHAR_THEME_PROMPT_PREFIX}${CLOCK_CHAR}${CLOCK_CHAR_THEME_PROMPT_SUFFIX}"
|
||||
if [[ "${show_clock_char}" == "true" ]]; then
|
||||
echo -ne "${clock_char_color}${CLOCK_CHAR_THEME_PROMPT_PREFIX-}${clock_char}${CLOCK_CHAR_THEME_PROMPT_SUFFIX-}"
|
||||
fi
|
||||
}
|
||||
|
||||
function clock_prompt {
|
||||
CLOCK_COLOR=${THEME_CLOCK_COLOR:-"$normal"}
|
||||
CLOCK_FORMAT=${THEME_CLOCK_FORMAT:-"%H:%M:%S"}
|
||||
[ -z "$THEME_SHOW_CLOCK" ] && THEME_SHOW_CLOCK=${THEME_CLOCK_CHECK:-"true"}
|
||||
SHOW_CLOCK=$THEME_SHOW_CLOCK
|
||||
function clock_prompt() {
|
||||
local clock_color="${THEME_CLOCK_COLOR:-${normal?}}"
|
||||
local clock_format="${THEME_CLOCK_FORMAT:-"%H:%M:%S"}"
|
||||
local show_clock="${THEME_SHOW_CLOCK:-${THEME_CLOCK_CHECK:-true}}"
|
||||
local clock_string="\D{${clock_format}}"
|
||||
|
||||
if [[ "${SHOW_CLOCK}" = "true" ]]; then
|
||||
CLOCK_STRING=$(date +"${CLOCK_FORMAT}")
|
||||
echo -e "${CLOCK_COLOR}${CLOCK_THEME_PROMPT_PREFIX}${CLOCK_STRING}${CLOCK_THEME_PROMPT_SUFFIX}"
|
||||
if [[ "${show_clock}" == "true" ]]; then
|
||||
echo -ne "${clock_color}${CLOCK_THEME_PROMPT_PREFIX-}${clock_string}${CLOCK_THEME_PROMPT_SUFFIX-}"
|
||||
fi
|
||||
}
|
||||
|
||||
function user_host_prompt {
|
||||
if [[ "${THEME_SHOW_USER_HOST}" = "true" ]]; then
|
||||
echo -e "${USER_HOST_THEME_PROMPT_PREFIX}\u@\h${USER_HOST_THEME_PROMPT_SUFFIX}"
|
||||
function user_host_prompt() {
|
||||
if [[ "${THEME_SHOW_USER_HOST:-false}" == "true" ]]; then
|
||||
echo -ne "${USER_HOST_THEME_PROMPT_PREFIX-}\u@${THEME_PROMPT_HOST:-\h}${USER_HOST_THEME_PROMPT_SUFFIX-}"
|
||||
fi
|
||||
}
|
||||
|
||||
# backwards-compatibility
|
||||
function git_prompt_info {
|
||||
function git_prompt_info() {
|
||||
_git-hide-status && return
|
||||
git_prompt_vars
|
||||
echo -e "${SCM_PREFIX}${SCM_BRANCH}${SCM_STATE}${SCM_SUFFIX}"
|
||||
echo -ne "${SCM_PREFIX?}${SCM_BRANCH?}${SCM_STATE?}${SCM_SUFFIX?}"
|
||||
}
|
||||
|
||||
function p4_prompt_info() {
|
||||
p4_prompt_vars
|
||||
echo -e "${SCM_PREFIX}${SCM_BRANCH}:${SCM_CHANGE}${SCM_STATE}${SCM_SUFFIX}"
|
||||
echo -ne "${SCM_PREFIX?}${SCM_BRANCH?}:${SCM_CHANGE?}${SCM_STATE?}${SCM_SUFFIX?}"
|
||||
}
|
||||
|
||||
function svn_prompt_info {
|
||||
function svn_prompt_info() {
|
||||
svn_prompt_vars
|
||||
echo -e "${SCM_PREFIX}${SCM_BRANCH}${SCM_STATE}${SCM_SUFFIX}"
|
||||
echo -ne "${SCM_PREFIX?}${SCM_BRANCH?}${SCM_STATE?}${SCM_SUFFIX?}"
|
||||
}
|
||||
|
||||
function hg_prompt_info() {
|
||||
hg_prompt_vars
|
||||
echo -e "${SCM_PREFIX}${SCM_BRANCH}:${SCM_CHANGE#*:}${SCM_STATE}${SCM_SUFFIX}"
|
||||
echo -ne "${SCM_PREFIX?}${SCM_BRANCH?}:${SCM_CHANGE#*:}${SCM_STATE?}${SCM_SUFFIX?}"
|
||||
}
|
||||
|
||||
function scm_char {
|
||||
function scm_char() {
|
||||
scm_prompt_char
|
||||
echo -e "${SCM_THEME_CHAR_PREFIX}${SCM_CHAR}${SCM_THEME_CHAR_SUFFIX}"
|
||||
echo -ne "${SCM_THEME_CHAR_PREFIX?}${SCM_CHAR?}${SCM_THEME_CHAR_SUFFIX?}"
|
||||
}
|
||||
|
||||
function prompt_char {
|
||||
function prompt_char() {
|
||||
scm_char
|
||||
}
|
||||
|
||||
function battery_char {
|
||||
if [[ "${THEME_BATTERY_PERCENTAGE_CHECK}" = true ]]; then
|
||||
echo -e "${bold_red:-}$(battery_percentage)%"
|
||||
function battery_char() {
|
||||
# The battery_char function depends on the presence of the battery_percentage function.
|
||||
if [[ "${THEME_BATTERY_PERCENTAGE_CHECK}" == true ]] && _command_exists battery_percentage; then
|
||||
echo -ne "${bold_red?}$(battery_percentage)%"
|
||||
else
|
||||
false
|
||||
fi
|
||||
}
|
||||
|
||||
if ! _command_exists battery_charge; then
|
||||
# if user has installed battery plugin, skip this...
|
||||
function battery_charge() {
|
||||
# no op
|
||||
echo -n
|
||||
: # no op
|
||||
}
|
||||
fi
|
||||
|
||||
# The battery_char function depends on the presence of the battery_percentage function.
|
||||
# If battery_percentage is not defined, then define battery_char as a no-op.
|
||||
if ! _command_exists battery_percentage; then
|
||||
function battery_char() {
|
||||
# no op
|
||||
echo -n
|
||||
}
|
||||
fi
|
||||
|
||||
function aws_profile {
|
||||
if [[ $AWS_DEFAULT_PROFILE ]]; then
|
||||
echo -e "${AWS_DEFAULT_PROFILE}"
|
||||
function aws_profile() {
|
||||
if [[ -n "${AWS_DEFAULT_PROFILE:-}" ]]; then
|
||||
echo -ne "${AWS_DEFAULT_PROFILE}"
|
||||
else
|
||||
echo -e "default"
|
||||
echo -ne "default"
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,69 +0,0 @@
|
|||
# shellcheck shell=bash
|
||||
|
||||
if [ -z "$BASH_IT_COMMAND_DURATION" ] || [ "$BASH_IT_COMMAND_DURATION" != true ]; then
|
||||
_command_duration() {
|
||||
echo -n
|
||||
}
|
||||
return
|
||||
fi
|
||||
|
||||
# Define tmp dir and file
|
||||
COMMAND_DURATION_TMPDIR="${TMPDIR:-/tmp}"
|
||||
COMMAND_DURATION_FILE="${COMMAND_DURATION_FILE:-$COMMAND_DURATION_TMPDIR/bashit_theme_execution_$BASHPID}"
|
||||
|
||||
COMMAND_DURATION_ICON=${COMMAND_DURATION_ICON:-' '}
|
||||
COMMAND_DURATION_MIN_SECONDS=${COMMAND_DURATION_MIN_SECONDS:-'1'}
|
||||
|
||||
trap _command_duration_delete_temp_file EXIT HUP INT TERM
|
||||
|
||||
_command_duration_delete_temp_file() {
|
||||
if [[ -f "$COMMAND_DURATION_FILE" ]]; then
|
||||
rm -f "$COMMAND_DURATION_FILE"
|
||||
fi
|
||||
}
|
||||
|
||||
_command_duration_pre_exec() {
|
||||
date +%s.%1N > "$COMMAND_DURATION_FILE"
|
||||
}
|
||||
|
||||
_command_duration() {
|
||||
local command_duration command_start current_time
|
||||
local minutes seconds deciseconds
|
||||
local command_start_sseconds current_time_seconds command_start_deciseconds current_time_deciseconds
|
||||
current_time=$(date +%s.%1N)
|
||||
|
||||
if [[ -f "$COMMAND_DURATION_FILE" ]]; then
|
||||
command_start=$(< "$COMMAND_DURATION_FILE")
|
||||
command_start_sseconds=${command_start%.*}
|
||||
current_time_seconds=${current_time%.*}
|
||||
|
||||
command_start_deciseconds=$((10#${command_start#*.}))
|
||||
current_time_deciseconds=$((10#${current_time#*.}))
|
||||
|
||||
# seconds
|
||||
command_duration=$((current_time_seconds - command_start_sseconds))
|
||||
|
||||
if ((current_time_deciseconds >= command_start_deciseconds)); then
|
||||
deciseconds=$(((current_time_deciseconds - command_start_deciseconds)))
|
||||
else
|
||||
((command_duration -= 1))
|
||||
deciseconds=$((10 - ((command_start_deciseconds - current_time_deciseconds))))
|
||||
fi
|
||||
command rm "$COMMAND_DURATION_FILE"
|
||||
else
|
||||
command_duration=0
|
||||
fi
|
||||
|
||||
if ((command_duration > 0)); then
|
||||
minutes=$((command_duration / 60))
|
||||
seconds=$((command_duration % 60))
|
||||
fi
|
||||
|
||||
if ((minutes > 0)); then
|
||||
printf "%s%s%dm %ds" "$COMMAND_DURATION_ICON" "$COMMAND_DURATION_COLOR" "$minutes" "$seconds"
|
||||
elif ((seconds >= COMMAND_DURATION_MIN_SECONDS)); then
|
||||
printf "%s%s%d.%01ds" "$COMMAND_DURATION_ICON" "$COMMAND_DURATION_COLOR" "$seconds" "$deciseconds"
|
||||
fi
|
||||
}
|
||||
|
||||
preexec_functions+=(_command_duration_pre_exec)
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
|
||||
function _git-symbolic-ref {
|
||||
function _git-symbolic-ref() {
|
||||
git symbolic-ref -q HEAD 2> /dev/null
|
||||
}
|
||||
|
||||
|
|
@ -8,63 +8,68 @@ function _git-symbolic-ref {
|
|||
# but this can be different when two branches are pointing to the
|
||||
# same commit. _git-branch is used to explicitly choose the checked-out
|
||||
# branch.
|
||||
function _git-branch {
|
||||
if [[ "${SCM_GIT_GITSTATUS_RAN}" == "true" ]]; then
|
||||
test -n "${VCS_STATUS_LOCAL_BRANCH}" && echo "${VCS_STATUS_LOCAL_BRANCH}" || return 1
|
||||
function _git-branch() {
|
||||
if [[ "${SCM_GIT_GITSTATUS_RAN:-}" == "true" ]]; then
|
||||
if [[ -n "${VCS_STATUS_LOCAL_BRANCH:-}" ]]; then
|
||||
echo "${VCS_STATUS_LOCAL_BRANCH}"
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
git symbolic-ref -q --short HEAD 2> /dev/null || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
function _git-tag {
|
||||
if [[ "${SCM_GIT_GITSTATUS_RAN}" == "true" ]]; then
|
||||
test -n "${VCS_STATUS_TAG}" && echo "${VCS_STATUS_TAG}"
|
||||
function _git-tag() {
|
||||
if [[ "${SCM_GIT_GITSTATUS_RAN:-}" == "true" ]]; then
|
||||
if [[ -n "${VCS_STATUS_TAG:-}" ]]; then
|
||||
echo "${VCS_STATUS_TAG}"
|
||||
fi
|
||||
else
|
||||
git describe --tags --exact-match 2> /dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
function _git-commit-description {
|
||||
function _git-commit-description() {
|
||||
git describe --contains --all 2> /dev/null
|
||||
}
|
||||
|
||||
function _git-short-sha {
|
||||
if [[ "${SCM_GIT_GITSTATUS_RAN}" == "true" ]]; then
|
||||
echo ${VCS_STATUS_COMMIT:0:7}
|
||||
function _git-short-sha() {
|
||||
if [[ "${SCM_GIT_GITSTATUS_RAN:-}" == "true" ]]; then
|
||||
echo "${VCS_STATUS_COMMIT:0:7}"
|
||||
else
|
||||
git rev-parse --short HEAD
|
||||
fi
|
||||
}
|
||||
|
||||
# Try the checked-out branch first to avoid collision with branches pointing to the same ref.
|
||||
function _git-friendly-ref {
|
||||
if [[ "${SCM_GIT_GITSTATUS_RAN}" == "true" ]]; then
|
||||
function _git-friendly-ref() {
|
||||
if [[ "${SCM_GIT_GITSTATUS_RAN:-}" == "true" ]]; then
|
||||
_git-branch || _git-tag || _git-short-sha # there is no tag based describe output in gitstatus
|
||||
else
|
||||
_git-branch || _git-tag || _git-commit-description || _git-short-sha
|
||||
fi
|
||||
}
|
||||
|
||||
function _git-num-remotes {
|
||||
function _git-num-remotes() {
|
||||
git remote | wc -l
|
||||
}
|
||||
|
||||
function _git-upstream {
|
||||
function _git-upstream() {
|
||||
local ref
|
||||
ref="$(_git-symbolic-ref)" || return 1
|
||||
git for-each-ref --format="%(upstream:short)" "${ref}"
|
||||
}
|
||||
|
||||
function _git-upstream-remote {
|
||||
local upstream
|
||||
function _git-upstream-remote() {
|
||||
local upstream branch
|
||||
upstream="$(_git-upstream)" || return 1
|
||||
|
||||
local branch
|
||||
branch="$(_git-upstream-branch)" || return 1
|
||||
echo "${upstream%"/${branch}"}"
|
||||
}
|
||||
|
||||
function _git-upstream-branch {
|
||||
function _git-upstream-branch() {
|
||||
local ref
|
||||
ref="$(_git-symbolic-ref)" || return 1
|
||||
|
||||
|
|
@ -74,25 +79,27 @@ function _git-upstream-branch {
|
|||
git for-each-ref --format="%(upstream:strip=3)" "${ref}" 2> /dev/null || git for-each-ref --format="%(upstream)" "${ref}" | sed -e "s/.*\/.*\/.*\///"
|
||||
}
|
||||
|
||||
function _git-upstream-behind-ahead {
|
||||
function _git-upstream-behind-ahead() {
|
||||
git rev-list --left-right --count "$(_git-upstream)...HEAD" 2> /dev/null
|
||||
}
|
||||
|
||||
function _git-upstream-branch-gone {
|
||||
function _git-upstream-branch-gone() {
|
||||
[[ "$(git status -s -b | sed -e 's/.* //')" == "[gone]" ]]
|
||||
}
|
||||
|
||||
function _git-hide-status {
|
||||
function _git-hide-status() {
|
||||
[[ "$(git config --get bash-it.hide-status)" == "1" ]]
|
||||
}
|
||||
|
||||
function _git-status {
|
||||
function _git-status() {
|
||||
local git_status_flags=
|
||||
[[ "${SCM_GIT_IGNORE_UNTRACKED}" = "true" ]] && git_status_flags='-uno' || true
|
||||
git status --porcelain ${git_status_flags} 2> /dev/null
|
||||
if [[ "${SCM_GIT_IGNORE_UNTRACKED:-}" == "true" ]]; then
|
||||
git_status_flags='-uno'
|
||||
fi
|
||||
git status --porcelain "${git_status_flags:---}" 2> /dev/null
|
||||
}
|
||||
|
||||
function _git-status-counts {
|
||||
function _git-status-counts() {
|
||||
_git-status | awk '
|
||||
BEGIN {
|
||||
untracked=0;
|
||||
|
|
@ -116,85 +123,51 @@ function _git-status-counts {
|
|||
}'
|
||||
}
|
||||
|
||||
function _git-remote-info {
|
||||
|
||||
function _git-remote-info() {
|
||||
local same_branch_name="" branch_prefix
|
||||
# prompt handling only, reimplement because patching the routine below gets ugly
|
||||
if [[ "${SCM_GIT_GITSTATUS_RAN}" == "true" ]]; then
|
||||
[[ "${VCS_STATUS_REMOTE_NAME}" == "" ]] && return
|
||||
[[ "${VCS_STATUS_LOCAL_BRANCH}" == "${VCS_STATUS_REMOTE_BRANCH}" ]] && local same_branch_name=true
|
||||
local same_branch_name=
|
||||
[[ "${VCS_STATUS_LOCAL_BRANCH}" == "${VCS_STATUS_REMOTE_BRANCH}" ]] && same_branch_name=true
|
||||
if [[ "${SCM_GIT_GITSTATUS_RAN:-}" == "true" ]]; then
|
||||
[[ "${VCS_STATUS_REMOTE_NAME?}" == "" ]] && return
|
||||
[[ "${VCS_STATUS_LOCAL_BRANCH?}" == "${VCS_STATUS_REMOTE_BRANCH?}" ]] && same_branch_name=true
|
||||
# no multiple remote support in gitstatusd
|
||||
if [[ "${SCM_GIT_SHOW_REMOTE_INFO}" = "true" || "${SCM_GIT_SHOW_REMOTE_INFO}" = "auto" ]]; then
|
||||
if [[ "${same_branch_name}" != "true" ]]; then
|
||||
remote_info="${VCS_STATUS_REMOTE_NAME}/${VCS_STATUS_REMOTE_BRANCH}"
|
||||
if [[ "${SCM_GIT_SHOW_REMOTE_INFO:-}" == "true" || "${SCM_GIT_SHOW_REMOTE_INFO:-}" == "auto" ]]; then
|
||||
if [[ ${same_branch_name:-} != "true" ]]; then
|
||||
remote_info="${VCS_STATUS_REMOTE_NAME?}/${VCS_STATUS_REMOTE_BRANCH?}"
|
||||
else
|
||||
remote_info="${VCS_STATUS_REMOTE_NAME}"
|
||||
remote_info="${VCS_STATUS_REMOTE_NAME?}"
|
||||
fi
|
||||
elif [[ ${same_branch_name} != "true" ]]; then
|
||||
remote_info="${VCS_STATUS_REMOTE_BRANCH}"
|
||||
elif [[ ${same_branch_name:-} != "true" ]]; then
|
||||
remote_info="${VCS_STATUS_REMOTE_BRANCH?}"
|
||||
fi
|
||||
if [[ -n "${remote_info:-}" ]];then
|
||||
if [[ -n "${remote_info:-}" ]]; then
|
||||
# no support for gone remote branches in gitstatusd
|
||||
local branch_prefix="${SCM_THEME_BRANCH_TRACK_PREFIX}"
|
||||
echo "${branch_prefix}${remote_info}"
|
||||
branch_prefix="${SCM_THEME_BRANCH_TRACK_PREFIX:-}"
|
||||
echo "${branch_prefix}${remote_info:-}"
|
||||
fi
|
||||
else
|
||||
[[ "$(_git-upstream)" == "" ]] && return
|
||||
|
||||
[[ "$(_git-branch)" == "$(_git-upstream-branch)" ]] && local same_branch_name=true
|
||||
local same_branch_name=
|
||||
[[ "$(_git-branch)" == "$(_git-upstream-branch)" ]] && same_branch_name=true
|
||||
if [[ ("${SCM_GIT_SHOW_REMOTE_INFO}" = "auto" && "$(_git-num-remotes)" -ge 2) ||
|
||||
"${SCM_GIT_SHOW_REMOTE_INFO}" = "true" ]]; then
|
||||
if [[ "${same_branch_name}" != "true" ]]; then
|
||||
remote_info="\$(_git-upstream)"
|
||||
if [[ ("${SCM_GIT_SHOW_REMOTE_INFO}" == "auto" && "$(_git-num-remotes)" -ge 2) ||
|
||||
"${SCM_GIT_SHOW_REMOTE_INFO}" == "true" ]]; then
|
||||
if [[ ${same_branch_name:-} != "true" ]]; then
|
||||
# shellcheck disable=SC2016
|
||||
remote_info='$(_git-upstream)'
|
||||
else
|
||||
remote_info="$(_git-upstream-remote)"
|
||||
fi
|
||||
elif [[ ${same_branch_name} != "true" ]]; then
|
||||
remote_info="\$(_git-upstream-branch)"
|
||||
elif [[ ${same_branch_name:-} != "true" ]]; then
|
||||
# shellcheck disable=SC2016
|
||||
remote_info='$(_git-upstream-branch)'
|
||||
fi
|
||||
if [[ -n "${remote_info:-}" ]];then
|
||||
if [[ -n "${remote_info:-}" ]]; then
|
||||
local branch_prefix
|
||||
if _git-upstream-branch-gone; then
|
||||
branch_prefix="${SCM_THEME_BRANCH_GONE_PREFIX}"
|
||||
branch_prefix="${SCM_THEME_BRANCH_GONE_PREFIX:-}"
|
||||
else
|
||||
branch_prefix="${SCM_THEME_BRANCH_TRACK_PREFIX}"
|
||||
branch_prefix="${SCM_THEME_BRANCH_TRACK_PREFIX:-}"
|
||||
fi
|
||||
echo "${branch_prefix}${remote_info}"
|
||||
echo "${branch_prefix}${remote_info:-}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Unused by bash-it, present for API compatibility
|
||||
function git_status_summary {
|
||||
awk '
|
||||
BEGIN {
|
||||
untracked=0;
|
||||
unstaged=0;
|
||||
staged=0;
|
||||
}
|
||||
{
|
||||
if (!after_first && $0 ~ /^##.+/) {
|
||||
print $0
|
||||
seen_header = 1
|
||||
} else if ($0 ~ /^\?\? .+/) {
|
||||
untracked += 1
|
||||
} else {
|
||||
if ($0 ~ /^.[^ ] .+/) {
|
||||
unstaged += 1
|
||||
}
|
||||
if ($0 ~ /^[^ ]. .+/) {
|
||||
staged += 1
|
||||
}
|
||||
}
|
||||
after_first = 1
|
||||
}
|
||||
END {
|
||||
if (!seen_header) {
|
||||
print
|
||||
}
|
||||
print untracked "\t" unstaged "\t" staged
|
||||
}'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
# shellcheck shell=bash
|
||||
|
||||
if _command_exists oh-my-posh; then
|
||||
export POSH_THEME=${POSH_THEME:-https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/v$(oh-my-posh --version)/themes/jandedobbeleer.omp.json}
|
||||
eval "$(oh-my-posh --init --shell bash --config "${POSH_THEME}")"
|
||||
else
|
||||
_log_warning "The oh-my-posh binary was not found on your PATH. Falling back to your existing PS1, please see the docs for more info."
|
||||
fi
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
|
||||
function _p4-opened {
|
||||
timeout 2.0s p4 opened -s 2> /dev/null
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
# git branch parser
|
||||
function parse_git_branch() {
|
||||
echo -e "\033[1;34m$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/')\033[0m"
|
||||
echo -e "\[\033[1;34m\]$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/')\[\033[0m\]"
|
||||
}
|
||||
|
||||
function parse_git_branch_no_color() {
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
# shellcheck shell=bash
|
||||
|
||||
# port of zork theme
|
||||
|
||||
# set colors for use throughout the prompt
|
||||
|
|
@ -50,7 +52,7 @@ function is_integer() { # helper function for todo-txt-count
|
|||
|
||||
todo_txt_count() {
|
||||
if `hash todo.sh 2>&-`; then # is todo.sh installed
|
||||
count=`todo.sh ls | egrep "TODO: [0-9]+ of ([0-9]+) tasks shown" | awk '{ print $4 }'`
|
||||
count=`todo.sh ls | grep -E "TODO: [0-9]+ of ([0-9]+) tasks shown" | awk '{ print $4 }'`
|
||||
if is_integer $count; then # did we get a sane answer back
|
||||
echo "${BRACKET_COLOR}[${STRING_COLOR}T:$count${BRACKET_COLOR}]$normal"
|
||||
fi
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue