3-5x faster `basename` and `dirname`.

pull/126/head
Justin Hileman 6 years ago
parent 3d3690eb40
commit 61325754bb

@ -44,6 +44,14 @@
# Helper methods
# ==============================
function __bobthefish_basename -d 'basically basename, but faster'
string replace -r '^.*/' '' -- $argv
end
function __bobthefish_dirname -d 'basically dirname, but faster'
string replace -r '/[^/]+/?$' '' -- $argv
end
function __bobthefish_git_branch -S -d 'Get the current git branch (or commitish)'
set -l ref (command git symbolic-ref HEAD ^/dev/null)
and string replace 'refs/heads/' "$__bobthefish_branch_glyph " $ref
@ -69,9 +77,10 @@ function __bobthefish_pretty_parent -S -a current_dir -d 'Print a parent directo
# Replace $HOME with ~
set -l real_home ~
set -l parent_dir (string replace -r '^'"$real_home"'($|/)' '~$1' (dirname $current_dir))
set -l parent_dir (string replace -r '^'"$real_home"'($|/)' '~$1' (__bobthefish_dirname $current_dir))
if [ $parent_dir = "/" ]
# Must check whether `$parent_dir = /` if using native dirname
if [ -z "$parent_dir" ]
echo -n /
return
end
@ -128,7 +137,7 @@ function __bobthefish_git_project_dir -S -d 'Print the current git project base
return
end
set -l project_dir (dirname $git_dir)
set -l project_dir (__bobthefish_dirname $git_dir)
switch $PWD/
case $project_dir/\*
@ -151,12 +160,13 @@ function __bobthefish_hg_project_dir -S -d 'Print the current hg project base di
and return
set -l d $PWD
while not [ $d = / ]
# Must check whether `$d = /` if using native dirname
while not [ -z "$d" ]
if [ -e $d/.hg ]
command hg root --cwd "$d" ^/dev/null
return
end
set d (dirname $d)
set d (__bobthefish_dirname $d)
end
end
@ -278,7 +288,7 @@ function __bobthefish_path_segment -S -a current_dir -d 'Display a shortened for
set directory '~'
case '*'
set parent (__bobthefish_pretty_parent "$current_dir")
set directory (basename "$current_dir")
set directory (__bobthefish_basename "$current_dir")
end
echo -n $parent
@ -737,13 +747,13 @@ function __bobthefish_prompt_git -S -a current_dir -d 'Display the actual git st
# handle work_dir != project dir
if [ "$work_dir" ]
set -l work_parent (dirname $work_dir | string replace -r '^/' '')
set -l work_parent (__bobthefish_dirname $work_dir)
if [ "$work_parent" ]
echo -n "$work_parent/"
end
set_color normal
set_color -b $__color_repo_work_tree
echo -n (basename $work_dir)
echo -n (__bobthefish_basename $work_dir)
set_color normal
set_color -b $colors
[ "$project_pwd" ]

Loading…
Cancel
Save