removendo caracteres estranhos de um prompt zsh

1

Eu instalei o zsh 5.3 e estou usando ele.

Agora em .zshrc eu fiz o seguinte -

autoload -Uz compinit promptinit
compinit
promptinit
# End of lines added by compinstall

Agora eu passei por alguns dos prompts e gostei de um big_fade

O big_fade se parece com isso -

۲��shirish@think-debian���۲�� Mon Dec 26 02:24:01am
/usr/share/zsh/functions/Prompts>

O código interno do prompt está em / usr / share / zsh / functions / Prompts / prompt_bigfade_setup

/usr/share/zsh/functions/Prompts> cat prompt_bigfade_setup
# Generic large colour fade-bar prompt theme from bashprompt
# Created by James Manning <[email protected]>
# Changed by Spidey 08/06
# Converted to zsh prompt theme by <[email protected]>

prompt_bigfade_help () {
  cat <<EOH
This prompt is color-scheme-able.  You can invoke it thus:

  prompt bigfade [<fade-bar> [<userhost> [<date> [<cwd>]]]]

where the parameters are the colors for the fade-bar, user@host text,
date text, and current working directory respectively.  The default
colors are blue, white, white, and yellow.  This theme works best with
a dark background.


Recommended fonts for this theme: either UTF-8, or nexus or vga or similar.
If you don't have any of these, the 8-bit characters will probably look
stupid.
EOH
}

prompt_bigfade_setup () {
  local fadebar=${1:-'blue'}
  local userhost=${2:-'white'}
  local date=${3:-'white'}
  local cwd=${4:-'yellow'}

  local -A schars
  autoload -Uz prompt_special_chars
  prompt_special_chars

  PS1="%B%F{$fadebar}$schars[333]$schars[262]$schars[261]$schars[260]%B%F{$userhost}%K{$fadebar}%n@%m%b%k%f%F{$fadebar}%K{black}$schars[260]$schars[261]$schars[262]$schars[333]%b%f%k%F{$fadebar}%K{black}$schars[333]$schars[262]$schars[261]$schars[260]%B%F{$date}%K{black} %D{%a %b %d} %D{%I:%M:%S%P}$prompt_newline%B%F{$cwd}%K{black}%d>%b%f%k "
  PS2="%B%F{$fadebar}$schars[333]$schars[262]$schars[261]$schars[260]%b%F{$fadebar}%K{black}$schars[260]$schars[261]$schars[262]$schars[333]%F{$fadebar}%K{black}$schars[333]$schars[262]$schars[261]$schars[260]%B%F{$fadebar}>%b%f%k "

  prompt_opts=(cr subst percent)
}

