Home > Enterprise >  Can I shorten branch names in my terminal in fish
Can I shorten branch names in my terminal in fish

Time:04-20

My question is basically this, but for fish, as the solution given there does not apply for this

Currently my fish terminal often looks like

><> ~r/f/d/config on LONG_APP_NAME_RELEASE_CANDIDATE_1_4 x           16:55:12

So it leaves little space for me to actually type in. anyone have any ideas on how to fix this, to maybe look like this:

><> ~r/f/d/config on LONG_A...1_4 x                                   16:55:12

As @glenn proposed in the comments, i typed out type fish_prompt

and got a function

  1 fish_prompt is a function with definition
  2 # Defined in /Users/mge/.config/fish/functions/fish_prompt.fish @ line 5
  3 function fish_prompt
  4   set -l last_command_status $status
  5   set -l cwd
  6 
  7   if test "$theme_short_path" = 'yes'
  8     set cwd (basename (prompt_pwd))
  9   else
 10     set cwd (prompt_pwd)
 11   end
 12 
 13   set -l fish     "⋊>"
 14   set -l ahead    "↑"
 15   set -l behind   "↓"
 16   set -l diverged "⥄ "
 17   set -l dirty    "⨯"
 18   set -l none     "◦"
 19 
 20   set -l normal_color     (set_color normal)
 21   set -l success_color    (set_color $fish_pager_color_progress 2> /dev/null    ; or set_color cyan)
 22   set -l error_color      (set_color $fish_color_error 2> /dev/null; or set_    color red --bold)
 23   set -l directory_color  (set_color $fish_color_quote 2> /dev/null; or set_    color brown)
 24   set -l repository_color (set_color $fish_color_cwd 2> /dev/null; or set_co    lor green)
 25 
 26   if test $last_command_status -eq 0
 27     echo -n -s $success_color $fish $normal_color
 28   else
 29     echo -n -s $error_color $fish $normal_color
 30   end
 31 
 32   if git_is_repo
 33     if test "$theme_short_path" = 'yes'
 34       set root_folder (command git rev-parse --show-toplevel 2> /dev/null)
 35       set parent_root_folder (dirname $root_folder)
 36       set cwd (echo $PWD | sed -e "s|$parent_root_folder/||")
 37     end
 38 
 39     echo -n -s " " $directory_color $cwd $normal_color
 40     echo -n -s " on " $repository_color (git_branch_name) $normal_color " "
 41 
 42     if git_is_touched
 43       echo -n -s $dirty
 44     else
 45       echo -n -s (git_ahead $ahead $behind $diverged $none)
 46     end
 47   else
 48     echo -n -s " " $directory_color $cwd $normal_color
 49   end
 50 
 51   echo -n -s " "
 52 end

This is almost giving me the right idea to solve this, however i don't speak fish so i am not sure how i would edit this

CodePudding user response:

This is the offending line that displays the long branch name

echo -n -s " on " $repository_color (git_branch_name) $normal_color " "

To shorten that as you request:

set branch (git_branch_name)
test (string length $branch) -gt 12
and set branch (string replace -r '(.{6}).*(.{3})' '$1...$2' $branch)

echo -n -s " on " $repository_color $branch $normal_color " "

I'm not sure what version of fish you need for "string replace" -- if you get errors, you can do

test (string length $branch) -gt 12
and set branch (echo $branch | sed -E 's/(.{6}).*(.{3})/\1...\2/')
  • Related