2

I am having a problem with zsh and zprezto where on error my cursor will shift to the left by two chars, overwriting part of the prompt. I have reverted my prompt file back to the original version, and have determined that it is not anything related to zprezto that is causing the problem.

A few days ago I had to manually run fsck, and some configuration files were corrupted. Because this problem is apparent on this computer only and on multiple terminal emulators, I have come to believe that one of the files necessary for the terminal was corrupted.

It is not Termite, because xterm had the same problem. I have tried reinstalling zsh, zprezto, and termite, and none of these has had any effect. I have run out of ideas for places to check.

My zshrc:

#
# Executes commands at the start of an interactive session.
#
# Authors:
#   Sorin Ionescu <sorin.ionescu@gmail.com>
#

# Source Prezto.
if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then
  source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"
fi
bindkey -e
# Customize to your needs...
alias hibernate='sudo pm-hibernate'
alias suspend='systemctl suspend'
alias clean_log='sudo journalctl --vacuum-size=20M'
alias rust_book="lynx $(rustc --print=sysroot)/share/doc/rust/html/book/index.html"
alias rust_docs="lynx $(rustc --print=sysroot)/share/doc/rust/html/index.html"
alias htop="sudo htop"
alias brightness="brightnessctl"
alias backlight="brightnessctl"

eval $(thefuck --alias)

My prompt file:

#
# A simple theme that displays relevant, contextual information.
#
# Authors:
#   Sorin Ionescu <sorin.ionescu@gmail.com>
#
# 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
#

# Load dependencies.
pmodload 'helper'

function prompt_sorin_async_callback {
  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_async_tasks {
  # Initialize async worker. This needs to be done here and not in
  # prompt_sorin_setup so the git formatting can be overridden by other prompts.
  if (( !${prompt_prezto_async_init:-0} )); then
    async_start_worker prompt_sorin -n
    async_register_callback prompt_sorin prompt_sorin_async_callback
    typeset -g prompt_prezto_async_init=1
  fi

  # Kill the old process of slow commands if it is still running.
  async_flush_jobs prompt_sorin

  # Compute slow commands in the background.
  async_job prompt_sorin prompt_sorin_async_git "$PWD"
}

function prompt_sorin_precmd {
  setopt LOCAL_OPTIONS
  unsetopt XTRACE KSH_ARRAYS

  # Format PWD.
  _prompt_sorin_pwd=$(prompt-pwd)

  # 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=''
      _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

  prompt_sorin_async_tasks
}

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 editor-info parameters.
  zstyle ':prezto:module:editor:info:completing' format '%B%F{7}...%f%b'
  zstyle ':prezto:module:editor:info:keymap:primary' format ' %B%F{1}❯%F{3}❯%F{2}❯%f%b'
  zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format ' %F{3}♺%f'
  zstyle ':prezto:module:editor:info:keymap:alternate' format ' %B%F{2}❮%F{3}❮%F{1}❮%f%b'

  # Set git-info parameters.
  zstyle ':prezto:module:git:info' verbose 'yes'
  zstyle ':prezto:module:git:info:action' format '%F{7}:%f%%B%F{9}%s%f%%b'
  zstyle ':prezto:module:git:info:added' format ' %%B%F{2}✚%f%%b'
  zstyle ':prezto:module:git:info:ahead' format ' %%B%F{13}⬆%f%%b'
  zstyle ':prezto:module:git:info:behind' format ' %%B%F{13}⬇%f%%b'
  zstyle ':prezto:module:git:info:branch' format ' %%B%F{2}%b%f%%b'
  zstyle ':prezto:module:git:info:commit' format ' %%B%F{3}%.7c%f%%b'
  zstyle ':prezto:module:git:info:deleted' format ' %%B%F{1}✖%f%%b'
  zstyle ':prezto:module:git:info:modified' format ' %%B%F{4}✱%f%%b'
  zstyle ':prezto:module:git:info:position' format ' %%B%F{13}%p%f%%b'
  zstyle ':prezto:module:git:info:renamed' format ' %%B%F{5}➜%f%%b'
  zstyle ':prezto:module:git:info:stashed' format ' %%B%F{6}✭%f%%b'
  zstyle ':prezto:module:git:info:unmerged' format ' %%B%F{3}═%f%%b'
  zstyle ':prezto:module:git:info:untracked' format ' %%B%F{7}◼%f%%b'
  zstyle ':prezto:module:git:info:keys' format \
    'status' '%b %p %c:%s%A%B%S%a%d%m%r%U%u'

  # 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=''

  # Define prompts.
  PROMPT='${SSH_TTY:+"%F{6}%n%f%F{6}@%f%F{6}%m%f "}%F{6}${_prompt_sorin_pwd}%(!. %B%F{1}#%f%b.) MSE: %F{7}'
  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 "$@"

My problem is that I do not know what config file could lead to this problem, or where it would be located. I am using Arch Linux with Termite as my terminal emulator.

  • You said you reverted your prompt, but there is no prompt definition in your .zshrc and you are still sourcing the zpresto files... – jasonwryan Jul 3 '18 at 1:31
  • I did it the stupid way and changed the actual prompt file. I did revert it back, and the problem persisted. – Sir Platypus Jul 3 '18 at 1:32
  • At this point, any changes I have made to zprezto have been removed and retested, but my edits didn't seem to be the problem. At the same time, those edits do not have this problem on my laptop. – Sir Platypus Jul 3 '18 at 1:33
  • Then paste the file where the prompt is being set. – jasonwryan Jul 3 '18 at 1:33
  • Advance warning: its pretty bad. The change is the line near the bottom where PROMPT is defined. – Sir Platypus Jul 3 '18 at 1:35
0

I found the answer in an old github issue. I was right, the locale.gen and locale.conf files had been corrupted, which had set the locale to C. Once I restored those files, the terminal no longer had the problem.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.