| # Copyright 2017 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| if [[ -n "${ZSH_VERSION}" ]]; then |
| source "$(cd "$(dirname "${(%):-%x}")" >/dev/null 2>&1 && pwd)"/devshell/lib/vars.sh || return $? |
| else |
| source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/devshell/lib/vars.sh || return $? |
| fi |
| |
| # __patched_path <old-regex> <new-component> |
| # Prints a new path value based on the current $PATH, removing path components |
| # that match <old-regex> and adding <new-component> to the end. |
| function __patched_path { |
| local old_regex="$1" |
| local new_component="$2" |
| local stripped |
| # Put each PATH component on a line, delete any lines that match the regex, |
| # then glue back together with ':' characters. |
| stripped="$( |
| set -o pipefail && |
| echo "${PATH}" | |
| tr ':' '\n' | |
| grep -v -E "^${old_regex}$" | |
| tr '\n' ':' |
| )" |
| # The trailing newline will have become a colon, so no need to add another |
| # one here. |
| echo "${stripped}${new_component}" |
| } |
| |
| ### fx-update-path: add useful tools to the PATH |
| |
| # Add tools to path, removing prior tools directory if any. This also |
| # matches the Zircon tools directory added by zset, so add it back too. |
| function fx-update-path { |
| local rust_dir="$(source "${FUCHSIA_DIR}/buildtools/vars.sh" && echo -n "${BUILDTOOLS_RUST_DIR}/bin")" |
| |
| local build_dir="$(fx-config-read; echo "${FUCHSIA_BUILD_DIR}")" |
| |
| local tools_dirs="${ZIRCON_TOOLS_DIR}" |
| if [[ -n "${build_dir}" ]]; then |
| tools_dirs="${build_dir}/tools:${tools_dirs}" |
| fi |
| |
| export PATH="$(__patched_path \ |
| "${FUCHSIA_OUT_DIR}/[^/]*-[^/]*/tools" \ |
| "${tools_dirs}" |
| )" |
| |
| export PATH="$(__patched_path "${rust_dir}" "${rust_dir}")" |
| } |
| |
| ### fx-prompt-info: prints the current configuration for display in a prompt |
| |
| function fx-prompt-info { |
| # Run fx-config-read in a subshell to avoid polluting this shell's environment |
| # with data from the config file, which can change without updating this |
| # shell's environment. |
| ( |
| fx-config-read |
| echo "${FUCHSIA_BUILD_DIR##*/}" |
| ) |
| } |
| |
| ### fx-set-prompt: displays the current configuration in the prompt |
| |
| function fx-set-prompt { |
| if [[ -n "${ZSH_VERSION}" ]]; then |
| autoload -Uz colors && colors |
| setopt PROMPT_SUBST |
| export PS1='%B%F{yellow}[$(fx-prompt-info)] %B%F{blue}%m:%~%#%f%b ' |
| export PS2='%B%F{blue}>%f%b ' |
| else |
| export PS1='\[\e[0;1;33m\][$(fx-prompt-info)] \[\e[34m\]\h:\w\\$\[\e[0m\] ' |
| export PS2='\[\e[0;1;34m\]>\[\e[0m\] ' |
| fi |
| } |
| |
| ### fd: navigate to directories with autocomplete |
| |
| # $ fd --help # for usage. |
| function fd { |
| local fd_python |
| local dest |
| fd_python="${FUCHSIA_DIR}/scripts/fd.py" |
| dest=$(eval ${fd_python} "$@") |
| cd -- "${dest}" |
| } |
| |
| if [[ -z "${ZSH_VERSION}" ]]; then |
| function __fd { |
| local cur |
| COMPREPLY=() |
| cur="${COMP_WORDS[COMP_CWORD]}" |
| if [[ ${cur:0:2} == "//" ]]; then |
| COMPREPLY=($(/bin/ls -dp1 ${FUCHSIA_DIR}/${cur}* 2>/dev/null | \ |
| sed -n "s|^${FUCHSIA_DIR}/\(.*/\)\$|\1|p" | xargs echo)) |
| else |
| COMPREPLY=($(/bin/ls -dp1 ${cur}* 2>/dev/null | grep "/$" | xargs echo)) |
| fi |
| } |
| complete -o nospace -F __fd fd |
| fi |
| |
| ### fx-go: alias of fd, for backward compatibility |
| |
| function fx-go { |
| echo "fx-go is to be deprecated in Q1 2018 in favor of 'fd'. For more help, fd --help" |
| fd "$@" |
| } |
| |
| |
| # Support command-line auto-completions for the fx command. |
| if [[ -z "${ZSH_VERSION}" ]]; then |
| function __fx_complete_cmd { |
| local cmd cur prev |
| cmd="${COMP_WORDS[1]}" |
| cur="${COMP_WORDS[COMP_CWORD]}" |
| prev="${COMP_WORDS[COMP_CWORD-1]}" |
| |
| case "${cmd}" in |
| set) |
| if [[ ${COMP_CWORD} -eq 2 ]]; then |
| COMPREPLY=($(compgen -W "x64 arm64" "${cur}")) |
| return |
| fi |
| case "${prev}" in |
| --packages) |
| COMPREPLY=($(/bin/ls -dp1 ${FUCHSIA_DIR}/*/packages/${cur}* 2>/dev/null | \ |
| sed -n "s|^${FUCHSIA_DIR}/\(.*\)\$|\1|p" | xargs echo)) |
| return |
| ;; |
| esac |
| ;; |
| |
| set-petal) |
| if [[ ${COMP_CWORD} -eq 2 ]]; then |
| COMPREPLY=($(compgen -W "garnet peridot topaz" "${cur}")) |
| return |
| fi |
| ;; |
| esac |
| } |
| |
| function __fx { |
| COMPREPLY=() |
| if [[ ${COMP_CWORD} -eq 1 ]]; then |
| COMPREPLY=($(/bin/ls -dp1 ${FUCHSIA_DIR}/scripts/devshell/${COMP_WORDS[1]}* 2>/dev/null | \ |
| sed -n "s|^${FUCHSIA_DIR}/scripts/devshell/\([^/]*\)\$|\1|p" | xargs echo)) |
| else |
| __fx_complete_cmd |
| fi |
| } |
| complete -o default -F __fx fx |
| fi |