подсказка bash фиксированной ширины - PullRequest
2 голосов
/ 27 мая 2010

Я бы хотел установить в приглашении bash фиксированную ширину и компенсировать разницу в пространстве перед символом $, поэтому, независимо от того, длинное или короткое, мое приглашение остается такой же ширины:

[name@host] ~/Directory/Dir...Another/LastDir $ 
[name@host] ~/Directory(branch)               $ 

В настоящее время в коротком пути к каталогу мое приглашение выглядит примерно так:

[name@host] ~/Directory(branch) $ 

более глубокий путь к каталогу выглядит следующим образом:

[name@host] ~/Directory/Dir...Another/LastDir $ 

Вы можете видеть, что я обрезал PWD в середине, чтобы я мог видеть, где начинается путь и где он заканчивается. Я хотел бы компенсировать разницу до $.

Вот мое текущее приглашение:

# keep working directory to 30 chars, center tuncated
prompt_pwd() {
  local pwd_symbol="..."
  local pwd_length=30
  newPWD="${PWD/#$HOME/~}"
  [ ${#newPWD} -gt ${pwd_length} ] && newPWD=${newPWD:0:12}${pwd_symbol}${newPWD:${#newPWD}-15}
}
# set prompt
prompt_color() {
  PROMPT_COMMAND='prompt_pwd;history -a;title_git'
  PS1="${WHITEONMAGENTA}[\u@\h]${MAGENTA} \w\$(parse_git_branch) ${MAGENTABOLD}\$${PS_CLEAR} "
  PS1=${PS1//\\w/\$\{newPWD\}}
    PS2="${WHITEONTEAL}>${PS_CLEAR} "
}

В моем поиске я обнаружил Подсказка ширины вашего термина , которая выполняет некоторое заполнение, но не может заставить его работать для этого конкретного приглашения.

Ответы [ 3 ]

3 голосов
/ 28 мая 2010

Если ваш путь слишком короткий ([ ${#newPWD} -le ${pwd_length} ]), вы можете использовать printf (1), чтобы расширить его.

printf -v newPWD "%-*s" $pwd_length "$newPWD"

Это выровняет строку по левому краю в $newPWD с шириной поля$pwd_length.

printf (1) встроен в bash, поэтому запуск каждого приглашения не слишком дорогой.

1 голос
/ 27 мая 2010

Вы можете установить переменную окружения BASH_COMMAND, которая позволяет определять подсказку вручную. Вы можете использовать expand -t, чтобы получить желаемую длину.

0 голосов
/ 27 мая 2010

Что я сделал, так это разместил мой каталог и выше моего приглашения, так что мне не о чем беспокоиться:

myusername@mybox:/home/myusername/some/directory
$ 

Таким образом, я также могу получить дополнительное преимущество, скопировав приведенную выше строку для команд SCP и SSH, без предварительного добавления примера user @ host: / directory.

Вот моя переменная $ PS1, если хотите попробовать:

\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$

...