Lots of zsh changes
This commit is contained in:
parent
cd61fb7ff4
commit
4893824aff
15 changed files with 817 additions and 158 deletions
|
@ -21,4 +21,3 @@ alias -s gitignore=$EDITOR
|
|||
|
||||
alias -s json=$EDITOR
|
||||
|
||||
#unalias gf
|
||||
|
|
6
shells/zsh/includes/auto-notify.zsh
Normal file
6
shells/zsh/includes/auto-notify.zsh
Normal file
|
@ -0,0 +1,6 @@
|
|||
source "$ZSH_FOLDER/plugins/zsh-auto-notify/auto-notify.plugin.zsh"
|
||||
export AUTO_NOTIFY_THRESHOLD=5
|
||||
export AUTO_NOTIFY_TITLE="Hey! %command has just finished"
|
||||
export AUTO_NOTIFY_BODY="It completed in %elapsed seconds with exit code %exit_code"
|
||||
AUTO_NOTIFY_IGNORE+=("bat" "zathura" "libreoffice" "lf")
|
||||
disable_auto_notify
|
2
shells/zsh/includes/autoSuggest.zsh
Normal file
2
shells/zsh/includes/autoSuggest.zsh
Normal file
|
@ -0,0 +1,2 @@
|
|||
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8'
|
||||
source "$ZSH_FOLDER/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh"
|
373
shells/zsh/includes/colors.zsh
Executable file
373
shells/zsh/includes/colors.zsh
Executable file
|
@ -0,0 +1,373 @@
|
|||
# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8
|
||||
################################################################
|
||||
# Color functions
|
||||
# This file holds some color-functions for
|
||||
# the powerlevel9k-ZSH-theme
|
||||
# https://github.com/bhilburn/powerlevel9k
|
||||
# Modified my jh
|
||||
################################################################
|
||||
|
||||
typeset -gAh __JH_COLORS
|
||||
# https://jonasjacek.github.io/colors/
|
||||
# use color names by default to allow dark/light themes to adjust colors based on names
|
||||
__JH_COLORS=(
|
||||
black 000
|
||||
red 001
|
||||
green 002
|
||||
yellow 003
|
||||
blue 004
|
||||
magenta 005
|
||||
cyan 006
|
||||
white 007
|
||||
grey 008
|
||||
maroon 009
|
||||
lime 010
|
||||
olive 011
|
||||
navy 012
|
||||
fuchsia 013
|
||||
purple 013
|
||||
aqua 014
|
||||
teal 014
|
||||
silver 015
|
||||
grey0 016
|
||||
navyblue 017
|
||||
darkblue 018
|
||||
blue3 019
|
||||
blue3 020
|
||||
blue1 021
|
||||
darkgreen 022
|
||||
deepskyblue4 023
|
||||
deepskyblue4 024
|
||||
deepskyblue4 025
|
||||
dodgerblue3 026
|
||||
dodgerblue2 027
|
||||
green4 028
|
||||
springgreen4 029
|
||||
turquoise4 030
|
||||
deepskyblue3 031
|
||||
deepskyblue3 032
|
||||
dodgerblue1 033
|
||||
green3 034
|
||||
springgreen3 035
|
||||
darkcyan 036
|
||||
lightseagreen 037
|
||||
deepskyblue2 038
|
||||
deepskyblue1 039
|
||||
green3 040
|
||||
springgreen3 041
|
||||
springgreen2 042
|
||||
cyan3 043
|
||||
darkturquoise 044
|
||||
turquoise2 045
|
||||
green1 046
|
||||
springgreen2 047
|
||||
springgreen1 048
|
||||
mediumspringgreen 049
|
||||
cyan2 050
|
||||
cyan1 051
|
||||
darkred 052
|
||||
deeppink4 053
|
||||
purple4 054
|
||||
purple4 055
|
||||
purple3 056
|
||||
blueviolet 057
|
||||
orange4 058
|
||||
grey37 059
|
||||
mediumpurple4 060
|
||||
slateblue3 061
|
||||
slateblue3 062
|
||||
royalblue1 063
|
||||
chartreuse4 064
|
||||
darkseagreen4 065
|
||||
paleturquoise4 066
|
||||
steelblue 067
|
||||
steelblue3 068
|
||||
cornflowerblue 069
|
||||
chartreuse3 070
|
||||
darkseagreen4 071
|
||||
cadetblue 072
|
||||
cadetblue 073
|
||||
skyblue3 074
|
||||
steelblue1 075
|
||||
chartreuse3 076
|
||||
palegreen3 077
|
||||
seagreen3 078
|
||||
aquamarine3 079
|
||||
mediumturquoise 080
|
||||
steelblue1 081
|
||||
chartreuse2 082
|
||||
seagreen2 083
|
||||
seagreen1 084
|
||||
seagreen1 085
|
||||
aquamarine1 086
|
||||
darkslategray2 087
|
||||
darkred 088
|
||||
deeppink4 089
|
||||
darkmagenta 090
|
||||
darkmagenta 091
|
||||
darkviolet 092
|
||||
purple 093
|
||||
orange4 094
|
||||
lightpink4 095
|
||||
plum4 096
|
||||
mediumpurple3 097
|
||||
mediumpurple3 098
|
||||
slateblue1 099
|
||||
yellow4 100
|
||||
wheat4 101
|
||||
grey53 102
|
||||
lightslategrey 103
|
||||
mediumpurple 104
|
||||
lightslateblue 105
|
||||
yellow4 106
|
||||
darkolivegreen3 107
|
||||
darkseagreen 108
|
||||
lightskyblue3 109
|
||||
lightskyblue3 110
|
||||
skyblue2 111
|
||||
chartreuse2 112
|
||||
darkolivegreen3 113
|
||||
palegreen3 114
|
||||
darkseagreen3 115
|
||||
darkslategray3 116
|
||||
skyblue1 117
|
||||
chartreuse1 118
|
||||
lightgreen 119
|
||||
lightgreen 120
|
||||
palegreen1 121
|
||||
aquamarine1 122
|
||||
darkslategray1 123
|
||||
red3 124
|
||||
deeppink4 125
|
||||
mediumvioletred 126
|
||||
magenta3 127
|
||||
darkviolet 128
|
||||
purple 129
|
||||
darkorange3 130
|
||||
indianred 131
|
||||
hotpink3 132
|
||||
mediumorchid3 133
|
||||
mediumorchid 134
|
||||
mediumpurple2 135
|
||||
darkgoldenrod 136
|
||||
lightsalmon3 137
|
||||
rosybrown 138
|
||||
grey63 139
|
||||
mediumpurple2 140
|
||||
mediumpurple1 141
|
||||
gold3 142
|
||||
darkkhaki 143
|
||||
navajowhite3 144
|
||||
grey69 145
|
||||
lightsteelblue3 146
|
||||
lightsteelblue 147
|
||||
yellow3 148
|
||||
darkolivegreen3 149
|
||||
darkseagreen3 150
|
||||
darkseagreen2 151
|
||||
lightcyan3 152
|
||||
lightskyblue1 153
|
||||
greenyellow 154
|
||||
darkolivegreen2 155
|
||||
palegreen1 156
|
||||
darkseagreen2 157
|
||||
darkseagreen1 158
|
||||
paleturquoise1 159
|
||||
red3 160
|
||||
deeppink3 161
|
||||
deeppink3 162
|
||||
magenta3 163
|
||||
magenta3 164
|
||||
magenta2 165
|
||||
darkorange3 166
|
||||
indianred 167
|
||||
hotpink3 168
|
||||
hotpink2 169
|
||||
orchid 170
|
||||
mediumorchid1 171
|
||||
orange3 172
|
||||
lightsalmon3 173
|
||||
lightpink3 174
|
||||
pink3 175
|
||||
plum3 176
|
||||
violet 177
|
||||
gold3 178
|
||||
lightgoldenrod3 179
|
||||
tan 180
|
||||
mistyrose3 181
|
||||
thistle3 182
|
||||
plum2 183
|
||||
yellow3 184
|
||||
khaki3 185
|
||||
lightgoldenrod2 186
|
||||
lightyellow3 187
|
||||
grey84 188
|
||||
lightsteelblue1 189
|
||||
yellow2 190
|
||||
darkolivegreen1 191
|
||||
darkolivegreen1 192
|
||||
darkseagreen1 193
|
||||
honeydew2 194
|
||||
lightcyan1 195
|
||||
red1 196
|
||||
deeppink2 197
|
||||
deeppink1 198
|
||||
deeppink1 199
|
||||
magenta2 200
|
||||
magenta1 201
|
||||
orangered1 202
|
||||
indianred1 203
|
||||
indianred1 204
|
||||
hotpink 205
|
||||
hotpink 206
|
||||
mediumorchid1 207
|
||||
darkorange 208
|
||||
salmon1 209
|
||||
lightcoral 210
|
||||
palevioletred1 211
|
||||
orchid2 212
|
||||
orchid1 213
|
||||
orange1 214
|
||||
sandybrown 215
|
||||
lightsalmon1 216
|
||||
lightpink1 217
|
||||
pink1 218
|
||||
plum1 219
|
||||
gold1 220
|
||||
lightgoldenrod2 221
|
||||
lightgoldenrod2 222
|
||||
navajowhite1 223
|
||||
mistyrose1 224
|
||||
thistle1 225
|
||||
yellow1 226
|
||||
lightgoldenrod1 227
|
||||
khaki1 228
|
||||
wheat1 229
|
||||
cornsilk1 230
|
||||
grey100 231
|
||||
grey3 232
|
||||
grey7 233
|
||||
grey11 234
|
||||
grey15 235
|
||||
grey19 236
|
||||
grey23 237
|
||||
grey27 238
|
||||
grey30 239
|
||||
grey35 240
|
||||
grey39 241
|
||||
grey42 242
|
||||
grey46 243
|
||||
grey50 244
|
||||
grey54 245
|
||||
grey58 246
|
||||
grey62 247
|
||||
grey66 248
|
||||
grey70 249
|
||||
grey74 250
|
||||
grey78 251
|
||||
grey82 252
|
||||
grey85 253
|
||||
grey89 254
|
||||
grey93 255
|
||||
)
|
||||
|
||||
function termColors() {
|
||||
|
||||
local term_colors
|
||||
|
||||
if which tput &>/dev/null; then
|
||||
term_colors=$(tput colors)
|
||||
else
|
||||
term_colors=$(echotc Co)
|
||||
fi
|
||||
if (( ! $? && ${term_colors:-0} < 256 )); then
|
||||
print -P "%F{red}WARNING!%f Your terminal appears to support fewer than 256 colors!"
|
||||
print -P "If your terminal supports 256 colors, please export the appropriate environment variable"
|
||||
print -P "_before_ loading this theme in your \~\/.zshrc. In most terminal emulators, putting"
|
||||
print -P "%F{blue}export TERM=\"xterm-256color\"%f at the top of your \~\/.zshrc is sufficient."
|
||||
fi
|
||||
}
|
||||
|
||||
# get the proper color code if it does not exist as a name.
|
||||
function getColor() {
|
||||
# If Color is not numerical, try to get the color code.
|
||||
if [[ "$1" != <-> ]]; then
|
||||
1=$(getColorCode $1)
|
||||
fi
|
||||
echo -n "$1"
|
||||
}
|
||||
|
||||
# empty paramenter resets (stops) background color
|
||||
function backgroundColor() {
|
||||
echo -n "%K{$(getColor $1)}"
|
||||
}
|
||||
|
||||
# empty paramenter resets (stops) foreground color
|
||||
function foregroundColor() {
|
||||
echo -n "%F{$(getColor $1)}"
|
||||
}
|
||||
|
||||
function focusBackgroundColor() {
|
||||
if [ "$HASFOCUS" = "true" ]; then
|
||||
backgroundColor "$@"
|
||||
fi
|
||||
}
|
||||
function focusForegroundColor() {
|
||||
if [ "$HASFOCUS" = "true" ]; then
|
||||
foregroundColor "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# Get numerical color codes. That way we translate ANSI codes
|
||||
# into ZSH-Style color codes.
|
||||
function getColorCode() {
|
||||
# Early exit: Check if given value is already numerical
|
||||
if [[ "$1" == <-> ]]; then
|
||||
# Pad color with zeroes
|
||||
echo -n "${(l:3::0:)1}"
|
||||
return
|
||||
fi
|
||||
|
||||
local colorName="${1}"
|
||||
# Check if value is none with any case.
|
||||
if [[ "${(L)colorName}" == "none" ]]; then
|
||||
echo -n 'none'
|
||||
elif [[ "${colorName}" == "foreground" ]]; then
|
||||
# for testing purposes in terminal
|
||||
# call via `getColorCode foreground`
|
||||
for i in "${(k@)__JH_COLORS}"; do
|
||||
print -P "$(foregroundColor $i)$(getColor $i) - $i%f"
|
||||
done
|
||||
elif [[ "${colorName}" == "background" ]]; then
|
||||
# call via `getColorCode background`
|
||||
for i in "${(k@)__JH_COLORS}"; do
|
||||
print -P "$(backgroundColor $i)$(getColor $i) - $i%k"
|
||||
done
|
||||
else
|
||||
# Strip eventual "bg-" prefixes
|
||||
colorName=${colorName#bg-}
|
||||
# Strip eventual "fg-" prefixes
|
||||
colorName=${colorName#fg-}
|
||||
# Strip eventual "br" prefixes ("bright" colors)
|
||||
colorName=${colorName#br}
|
||||
echo -n $__JH_COLORS[$colorName]
|
||||
fi
|
||||
}
|
||||
|
||||
# Check if two colors are equal, even if one is specified as ANSI code.
|
||||
function isSameColor() {
|
||||
if [[ "$1" == "NONE" || "$2" == "NONE" ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
local color1=$(getColorCode "$1")
|
||||
local color2=$(getColorCode "$2")
|
||||
|
||||
return $(( color1 != color2 ))
|
||||
}
|
||||
|
||||
function resetColor(){
|
||||
backgroundColor none
|
||||
foregroundColor white
|
||||
echo -n "%{$reset_color%}"
|
||||
}
|
|
@ -1,3 +1,18 @@
|
|||
# Make completion work
|
||||
autoload -U compinit
|
||||
zstyle ':completion:*' menu select
|
||||
# Auto complete with case insenstivity
|
||||
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
|
||||
zmodload zsh/complist
|
||||
compinit
|
||||
#
|
||||
# Use vim keys in tab complete menu: (thanks Luke Smith: https://github.com/LukeSmithxyz/voidrice/)
|
||||
bindkey -M menuselect 'h' vi-backward-char
|
||||
bindkey -M menuselect 'k' vi-up-line-or-history
|
||||
bindkey -M menuselect 'l' vi-forward-char
|
||||
bindkey -M menuselect 'j' vi-down-line-or-history
|
||||
bindkey -v '^?' backward-delete-char
|
||||
|
||||
compdef sshrc=ssh
|
||||
|
||||
autoload bashcompinit
|
||||
|
@ -21,6 +36,7 @@ _wp_complete() {
|
|||
}
|
||||
complete -o nospace -F _wp_complete wp
|
||||
|
||||
# Include hidden files in autocomplete:
|
||||
_comp_options+=(globdots)
|
||||
|
||||
fpath+="$(dirname $0)/completion"
|
||||
#source "$ZSH_FOLDER/plugins/fzf-tab/fzf-tab.zsh"
|
||||
|
|
22
shells/zsh/includes/focus.zsh
Normal file
22
shells/zsh/includes/focus.zsh
Normal file
|
@ -0,0 +1,22 @@
|
|||
#Gain focus
|
||||
|
||||
gain_focus(){
|
||||
export HASFOCUS="true"
|
||||
set_prompts
|
||||
zle reset-prompt
|
||||
}
|
||||
zle -N gain_focus
|
||||
|
||||
loose_focus(){
|
||||
export HASFOCUS="false"
|
||||
set_prompts
|
||||
zle reset-prompt
|
||||
}
|
||||
zle -N loose_focus
|
||||
|
||||
|
||||
# This makes sc (and maybe other terminals?) send escape codes to the shell when focus is gained / lost
|
||||
printf '\033[?1004h'
|
||||
bindkey '\033[I' gain_focus # Gain Focus
|
||||
bindkey '\033[O' loose_focus # Loose Focus
|
||||
HASFOCUS="true"
|
|
@ -1,9 +1,10 @@
|
|||
# this rg command will get a list of files that are not in gitignore or similar
|
||||
export FZF_DEFAULT_COMMAND="fd --type f --hidden --follow --exclude .git --exclude .PlayOnLinux --exclude \"PlayOnLinux\'s virtual drives\""
|
||||
export FZF_DEFAULT_OPTS="--preview '[[ \$(file -L --mime {}) =~ binary ]] && echo {} is a binary file || ( bat --style=numbers --color=always {} || cat {}) 2> /dev/null | head -500'"
|
||||
export FZF_CTRL_R_OPTS="--no-preview"
|
||||
export FZF_DEFAULT_OPTS="--reverse --height 40%"
|
||||
export FZF_CTRL_R_OPTS=""
|
||||
# this is the argument completeion optionm, use the same command
|
||||
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
|
||||
export FZF_CTRL_T_OPTS="$FZF_DEFAULT_OPTS --preview \"bat --style=numbers --color=always {}\""
|
||||
if [ -e /usr/share/fzf/key-bindings.zsh ]; then
|
||||
source /usr/share/fzf/key-bindings.zsh
|
||||
source /usr/share/fzf/completion.zsh
|
||||
|
@ -127,7 +128,7 @@ jhswap(){
|
|||
# I want my tab complete to be based on "current" word I am typing sometimes, before the command
|
||||
custom_tabcomplete(){
|
||||
local tokens cmd prefix trigger tail fzf matches lbuf d_cmds
|
||||
export FZF_DEFAULT_OPTS="$FZF_DEFAULT_OPTS --reverse --height 40%"
|
||||
FZF_DEFAULT_OPTS="$FZF_DEFAULT_OPTS --reverse --height 40%"
|
||||
setopt localoptions noshwordsplit noksh_arrays noposixbuiltins
|
||||
|
||||
if [ -n "$RBUFFER" ]; then
|
||||
|
@ -188,6 +189,4 @@ jhswap(){
|
|||
zle -N custom_tabcomplete
|
||||
bindkey '^I' custom_tabcomplete
|
||||
|
||||
|
||||
|
||||
fi
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8'
|
59
shells/zsh/includes/keybindings.zsh
Normal file
59
shells/zsh/includes/keybindings.zsh
Normal file
|
@ -0,0 +1,59 @@
|
|||
# create a zkbd compatible hash;
|
||||
# to add other keys to this hash, see: man 5 terminfo
|
||||
typeset -g -A key
|
||||
|
||||
key[Home]="${terminfo[khome]}"
|
||||
key[End]="${terminfo[kend]}"
|
||||
key[Insert]="${terminfo[kich1]}"
|
||||
key[Backspace]="${terminfo[kbs]}"
|
||||
key[Delete]="${terminfo[kdch1]}"
|
||||
key[Up]="${terminfo[kcuu1]}"
|
||||
key[Down]="${terminfo[kcud1]}"
|
||||
key[Left]="${terminfo[kcub1]}"
|
||||
key[Right]="${terminfo[kcuf1]}"
|
||||
key[PageUp]="${terminfo[kpp]}"
|
||||
key[PageDown]="${terminfo[knp]}"
|
||||
key[ShiftTab]="${terminfo[kcbt]}"
|
||||
|
||||
# setup key accordingly
|
||||
[[ -n "${key[Home]}" ]] && bindkey -- "${key[Home]}" beginning-of-line
|
||||
[[ -n "${key[End]}" ]] && bindkey -- "${key[End]}" end-of-line
|
||||
[[ -n "${key[Insert]}" ]] && bindkey -- "${key[Insert]}" overwrite-mode
|
||||
[[ -n "${key[Backspace]}" ]] && bindkey -- "${key[Backspace]}" backward-delete-char
|
||||
[[ -n "${key[Delete]}" ]] && bindkey -- "${key[Delete]}" delete-char
|
||||
[[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-history
|
||||
[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-history
|
||||
[[ -n "${key[Left]}" ]] && bindkey -- "${key[Left]}" backward-char
|
||||
[[ -n "${key[Right]}" ]] && bindkey -- "${key[Right]}" forward-char
|
||||
[[ -n "${key[PageUp]}" ]] && bindkey -- "${key[PageUp]}" beginning-of-buffer-or-history
|
||||
[[ -n "${key[PageDown]}" ]] && bindkey -- "${key[PageDown]}" end-of-buffer-or-history
|
||||
[[ -n "${key[ShiftTab]}" ]] && bindkey -- "${key[ShiftTab]}" reverse-menu-complete
|
||||
|
||||
# Finally, make sure the terminal is in application mode, when zle is
|
||||
# active. Only then are the values from $terminfo valid.
|
||||
if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then
|
||||
autoload -Uz add-zle-hook-widget
|
||||
function zle_application_mode_start { echoti smkx }
|
||||
function zle_application_mode_stop { echoti rmkx }
|
||||
add-zle-hook-widget -Uz zle-line-init zle_application_mode_start
|
||||
add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop
|
||||
fi
|
||||
|
||||
autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
|
||||
zle -N up-line-or-beginning-search
|
||||
zle -N down-line-or-beginning-search
|
||||
|
||||
[[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-beginning-search
|
||||
[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-beginning-search
|
||||
|
||||
|
||||
# By default, Ctrl+d will not close your shell if the command line is filled, this fixes it:
|
||||
exit_zsh() { exit }
|
||||
zle -N exit_zsh
|
||||
bindkey '^D' exit_zsh
|
||||
|
||||
autoload -U edit-command-line
|
||||
zle -N edit-command-line
|
||||
bindkey '\C-x\C-e' edit-command-line
|
||||
|
||||
bindkey -M viins jj vi-cmd-mode
|
|
@ -1,7 +1,11 @@
|
|||
# This is the config I use for Powerlevel9k
|
||||
|
||||
|
||||
#source "$HOME/.dotfiles/shells/zsh/plugins/powerlevel9k/powerlevel9k.zsh-theme"
|
||||
|
||||
|
||||
# Custom dir command
|
||||
function my_dir(){
|
||||
prompt_dir(){
|
||||
homeIcon=""
|
||||
wpPluginsIcon=".p."
|
||||
wpThemesIcon=".t."
|
||||
|
@ -72,38 +76,21 @@ function my_dir(){
|
|||
current_path=$(echo $current_path | sed -r -e "s/$seperator\$//g")
|
||||
|
||||
echo $current_path
|
||||
|
||||
}
|
||||
POWERLEVEL9K_CUSTOM_DIR="my_dir"
|
||||
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
|
||||
POWERLEVEL9K_CUSTOM_DIR_BACKGROUND="green"
|
||||
POWERLEVEL9K_CUSTOM_DIR_FOREGROUND="black"
|
||||
else
|
||||
POWERLEVEL9K_CUSTOM_DIR_BACKGROUND="blue"
|
||||
POWERLEVEL9K_CUSTOM_DIR_FOREGROUND="black"
|
||||
fi
|
||||
|
||||
# POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR="\ue0c0"
|
||||
# POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR="\ue0c2"
|
||||
|
||||
function Capslock(){
|
||||
x=$(xset -q | grep Caps) 2> /dev/null || exit 0
|
||||
x=${x:22:1}
|
||||
if [[ $x == "n" ]]; then
|
||||
|
||||
echo ""
|
||||
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
|
||||
echo "green"
|
||||
else
|
||||
echo "blue"
|
||||
fi
|
||||
}
|
||||
POWERLEVEL9K_CUSTOM_CAPS="Capslock"
|
||||
POWERLEVEL9K_CUSTOM_CAPS_BACKGROUND="red"
|
||||
POWERLEVEL9K_CUSTOM_CAPS_FOREGROUND="white"
|
||||
echo "black"
|
||||
|
||||
}
|
||||
|
||||
function prompt_project() {
|
||||
local segment_content state icon
|
||||
# Prints the current project and a recording symbol if appropriate
|
||||
local parent_process="$(ps -ocommand -p $PPID | grep -v 'COMMAND' | cut -d' ' -f1)"
|
||||
local current_project_full="$(project current --path)"
|
||||
local current_project_name="$(project current)"
|
||||
local background=""
|
||||
if [[ "$parent_process" == "/usr/bin/script" ]]; then
|
||||
segment_content="辶"
|
||||
fi
|
||||
|
@ -112,29 +99,134 @@ function prompt_project() {
|
|||
segment_content="${segment_content}$current_project_name"
|
||||
# If in the current project
|
||||
if echo "$PWD" | grep -q "$current_project_full"; then
|
||||
state="INSIDE"
|
||||
background="green"
|
||||
elif echo "$PWD" | grep -q "$HOME/Projects/"; then
|
||||
state="WRONG"
|
||||
background="red"
|
||||
else
|
||||
state="OUTSIDE"
|
||||
background="yellow"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$segment_content" ]; then
|
||||
"$1_prompt_segment" "${0}_${state}" "$2" $DEFAULT_COLOR_INVERTED $DEFAULT_COLOR "$segment_content" "$icon"
|
||||
fi
|
||||
echo "$state$segment_content"
|
||||
echo "$background"
|
||||
echo "black"
|
||||
}
|
||||
|
||||
prompt_git(){
|
||||
local branch="$(git branch --show-current 2> /dev/null)"
|
||||
local color="green"
|
||||
local ret=""
|
||||
if [ -n "branch" ]; then
|
||||
ret="$branch"
|
||||
local repoTopLevel="$(command git rev-parse --show-toplevel 2> /dev/null)"
|
||||
local untrackedFiles=$(command git ls-files --others --exclude-standard "${repoTopLevel}" 2> /dev/null)
|
||||
local staged=$(command git diff --staged --name-only 2> /dev/null)
|
||||
|
||||
POWERLEVEL9K_PROJECT_DEFAULT_FOREGROUND="black"
|
||||
POWERLEVEL9K_PROJECT_WRONG_BACKGROUND="red"
|
||||
POWERLEVEL9K_PROJECT_OUTSIDE_BACKGROUND="yellow"
|
||||
POWERLEVEL9K_PROJECT_INSIDE_BACKGROUND="green"
|
||||
if [ -n "$untrackedFiles" ]; then
|
||||
ret="$ret "
|
||||
color="orange1"
|
||||
fi
|
||||
if [ -n "$staged" ]; then
|
||||
ret="$ret "
|
||||
color="orange1"
|
||||
fi
|
||||
|
||||
fi
|
||||
echo "$ret"
|
||||
echo "$color"
|
||||
}
|
||||
|
||||
# Left Prompt
|
||||
if [[ "$(basename "/"$(ps -f -p $(cat /proc/$(echo $$)/stat | cut -d \ -f 4) | tail -1 | sed 's/^.* //'))" != "$(echo $USER)" ]]; then
|
||||
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(project custom_dir vcs custom_caps)
|
||||
fi
|
||||
prompt_last_exit_code() {
|
||||
local LAST_EXIT_CODE="$1"
|
||||
if [[ $LAST_EXIT_CODE -ne 0 ]]; then
|
||||
local EXIT_CODE_PROMPT=' '
|
||||
EXIT_CODE_PROMPT+="%{$fg[red]%}-%{$reset_color%}"
|
||||
EXIT_CODE_PROMPT+="%{$fg_bold[red]%}$LAST_EXIT_CODE%{$reset_color%}"
|
||||
EXIT_CODE_PROMPT+="%{$fg[red]%}-%{$reset_color%}"
|
||||
echo "$EXIT_CODE_PROMPT"
|
||||
fi
|
||||
}
|
||||
|
||||
# Draws a seperator
|
||||
# Takes 2 arguments, from color then to color
|
||||
# If only 1 given, assumes it is the last
|
||||
seperator(){
|
||||
local from="$1"
|
||||
local to="$2"
|
||||
local sep=""
|
||||
if [ -z "$to" ]; then
|
||||
resetColor
|
||||
else
|
||||
focusBackgroundColor "$to"
|
||||
fi
|
||||
focusForegroundColor "$from"
|
||||
echo -n "$sep"
|
||||
resetColor
|
||||
}
|
||||
|
||||
draw_segment(){
|
||||
# Echoes a segment
|
||||
# $1 is the command to be run to print the segment
|
||||
# $2 is the color of the last segment (if empty, no seperator is added)
|
||||
# Returns segment on line 1
|
||||
# returns background color on line 2
|
||||
local output="$($1)"
|
||||
local contents="$(echo "$output" | sed -n '1p')"
|
||||
local previousBackground="$2"
|
||||
local background=""
|
||||
local foreground=""
|
||||
local ret=""
|
||||
if [ -n "$contents" ]; then
|
||||
background="$(echo "$output" | sed -n '2p')"
|
||||
foreground="$(echo "$output" | sed -n '3p')"
|
||||
if [ -n "$previousBackground" ]; then
|
||||
ret=" $(seperator $previousBackground $background)"
|
||||
fi
|
||||
ret="$ret$(focusBackgroundColor $background) $(focusForegroundColor $foreground)$contents"
|
||||
echo "$ret"
|
||||
echo "$background"
|
||||
fi
|
||||
}
|
||||
set_prompts(){
|
||||
# Get the return status of the previous command
|
||||
local RETVAL=$?
|
||||
|
||||
#Set background to nothing at the start of the prompt
|
||||
local background=""
|
||||
local foreground=""
|
||||
|
||||
#Set the prompt to an empty string
|
||||
PROMPT=""
|
||||
|
||||
###### Each segment printed here
|
||||
|
||||
# Project
|
||||
segment="$(draw_segment "prompt_project" "$background")"
|
||||
if [ -n "$(echo "$segment" | sed -n '1p')" ];then
|
||||
PROMPT="$PROMPT$(echo "$segment" | sed -n '1p')"
|
||||
background="$(echo "$segment" | sed -n '2p')"
|
||||
fi
|
||||
|
||||
# Directory
|
||||
segment="$(draw_segment "prompt_dir" "$background")"
|
||||
if [ -n "$(echo "$segment" | sed -n '1p')" ];then
|
||||
PROMPT="$PROMPT$(echo "$segment" | sed -n '1p')"
|
||||
background="$(echo "$segment" | sed -n '2p')"
|
||||
fi
|
||||
|
||||
# Git
|
||||
segment="$(draw_segment "prompt_git" "$background")"
|
||||
if [ -n "$(echo "$segment" | sed -n '1p')" ];then
|
||||
PROMPT="$PROMPT$(echo "$segment" | sed -n '1p')"
|
||||
background="$(echo "$segment" | sed -n '2p')"
|
||||
fi
|
||||
|
||||
PROMPT="$PROMPT $(seperator "$background")$(resetColor)"
|
||||
|
||||
#$(resetColor)
|
||||
RPROMPT="$(resetColor)$(prompt_last_exit_code "$RETVAL")$(resetColor)"
|
||||
}
|
||||
zle -N set_prompts
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook precmd set_prompts
|
||||
|
||||
# Right Prompt
|
||||
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status root_indicator)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue