Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
pattern
ohmybash
oh-my-bash
提交
c35410e8
O
oh-my-bash
项目概览
pattern
/
ohmybash
/
oh-my-bash
通知
6
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
oh-my-bash
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c35410e8
编写于
5月 09, 2019
作者:
R
Rohit Potter
提交者:
Toan Nguyen
5月 09, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added agnoster theme files (#54)
上级
c7e4f03c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
424 addition
and
0 deletion
+424
-0
themes/agnoster/agnoster-bash.theme.sh
themes/agnoster/agnoster-bash.theme.sh
+1
-0
themes/agnoster/agnoster.base.sh
themes/agnoster/agnoster.base.sh
+423
-0
未找到文件。
themes/agnoster/agnoster-bash.theme.sh
0 → 120000
浏览文件 @
c35410e8
agnoster.bash
\ No newline at end of file
themes/agnoster/agnoster.base.sh
0 → 100755
浏览文件 @
c35410e8
#!/usr/bin/env bash
# vim: ft=bash ts=2 sw=2 sts=2
#
# agnoster's Theme - https://gist.github.com/3712874
# A Powerline-inspired theme for BASH
#
# (Converted from ZSH theme by Kenny Root)
# https://gist.github.com/kruton/8345450
#
# Updated & fixed by Erik Selberg erik@selberg.org 1/14/17
# Tested on MacOSX, Ubuntu, Amazon Linux
# Bash v3 and v4
#
# # README
#
# In order for this theme to render correctly, you will need a
# [Powerline-patched font](https://gist.github.com/1595572).
# I recommend: https://github.com/powerline/fonts.git
# > git clone https://github.com/powerline/fonts.git fonts
# > cd fonts
# > install.sh
# In addition, I recommend the
# [Solarized theme](https://github.com/altercation/solarized/) and, if you're
# using it on Mac OS X, [iTerm 2](http://www.iterm2.com/) over Terminal.app -
# it has significantly better color fidelity.
# Install:
# I recommend the following:
# $ cd home
# $ mkdir -p .bash/themes/agnoster-bash
# $ git clone https://github.com/speedenator/agnoster-bash.git .bash/themes/agnoster-bash
# then add the following to your .bashrc:
# export THEME=$HOME/.bash/themes/agnoster-bash/agnoster.bash
# if [[ -f $THEME ]]; then
# export DEFAULT_USER=`whoami`
# source $THEME
# fi
#
# # Goals
#
# The aim of this theme is to only show you *relevant* information. Like most
# prompts, it will only show git information when in a git working directory.
# However, it goes a step further: everything from the current user and
# hostname to whether the last call exited with an error to whether background
# jobs are running in this shell will all be displayed automatically when
# appropriate.
# Generally speaking, this script has limited support for right
# prompts (ala powerlevel9k on zsh), but it's pretty problematic in Bash.
# The general pattern is to write out the right prompt, hit \r, then
# write the left. This is problematic for the following reasons:
# - Doesn't properly resize dynamically when you resize the terminal
# - Changes to the prompt (like clearing and re-typing, super common) deletes the prompt
# - Getting the right alignment via columns / tput cols is pretty problematic (and is a bug in this version)
# - Bash prompt escapes (like \h or \w) don't get interpolated
#
# all in all, if you really, really want right-side prompts without a
# ton of work, recommend going to zsh for now. If you know how to fix this,
# would appreciate it!
# note: requires bash v4+... Mac users - you often have bash3.
# 'brew install bash' will set you free
PROMPT_DIRTRIM
=
2
# bash4 and above
######################################################################
DEBUG
=
0
debug
()
{
if
[[
${
DEBUG
}
-ne
0
]]
;
then
>
&2
echo
-e
$*
fi
}
######################################################################
### Segment drawing
# A few utility functions to make it easy and re-usable to draw segmented prompts
CURRENT_BG
=
'NONE'
CURRENT_RBG
=
'NONE'
SEGMENT_SEPARATOR
=
''
RIGHT_SEPARATOR
=
''
LEFT_SUBSEG
=
''
RIGHT_SUBSEG
=
''
text_effect
()
{
case
"
$1
"
in
reset
)
echo
0
;;
bold
)
echo
1
;;
underline
)
echo
4
;;
esac
}
# to add colors, see
# http://bitmote.com/index.php?post/2012/11/19/Using-ANSI-Color-Codes-to-Colorize-Your-Bash-Prompt-on-Linux
# under the "256 (8-bit) Colors" section, and follow the example for orange below
fg_color
()
{
case
"
$1
"
in
black
)
echo
30
;;
red
)
echo
31
;;
green
)
echo
32
;;
yellow
)
echo
33
;;
blue
)
echo
34
;;
magenta
)
echo
35
;;
cyan
)
echo
36
;;
white
)
echo
37
;;
orange
)
echo
38
\;
5
\;
166
;;
esac
}
bg_color
()
{
case
"
$1
"
in
black
)
echo
40
;;
red
)
echo
41
;;
green
)
echo
42
;;
yellow
)
echo
43
;;
blue
)
echo
44
;;
magenta
)
echo
45
;;
cyan
)
echo
46
;;
white
)
echo
47
;;
orange
)
echo
48
\;
5
\;
166
;;
esac
;
}
# TIL: declare is global not local, so best use a different name
# for codes (mycodes) as otherwise it'll clobber the original.
# this changes from BASH v3 to BASH v4.
ansi
()
{
local seq
declare
-a
mycodes
=(
"
${
!1
}
"
)
debug
"ansi:
${
!1
}
all:
$*
aka
${
mycodes
[@]
}
"
seq
=
""
for
((
i
=
0
;
i <
${#
mycodes
[@]
}
;
i++
))
;
do
if
[[
-n
$seq
]]
;
then
seq
=
"
${
seq
}
;"
fi
seq
=
"
${
seq
}${
mycodes
[
$i
]
}
"
done
debug
"ansi debug:"
'\\[\\033['
${
seq
}
'm\\]'
echo
-ne
'\[\033['
${
seq
}
'm\]'
# PR="$PR\[\033[${seq}m\]"
}
ansi_single
()
{
echo
-ne
'\[\033['
$1
'm\]'
}
# Begin a segment
# Takes two arguments, background and foreground. Both can be omitted,
# rendering default background/foreground.
prompt_segment
()
{
local bg fg
declare
-a
codes
debug
"Prompting
$1
$2
$3
"
# if commented out from kruton's original... I'm not clear
# if it did anything, but it messed up things like
# prompt_status - Erik 1/14/17
# if [[ -z $1 || ( -z $2 && $2 != default ) ]]; then
codes
=(
"
${
codes
[@]
}
"
$(
text_effect reset
)
)
# fi
if
[[
-n
$1
]]
;
then
bg
=
$(
bg_color
$1
)
codes
=(
"
${
codes
[@]
}
"
$bg
)
debug
"Added
$bg
as background to codes"
fi
if
[[
-n
$2
]]
;
then
fg
=
$(
fg_color
$2
)
codes
=(
"
${
codes
[@]
}
"
$fg
)
debug
"Added
$fg
as foreground to codes"
fi
debug
"Codes: "
# declare -p codes
if
[[
$CURRENT_BG
!=
NONE
&&
$1
!=
$CURRENT_BG
]]
;
then
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[@]
)
PR
=
"
$PR
$(
ansi codes[@]
)
"
else
debug
"no current BG, codes is
$codes
[@]"
PR
=
"
$PR
$(
ansi codes[@]
)
"
fi
CURRENT_BG
=
$1
[[
-n
$3
]]
&&
PR
=
"
$PR$3
"
}
# End the prompt, closing any open segments
prompt_end
()
{
if
[[
-n
$CURRENT_BG
]]
;
then
declare
-a
codes
=(
$(
text_effect reset
)
$(
fg_color
$CURRENT_BG
)
)
PR
=
"
$PR
$(
ansi codes[@]
)
$SEGMENT_SEPARATOR
"
fi
declare
-a
reset
=(
$(
text_effect reset
)
)
PR
=
"
$PR
$(
ansi reset[@]
)
"
CURRENT_BG
=
''
}
### virtualenv prompt
prompt_virtualenv
()
{
if
[[
-n
$VIRTUAL_ENV
]]
;
then
color
=
cyan
prompt_segment
$color
$PRIMARY_FG
prompt_segment
$color
white
"
$(
basename
$VIRTUAL_ENV
)
"
fi
}
### Prompt components
# Each component will draw itself, and hide itself if no information needs to be shown
# Context: user@hostname (who am I and where am I)
prompt_context
()
{
local
user
=
`
whoami
`
if
[[
$user
!=
$DEFAULT_USER
||
-n
$SSH_CLIENT
]]
;
then
prompt_segment black default
"
$user
@
\h
"
fi
}
# prints history followed by HH:MM, useful for remembering what
# we did previously
prompt_histdt
()
{
prompt_segment black default
"
\!
[
\A
]"
}
git_status_dirty
()
{
dirty
=
$(
git status
-s
2> /dev/null |
tail
-n
1
)
[[
-n
$dirty
]]
&&
echo
" ●"
}
# Git: branch/detached head, dirty status
prompt_git
()
{
local
ref dirty
if
$(
git rev-parse
--is-inside-work-tree
>
/dev/null 2>&1
)
;
then
ZSH_THEME_GIT_PROMPT_DIRTY
=
'±'
dirty
=
$(
git_status_dirty
)
ref
=
$(
git symbolic-ref HEAD 2> /dev/null
)
||
ref
=
"➦
$(
git show-ref
--head
-s
--abbrev
|head
-n1
2> /dev/null
)
"
if
[[
-n
$dirty
]]
;
then
prompt_segment yellow black
else
prompt_segment green black
fi
PR
=
"
$PR
${
ref
/refs\/heads\//
}
$dirty
"
fi
}
# Dir: current working directory
prompt_dir
()
{
prompt_segment blue black
'\w'
}
# Status:
# - was there an error
# - am I root
# - are there background jobs?
prompt_status
()
{
local
symbols
symbols
=()
[[
$RETVAL
-ne
0
]]
&&
symbols+
=
"
$(
ansi_single
$(
fg_color red
))
✘"
[[
$UID
-eq
0
]]
&&
symbols+
=
"
$(
ansi_single
$(
fg_color yellow
))
⚡"
[[
$(
jobs
-l
|
wc
-l
)
-gt
0
]]
&&
symbols+
=
"
$(
ansi_single
$(
fg_color cyan
))
⚙"
[[
-n
"
$symbols
"
]]
&&
prompt_segment black default
"
$symbols
"
}
######################################################################
#
# experimental right prompt stuff
# requires setting prompt_foo to use PRIGHT vs PR
# doesn't quite work per above
rightprompt
()
{
printf
"%*s"
$COLUMNS
"
$PRIGHT
"
}
# quick right prompt I grabbed to test things.
__command_rprompt
()
{
local times
=
n
=
$COLUMNS
tz
for
tz
in
ZRH:Europe/Zurich PIT:US/Eastern
\
MTV:US/Pacific TOK:Asia/Tokyo
;
do
[
$n
-gt
40
]
||
break
times
=
"
$times
${
tz
%%
:
*
}
\e
[30;1m:
\e
[0;36;1m"
times
=
"
$times
$(
TZ
=
${
tz
#*
:
}
date
+%H:%M
)
\e
[0m"
n
=
$((
$n
-
10
))
done
[
-z
"
$times
"
]
||
printf
"%
${
n
}
s
$times
\\
r"
''
}
# PROMPT_COMMAND=__command_rprompt
# this doens't wrap code in \[ \]
ansi_r
()
{
local seq
declare
-a
mycodes2
=(
"
${
!1
}
"
)
debug
"ansi:
${
!1
}
all:
$*
aka
${
mycodes2
[@]
}
"
seq
=
""
for
((
i
=
0
;
i <
${#
mycodes2
[@]
}
;
i++
))
;
do
if
[[
-n
$seq
]]
;
then
seq
=
"
${
seq
}
;"
fi
seq
=
"
${
seq
}${
mycodes2
[
$i
]
}
"
done
debug
"ansi debug:"
'\\[\\033['
${
seq
}
'm\\]'
echo
-ne
'\033['
${
seq
}
'm'
# PR="$PR\[\033[${seq}m\]"
}
# Begin a segment on the right
# Takes two arguments, background and foreground. Both can be omitted,
# rendering default background/foreground.
prompt_right_segment
()
{
local bg fg
declare
-a
codes
debug
"Prompt right"
debug
"Prompting
$1
$2
$3
"
# if commented out from kruton's original... I'm not clear
# if it did anything, but it messed up things like
# prompt_status - Erik 1/14/17
# if [[ -z $1 || ( -z $2 && $2 != default ) ]]; then
codes
=(
"
${
codes
[@]
}
"
$(
text_effect reset
)
)
# fi
if
[[
-n
$1
]]
;
then
bg
=
$(
bg_color
$1
)
codes
=(
"
${
codes
[@]
}
"
$bg
)
debug
"Added
$bg
as background to codes"
fi
if
[[
-n
$2
]]
;
then
fg
=
$(
fg_color
$2
)
codes
=(
"
${
codes
[@]
}
"
$fg
)
debug
"Added
$fg
as foreground to codes"
fi
debug
"Right Codes: "
# declare -p codes
# right always has a separator
# if [[ $CURRENT_RBG != NONE && $1 != $CURRENT_RBG ]]; then
# $CURRENT_RBG=
# fi
declare
-a
intermediate2
=(
$(
fg_color
$1
)
$(
bg_color
$CURRENT_RBG
)
)
# PRIGHT="$PRIGHT---"
debug
"pre prompt "
$(
ansi_r intermediate2[@]
)
PRIGHT
=
"
$PRIGHT
$(
ansi_r intermediate2[@]
)
$RIGHT_SEPARATOR
"
debug
"post prompt "
$(
ansi_r codes[@]
)
PRIGHT
=
"
$PRIGHT
$(
ansi_r codes[@]
)
"
# else
# debug "no current BG, codes is $codes[@]"
# PRIGHT="$PRIGHT$(ansi codes[@]) "
# fi
CURRENT_RBG
=
$1
[[
-n
$3
]]
&&
PRIGHT
=
"
$PRIGHT$3
"
}
######################################################################
## Emacs prompt --- for dir tracking
# stick the following in your .emacs if you use this:
# (setq dirtrack-list '(".*DIR *\\([^ ]*\\) DIR" 1 nil))
# (defun dirtrack-filter-out-pwd-prompt (string)
# "dirtrack-mode doesn't remove the PWD match from the prompt. This does."
# ;; TODO: support dirtrack-mode's multiline regexp.
# (if (and (stringp string) (string-match (first dirtrack-list) string))
# (replace-match "" t t string 0)
# string))
# (add-hook 'shell-mode-hook
# #'(lambda ()
# (dirtrack-mode 1)
# (add-hook 'comint-preoutput-filter-functions
# 'dirtrack-filter-out-pwd-prompt t t)))
prompt_emacsdir
()
{
# no color or other setting... this will be deleted per above
PR
=
"DIR
\w
DIR
$PR
"
}
######################################################################
## Main prompt
build_prompt
()
{
[[
!
-z
${
AG_EMACS_DIR
+x
}
]]
&&
prompt_emacsdir
prompt_status
#[[ -z ${AG_NO_HIST+x} ]] && prompt_histdt
[[
-z
${
AG_NO_CONTEXT
+x
}
]]
&&
prompt_context
prompt_virtualenv
prompt_dir
prompt_git
prompt_end
}
# from orig...
# export PS1='$(ansi_single $(text_effect reset)) $(build_prompt) '
# this doesn't work... new model: create a prompt via a PR variable and
# use that.
set_bash_prompt
()
{
RETVAL
=
$?
PR
=
""
PRIGHT
=
""
CURRENT_BG
=
NONE
PR
=
"
$(
ansi_single
$(
text_effect reset
))
"
build_prompt
# uncomment below to use right prompt
# PS1='\[$(tput sc; printf "%*s" $COLUMNS "$PRIGHT"; tput rc)\]'$PR
PS1
=
$PR
}
PROMPT_COMMAND
=
set_bash_prompt
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录