Zimfw: Port "Sorin" theme

Created on 13 Feb 2017  Â·  7Comments  Â·  Source: zimfw/zimfw

I don't knot much about theming ZSH.

I would like to know if it's possible to port sorin's theme to zim?

enhancement

Most helpful comment

I'll try my hand at doing it. But I've never dived into ZSH themeing. might turn out messy

All 7 comments

@beloso não é para usar... 👅

I'm not sure that it's a matter of "support" as much as it is someone taking the time to do the work and make the PR :)

I'll try my hand at doing it. But I've never dived into ZSH themeing. might turn out messy

Here's a prototype, it's messy, bad and not fully functional, but it's a starting point:

#
# A simple theme that displays relevant, contextual information.
#
# Authors:
#   Sorin Ionescu <[email protected]>
#
# Screenshots:
#   http://i.imgur.com/nrGV6pg.png
#

#
# 16 Terminal Colors
# -- ---------------
#  0 black
#  1 red
#  2 green
#  3 yellow
#  4 blue
#  5 magenta
#  6 cyan
#  7 white
#  8 bright black
#  9 bright red
# 10 bright green
# 11 bright yellow
# 12 bright blue
# 13 bright magenta
# 14 bright cyan
# 15 bright white
#

function prompt_sorin_async_callback {
  true
  # case $1 in
  #   prompt_sorin_async_git)
  #     # We can safely split on ':' because it isn't allowed in ref names.
  #     IFS=':' read _git_target _git_post_target <<<"$3"

  #     # The target actually contains 3 space separated possibilities, so we need to
  #     # make sure we grab the first one.
  #     _git_target=$(coalesce ${(@)${(z)_git_target}})

  #     if [[ -z "$_git_target" ]]; then
  #       # No git target detected, flush the git fragment and redisplay the prompt.
  #       if [[ -n "$_prompt_sorin_git" ]]; then
  #         _prompt_sorin_git=''
  #         zle && zle reset-prompt
  #       fi
  #     else
  #       # Git target detected, update the git fragment and redisplay the prompt.
  #       _prompt_sorin_git="${_git_target}${_git_post_target}"
  #       zle && zle reset-prompt
  #     fi
  #     ;;
  # esac
}

function prompt_sorin_async_git {
  cd -q "$1"
  if (( $+functions[git-info] )); then
    git-info
    print ${git_info[status]}
  fi
}

function prompt_sorin_precmd {
  setopt LOCAL_OPTIONS
  unsetopt XTRACE KSH_ARRAYS

  # Format PWD.
  _prompt_sorin_pwd=$(echo "${PWD/#"$HOME"/~}")

  # Handle updating git data. We also clear the git prompt data if we're in a
  # different git root now.
  if (( $+functions[git-dir] )); then
    local new_git_root="$(git-dir 2> /dev/null)"
    if [[ $new_git_root != $_sorin_cur_git_root ]]; then
      _prompt_sorin_git=`git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'`
      _sorin_cur_git_root=$new_git_root
    fi
  fi

  # Run python info (this should be fast and not require any async)
  if (( $+functions[python-info] )); then
    python-info
  fi
  echo "$timesFailed"
  if [ "$show_return" = "✘ " ];
    then
      timesFailed=(($timesFailed+1))
  fi
  if [ "$timesFailed" = 2 ];
    then
      show_return=""
      timesFailed=0
  fi
}

function prompt_sorin_setup {
  setopt LOCAL_OPTIONS
  unsetopt XTRACE KSH_ARRAYS
  prompt_opts=(cr percent sp subst)
  # _prompt_sorin_precmd_async_pid=0
  # _prompt_sorin_precmd_async_data=$(mktemp "${TMPDIR:-/tmp}/sorin-prompt-async-XXXXXXXXXX")

  # # Load required functions.
  # autoload -Uz add-zsh-hook
  # autoload -Uz async && async

  # Add hook for calling git-info before each command.
  add-zsh-hook precmd prompt_sorin_precmd



  # Set up non-zero return value display
  local show_return="✘ "
  # Default is to show the return value
  # if zstyle -T ':prezto:module:prompt' show-return-val; then
  #   show_return+='%? '
  # fi
  # Set python-info format
  # zstyle ':prezto:module:python:info:virtualenv' format '%f%F{3}(%v)%F{7} '

  # Get the async worker set up
  _sorin_cur_git_root=''

  _prompt_sorin_git=''
  _prompt_sorin_pwd=''
  timesFailed=0
  # Define prompts.
  PROMPT='${SSH_TTY:+"%F{9}%n%f%F{7}@%f%F{3}%m%f "}%F{4}${_prompt_sorin_pwd}%(!. %B%F{1}#%f%b.)${editor_info[keymap]} '
  RPROMPT='$python_info[virtualenv]${editor_info[overwrite]}%(?:: %F{1}'
  RPROMPT+=${show_return}
  RPROMPT+='%f)${VIM:+" %B%F{6}V%f%b"}${_prompt_sorin_git}'
  SPROMPT='zsh: correct %F{1}%R%f to %F{2}%r%f [nyae]? '
}

function prompt_sorin_preview {
  local +h PROMPT=''
  local +h RPROMPT=''
  local +h SPROMPT=''

  editor-info 2> /dev/null
  prompt_preview_theme 'sorin'
}

prompt_sorin_setup "$@"

@AtomicCoding PR?

@Eriner Just opened one! #253

Finally, I took the time to port the sorin theme. It's at https://github.com/zimfw/sorin.

Was this page helpful?
0 / 5 - 0 ratings