터미널을 예쁘게 꾸며보자

어느 OS든 기본 터미널은 참 밋밋하다. terminal

이런 밋밋한 터미널에서 벗어나 예쁘고 편리하게 터미널을 커스텀 하려는 시도가 여럿 존재한다.

oh my zsh powerline theme 등등…..

이번엔 그 중 powerline스타일로 꾸미는 powerline-shell을 적용해보자

설치

powerline-shellzsh bash fish 등의 쉘을 지원한다.

우선 프로젝트를 받고

$ git clone https://github.com/banga/powerline-shell

각자 입맞에 맞게 보고자 하는 정보들만 config.py에서 볼 수 있다.

#config.py
SEGMENTS = [
# Set the terminal window title to user@host:dir
#    'set_term_title',

# Show current virtual environment (see http://www.virtualenv.org/)
    'virtual_env',

# Show the current user's username as in ordinary prompts
    'username',

# Show the machine's hostname. Mostly used when ssh-ing into other machines
#    'hostname',

# Show a padlock when ssh-ing from another machine
#    'ssh',

# Show the current directory. If the path is too long, the middle part is
# replaced with ellipsis ('...')
    'cwd',

# Show a padlock if the current user has no write access to the current
# directory
    'read_only',

# Show the current git branch and status
    'git',

# Show the current mercurial branch and status
#    'hg',

# Show the current svn branch and status
#    'svn',

# Show the current fossil branch and status
#    'fossil',

# Show number of running jobs
    'jobs',

# Show the last command's exit code if it was non-zero
#    'exit_code',

# Shows a '#' if the current user is root, '$' otherwise
# Also, changes color if the last command exited with a non-zero error code
    'root',
]

# Change the colors used to draw individual segments in your prompt
THEME = 'default'


환경설정이 다 되었다면 shell 설정파일을 만들면된다.

$ ./install.py
powerline-shell.py successfully genereated!

이제 각자 사용하는 쉘마다 아래 코드를 삽입하면 된다.

Bash

~/.bashrc 파일

function _update_ps1() {
    PS1="$(~/powerline-shell.py $? 2> /dev/null)"
}

if [ "$TERM" != "linux" ]; then
    PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi

ZSH

~/.zshrc 파일

function powerline_precmd() {
    PS1="$(~/powerline-shell.py $? --shell zsh 2> /dev/null)"
}

function install_powerline_precmd() {
  for s in "${precmd_functions[@]}"; do
    if [ "$s" = "powerline_precmd" ]; then
      return
    fi
  done
  precmd_functions+=(powerline_precmd)
}

if [ "$TERM" != "linux" ]; then
    install_powerline_precmd
fi

Fish

~/.config/fish/config.fish 파일

function fish_prompt
    ~/powerline-shell.py $status --shell bare ^/dev/null
end

쉘 설정파일에 추가 한 후 다시 적용하면 된다.

$ source ~/.bashrc

추가적으로 보여질 디렉토리 depth나 폴더이름 최대 길이 같은 설정을 할 수 있다.

  --cwd-mode {fancy,plain,dironly}
                        How to display the current directory
  --cwd-max-depth CWD_MAX_DEPTH
                        Maximum number of directories to show in path
  --cwd-max-dir-size CWD_MAX_DIR_SIZE
                        Maximum number of letters displayed for each directory
                        in the path
  --colorize-hostname   Colorize the hostname based on a hash of itself.
  --mode {patched,compatible,flat}
                        The characters used to make separators between
                        segments

본인은 아래와 같은 설정으로 사용하고 있는데 유용한 것 같다.

function _update_ps1() {
    PS1="$(~/python/powerline-shell/powerline-shell.py --mode flat --cwd-max-depth 3 $? 2> /dev/null)"
}

if [ "$TERM" != "linux" ]; then
    PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi

여기까지 적용이 완료되고나면, 아래와같이 예쁘게 바뀐 쉘을 볼 수 있다.

뿐만아니라 git을 사용중이라면 git의 상태, 브랜치명 등 여러 정보도 함께 볼 수 있다.

terminal