prompt_bigfade_preview () {
  if (( ! $#* )); then
    prompt_preview_theme bigfade
    print
    prompt_preview_theme bigfade red white grey white
  else
    prompt_preview_theme bigfade "$@"
  fi
}

prompt_bigfade_setup "$@"

Agora, enquanto tudo isso é bom, quero fazer algumas alterações no prompt. Por exemplo, não quero os símbolos especiais '۲ '.

Além disso, no final, o aviso termina com > . Eu quero acabar com isso $ (semelhante ao bash). Alguém pode ajudar?

    
por shirish 25.12.2016 / 22:18

2 respostas

2

@ jdeBP - obrigado, você forneceu as primeiras pistas.

Esta é a saída que eu estava recebendo -

Entãoeuolheiparacimaseafontenãoestavalá-

>aptitudesearchxfonts-nexusixfonts-nexus-NexusfontforX

Eupercebiqueafonteestálá,entãoaúnicapossibilidadequerestaéoconsole,ouseja,.zshnãofoiinformadodequeprecisausaroutf-8eissofoiconfirmadocom-

>localeLANG=en_INLANGUAGE=en_IN:enLC_CTYPE="en_IN"
LC_NUMERIC="en_IN"
LC_TIME="en_IN"
LC_COLLATE="en_IN"
LC_MONETARY="en_IN"
LC_MESSAGES="en_IN"
LC_PAPER="en_IN"
LC_NAME="en_IN"
LC_ADDRESS="en_IN"
LC_TELEPHONE="en_IN"
LC_MEASUREMENT="en_IN"
LC_IDENTIFICATION="en_IN"
LC_ALL=

Depois de perceber, eu sabia o que precisava fazer, de Como posso ativar o suporte a UTF-8 no console do Linux? @ GAD3R's answer.

Acabei de adicionar esses bits -

/home/shirish> cat ~/.zsh/.zshrc | grep UTF-8 
export LC_ALL=en_IN.UTF-8
export LANG=en_IN.UTF-8
export LANGUAGE=en_IN.UTF-8

originado esses bits para o prompt -

/home/shirish> source ~/.zsh/.zshrc

e recebi o aviso correto -

viuqueolocaltambémébom,corrijaagora.

/home/shirish>localeLANG=en_IN.UTF-8LANGUAGE=en_IN.UTF-8LC_CTYPE="en_IN.UTF-8"
LC_NUMERIC="en_IN.UTF-8"
LC_TIME="en_IN.UTF-8"
LC_COLLATE="en_IN.UTF-8"
LC_MONETARY="en_IN.UTF-8"
LC_MESSAGES="en_IN.UTF-8"
LC_PAPER="en_IN.UTF-8"
LC_NAME="en_IN.UTF-8"
LC_ADDRESS="en_IN.UTF-8"
LC_TELEPHONE="en_IN.UTF-8"
LC_MEASUREMENT="en_IN.UTF-8"
LC_IDENTIFICATION="en_IN.UTF-8"
LC_ALL=en_IN.UTF-8

(rant) -Obrigado a você veio a saber sobre a proposta de acabar com os emuladores de terminal no Debian que não suportam o utf-8. Eu vou estar lendo o tópico inteiro, mas diria, não é só o terminal, todo aplicativo. deve ser utf-8 e, além disso, a fonte padrão para o Debian deve ser utf-8. Embora a última parte não possa acontecer a menos que outras coisas estejam em primeiro lugar. Eu não deveria ter que colocar as credenciais UTF-8 no meu .zshrc, elas devem fazer parte da experiência padrão. (/ rant)

    
por 26.12.2016 / 18:07
2
Recommended fonts for this theme: either UTF-8, or nexus or vga or similar.
If you don't have any of these, the 8-bit characters will probably look stupid.

Você leu esse comentário no script, não foi? ☺

O módulo prompt_special_chars está configurando uma variável de matriz chamada schars que contém as seqüências de saída para vários caracteres que, em seguida, são usadas em seu prompt, como você pode ver. Eles são desenho de linha e blocos de caracteres, principalmente. O módulo prompt_special_chars está bem ao lado do que você já está olhando.

Seu terminal (emulador) aparentemente está configurado corretamente para reconhecer a saída codificada em UTF-8 que prompt_special_chars coloca nessas sequências. (Isso é uma coisa boa, já que as pessoas do Debian, agora em dezembro de 2016, estão ressuscitando a proposta de acabar com quaisquer emuladores de terminal no Debian que não sejam UTF-8 .) Mas falta o suporte de fonte para os glifos relevantes, e está substituindo um caractere de substituição porque suas fontes não possuem os caracteres de desenho de linha e caixa reais.

Assim, como disse o comentário, configure seu emulador de terminal com fontes que incorporem esses caracteres de desenho de linha e de bloco Unicode. Procure uma fonte que tenha o repertório do Windows Glyph List 4 (WGL4), por exemplo.

Se você não gosta dos caracteres de bloco, então um design de prompt onde esse é o ponto principal não é para você. Você está essencialmente dizendo que gosta do design imediato, exceto pelo fato de não gostar do que ele distingue, o que é uma contradição. Os caracteres de bloco são usados para o efeito de "desbotamento de cor" que está no nome "bigfade".

    
por 26.12.2016 / 12:16