From 8782a9288a981826b5d1c0da1156f94e7c8a3dc7 Mon Sep 17 00:00:00 2001 From: System Administrator Date: Tue, 15 Sep 2020 17:34:26 +0200 Subject: [PATCH] Remove pure, will add as submodule, no debug in mypure --- zsh.d/prompts/mypure/mypure.zsh | 2 - zsh.d/prompts/pure/.editorconfig | 12 - zsh.d/prompts/pure/.gitattributes | 1 - zsh.d/prompts/pure/.github/funding.yml | 1 - zsh.d/prompts/pure/.github/issue_template.md | 48 - zsh.d/prompts/pure/.npmrc | 1 - zsh.d/prompts/pure/arch/PKGBUILD | 26 - zsh.d/prompts/pure/async | 1 - zsh.d/prompts/pure/async.zsh | 650 -------------- zsh.d/prompts/pure/license | 9 - zsh.d/prompts/pure/package.json | 42 - zsh.d/prompts/pure/prompt_pure_setup | 1 - zsh.d/prompts/pure/pure.plugin.zsh | 1 - zsh.d/prompts/pure/pure.zsh | 845 ------------------ zsh.d/prompts/pure/readme.md | 281 ------ zsh.d/prompts/pure/screenshot-title-cmd.png | Bin 24844 -> 0 bytes zsh.d/prompts/pure/screenshot.png | Bin 72121 -> 0 bytes .../prompts/{pure/repo.txt => pure_repo.txt} | 0 18 files changed, 1921 deletions(-) delete mode 100644 zsh.d/prompts/pure/.editorconfig delete mode 100644 zsh.d/prompts/pure/.gitattributes delete mode 100644 zsh.d/prompts/pure/.github/funding.yml delete mode 100644 zsh.d/prompts/pure/.github/issue_template.md delete mode 100644 zsh.d/prompts/pure/.npmrc delete mode 100644 zsh.d/prompts/pure/arch/PKGBUILD delete mode 120000 zsh.d/prompts/pure/async delete mode 100644 zsh.d/prompts/pure/async.zsh delete mode 100644 zsh.d/prompts/pure/license delete mode 100644 zsh.d/prompts/pure/package.json delete mode 120000 zsh.d/prompts/pure/prompt_pure_setup delete mode 120000 zsh.d/prompts/pure/pure.plugin.zsh delete mode 100644 zsh.d/prompts/pure/pure.zsh delete mode 100644 zsh.d/prompts/pure/readme.md delete mode 100644 zsh.d/prompts/pure/screenshot-title-cmd.png delete mode 100644 zsh.d/prompts/pure/screenshot.png rename zsh.d/prompts/{pure/repo.txt => pure_repo.txt} (100%) diff --git a/zsh.d/prompts/mypure/mypure.zsh b/zsh.d/prompts/mypure/mypure.zsh index f0e786f..d4ca73b 100644 --- a/zsh.d/prompts/mypure/mypure.zsh +++ b/zsh.d/prompts/mypure/mypure.zsh @@ -486,8 +486,6 @@ prompt_mypure_async_callback() { local job=$1 code=$2 output=$3 exec_time=$4 next_pending=$6 local do_render=0 - [[ -n $5 ]] && print "\nERROR($1): $5\n" - case $job in \[async]) # Code is 1 for corrupted worker output and 2 for dead worker. diff --git a/zsh.d/prompts/pure/.editorconfig b/zsh.d/prompts/pure/.editorconfig deleted file mode 100644 index 1c6314a..0000000 --- a/zsh.d/prompts/pure/.editorconfig +++ /dev/null @@ -1,12 +0,0 @@ -root = true - -[*] -indent_style = tab -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.yml] -indent_style = space -indent_size = 2 diff --git a/zsh.d/prompts/pure/.gitattributes b/zsh.d/prompts/pure/.gitattributes deleted file mode 100644 index 6313b56..0000000 --- a/zsh.d/prompts/pure/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -* text=auto eol=lf diff --git a/zsh.d/prompts/pure/.github/funding.yml b/zsh.d/prompts/pure/.github/funding.yml deleted file mode 100644 index 0038dab..0000000 --- a/zsh.d/prompts/pure/.github/funding.yml +++ /dev/null @@ -1 +0,0 @@ -github: sindresorhus diff --git a/zsh.d/prompts/pure/.github/issue_template.md b/zsh.d/prompts/pure/.github/issue_template.md deleted file mode 100644 index 001af80..0000000 --- a/zsh.d/prompts/pure/.github/issue_template.md +++ /dev/null @@ -1,48 +0,0 @@ - - -### General information - -#### System report (output of `prompt_pure_system_report`): - - - -#### Other information - - - -#### I have: - -- [ ] Tested with another terminal program and can reproduce the issue: -- [ ] Followed the [integration](https://github.com/sindresorhus/pure#integration) instructions for my framework - -### Problem description - - - -### Reproduction steps - -1. -2. -3. - -### My `.zshrc`: - - diff --git a/zsh.d/prompts/pure/.npmrc b/zsh.d/prompts/pure/.npmrc deleted file mode 100644 index 43c97e7..0000000 --- a/zsh.d/prompts/pure/.npmrc +++ /dev/null @@ -1 +0,0 @@ -package-lock=false diff --git a/zsh.d/prompts/pure/arch/PKGBUILD b/zsh.d/prompts/pure/arch/PKGBUILD deleted file mode 100644 index 18cdc92..0000000 --- a/zsh.d/prompts/pure/arch/PKGBUILD +++ /dev/null @@ -1,26 +0,0 @@ -# Author: Sindre Sorhus -# Maintainer: Pat Brisbin -# Contributor: Emil Falk -pkgname=zsh-pure-prompt-git -pkgver=r61.7d3b317 -pkgrel=1 -pkgdesc='A minimal and pure prompt for zsh.' -arch=('any') -url='https://github.com/sindresorhus/pure' -license=('MIT') -depends=('zsh' 'git') -source=("$pkgname::git://github.com/sindresorhus/pure.git") -sha256sums=('SKIP') - -pkgver() { - cd $srcdir/$pkgname - printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" -} - -package() { - cd $srcdir/$pkgname - install -Dm644 pure.zsh \ - "$pkgdir/usr/share/zsh/functions/Prompts/prompt_pure_setup" - install -Dm644 async.zsh \ - "$pkgdir/usr/share/zsh/functions/async" -} diff --git a/zsh.d/prompts/pure/async b/zsh.d/prompts/pure/async deleted file mode 120000 index 27d2d7e..0000000 --- a/zsh.d/prompts/pure/async +++ /dev/null @@ -1 +0,0 @@ -async.zsh \ No newline at end of file diff --git a/zsh.d/prompts/pure/async.zsh b/zsh.d/prompts/pure/async.zsh deleted file mode 100644 index 4c1dccc..0000000 --- a/zsh.d/prompts/pure/async.zsh +++ /dev/null @@ -1,650 +0,0 @@ -#!/usr/bin/env zsh - -# -# zsh-async -# -# version: 1.8.0 -# author: Mathias Fredriksson -# url: https://github.com/mafredri/zsh-async -# - -typeset -g ASYNC_VERSION=1.8.0 -# Produce debug output from zsh-async when set to 1. -typeset -g ASYNC_DEBUG=${ASYNC_DEBUG:-0} - -# Execute commands that can manipulate the environment inside the async worker. Return output via callback. -_async_eval() { - local ASYNC_JOB_NAME - # Rename job to _async_eval and redirect all eval output to cat running - # in _async_job. Here, stdout and stderr are not separated for - # simplicity, this could be improved in the future. - { - eval "$@" - } &> >(ASYNC_JOB_NAME=[async/eval] _async_job 'cat') -} - -# Wrapper for jobs executed by the async worker, gives output in parseable format with execution time -_async_job() { - # Disable xtrace as it would mangle the output. - setopt localoptions noxtrace - - # Store start time for job. - float -F duration=$EPOCHREALTIME - - # Run the command and capture both stdout (`eval`) and stderr (`cat`) in - # separate subshells. When the command is complete, we grab write lock - # (mutex token) and output everything except stderr inside the command - # block, after the command block has completed, the stdin for `cat` is - # closed, causing stderr to be appended with a $'\0' at the end to mark the - # end of output from this job. - local jobname=${ASYNC_JOB_NAME:-$1} out - out="$( - local stdout stderr ret tok - { - stdout=$(eval "$@") - ret=$? - duration=$(( EPOCHREALTIME - duration )) # Calculate duration. - - print -r -n - $'\0'${(q)jobname} $ret ${(q)stdout} $duration - } 2> >(stderr=$(cat) && print -r -n - " "${(q)stderr}$'\0') - )" - if [[ $out != $'\0'*$'\0' ]]; then - # Corrupted output (aborted job?), skipping. - return - fi - - # Grab mutex lock, stalls until token is available. - read -r -k 1 -p tok || return 1 - - # Return output ( ). - print -r -n - "$out" - - # Unlock mutex by inserting a token. - print -n -p $tok -} - -# The background worker manages all tasks and runs them without interfering with other processes -_async_worker() { - # Reset all options to defaults inside async worker. - emulate -R zsh - - # Make sure monitor is unset to avoid printing the - # pids of child processes. - unsetopt monitor - - # Redirect stderr to `/dev/null` in case unforseen errors produced by the - # worker. For example: `fork failed: resource temporarily unavailable`. - # Some older versions of zsh might also print malloc errors (know to happen - # on at least zsh 5.0.2 and 5.0.8) likely due to kill signals. - exec 2>/dev/null - - # When a zpty is deleted (using -d) all the zpty instances created before - # the one being deleted receive a SIGHUP, unless we catch it, the async - # worker would simply exit (stop working) even though visible in the list - # of zpty's (zpty -L). This has been fixed around the time of Zsh 5.4 - # (not released). - if ! is-at-least 5.4.1; then - TRAPHUP() { - return 0 # Return 0, indicating signal was handled. - } - fi - - local -A storage - local unique=0 - local notify_parent=0 - local parent_pid=0 - local coproc_pid=0 - local processing=0 - - local -a zsh_hooks zsh_hook_functions - zsh_hooks=(chpwd periodic precmd preexec zshexit zshaddhistory) - zsh_hook_functions=(${^zsh_hooks}_functions) - unfunction $zsh_hooks &>/dev/null # Deactivate all zsh hooks inside the worker. - unset $zsh_hook_functions # And hooks with registered functions. - unset zsh_hooks zsh_hook_functions # Cleanup. - - close_idle_coproc() { - local -a pids - pids=(${${(v)jobstates##*:*:}%\=*}) - - # If coproc (cat) is the only child running, we close it to avoid - # leaving it running indefinitely and cluttering the process tree. - if (( ! processing )) && [[ $#pids = 1 ]] && [[ $coproc_pid = $pids[1] ]]; then - coproc : - coproc_pid=0 - fi - } - - child_exit() { - close_idle_coproc - - # On older version of zsh (pre 5.2) we notify the parent through a - # SIGWINCH signal because `zpty` did not return a file descriptor (fd) - # prior to that. - if (( notify_parent )); then - # We use SIGWINCH for compatibility with older versions of zsh - # (pre 5.1.1) where other signals (INFO, ALRM, USR1, etc.) could - # cause a deadlock in the shell under certain circumstances. - kill -WINCH $parent_pid - fi - } - - # Register a SIGCHLD trap to handle the completion of child processes. - trap child_exit CHLD - - # Process option parameters passed to worker. - while getopts "np:uz" opt; do - case $opt in - n) notify_parent=1;; - p) parent_pid=$OPTARG;; - u) unique=1;; - z) notify_parent=0;; # Uses ZLE watcher instead. - esac - done - - # Terminate all running jobs, note that this function does not - # reinstall the child trap. - terminate_jobs() { - trap - CHLD # Ignore child exits during kill. - coproc : # Quit coproc. - coproc_pid=0 # Reset pid. - - if is-at-least 5.4.1; then - trap '' HUP # Catch the HUP sent to this process. - kill -HUP -$$ # Send to entire process group. - trap - HUP # Disable HUP trap. - else - # We already handle HUP for Zsh < 5.4.1. - kill -HUP -$$ # Send to entire process group. - fi - } - - killjobs() { - local tok - local -a pids - pids=(${${(v)jobstates##*:*:}%\=*}) - - # No need to send SIGHUP if no jobs are running. - (( $#pids == 0 )) && continue - (( $#pids == 1 )) && [[ $coproc_pid = $pids[1] ]] && continue - - # Grab lock to prevent half-written output in case a child - # process is in the middle of writing to stdin during kill. - (( coproc_pid )) && read -r -k 1 -p tok - - terminate_jobs - trap child_exit CHLD # Reinstall child trap. - } - - local request do_eval=0 - local -a cmd - while :; do - # Wait for jobs sent by async_job. - read -r -d $'\0' request || { - # Unknown error occurred while reading from stdin, the zpty - # worker is likely in a broken state, so we shut down. - terminate_jobs - - # Stdin is broken and in case this was an unintended - # crash, we try to report it as a last hurrah. - print -r -n $'\0'"'[async]'" $(( 127 + 3 )) "''" 0 "'$0:$LINENO: zpty fd died, exiting'"$'\0' - - # We use `return` to abort here because using `exit` may - # result in an infinite loop that never exits and, as a - # result, high CPU utilization. - return $(( 127 + 1 )) - } - - # We need to clean the input here because sometimes when a zpty - # has died and been respawned, messages will be prefixed with a - # carraige return (\r, or \C-M). - request=${request#$'\C-M'} - - # Check for non-job commands sent to worker - case $request in - _killjobs) killjobs; continue;; - _async_eval*) do_eval=1;; - esac - - # Parse the request using shell parsing (z) to allow commands - # to be parsed from single strings and multi-args alike. - cmd=("${(z)request}") - - # Name of the job (first argument). - local job=$cmd[1] - - # Check if a worker should perform unique jobs, unless - # this is an eval since they run synchronously. - if (( !do_eval )) && (( unique )); then - # Check if a previous job is still running, if yes, - # skip this job and let the previous one finish. - for pid in ${${(v)jobstates##*:*:}%\=*}; do - if [[ ${storage[$job]} == $pid ]]; then - continue 2 - fi - done - fi - - # Guard against closing coproc from trap before command has started. - processing=1 - - # Because we close the coproc after the last job has completed, we must - # recreate it when there are no other jobs running. - if (( ! coproc_pid )); then - # Use coproc as a mutex for synchronized output between children. - coproc cat - coproc_pid="$!" - # Insert token into coproc - print -n -p "t" - fi - - if (( do_eval )); then - shift cmd # Strip _async_eval from cmd. - _async_eval $cmd - else - # Run job in background, completed jobs are printed to stdout. - _async_job $cmd & - # Store pid because zsh job manager is extremely unflexible (show jobname as non-unique '$job')... - storage[$job]="$!" - fi - - processing=0 # Disable guard. - - if (( do_eval )); then - do_eval=0 - - # When there are no active jobs we can't rely on the CHLD trap to - # manage the coproc lifetime. - close_idle_coproc - fi - done -} - -# -# Get results from finished jobs and pass it to the to callback function. This is the only way to reliably return the -# job name, return code, output and execution time and with minimal effort. -# -# If the async process buffer becomes corrupt, the callback will be invoked with the first argument being `[async]` (job -# name), non-zero return code and fifth argument describing the error (stderr). -# -# usage: -# async_process_results -# -# callback_function is called with the following parameters: -# $1 = job name, e.g. the function passed to async_job -# $2 = return code -# $3 = resulting stdout from execution -# $4 = execution time, floating point e.g. 2.05 seconds -# $5 = resulting stderr from execution -# $6 = has next result in buffer (0 = buffer empty, 1 = yes) -# -async_process_results() { - setopt localoptions unset noshwordsplit noksharrays noposixidentifiers noposixstrings - - local worker=$1 - local callback=$2 - local caller=$3 - local -a items - local null=$'\0' data - integer -l len pos num_processed has_next - - typeset -gA ASYNC_PROCESS_BUFFER - - # Read output from zpty and parse it if available. - while zpty -r -t $worker data 2>/dev/null; do - ASYNC_PROCESS_BUFFER[$worker]+=$data - len=${#ASYNC_PROCESS_BUFFER[$worker]} - pos=${ASYNC_PROCESS_BUFFER[$worker][(i)$null]} # Get index of NULL-character (delimiter). - - # Keep going until we find a NULL-character. - if (( ! len )) || (( pos > len )); then - continue - fi - - while (( pos <= len )); do - # Take the content from the beginning, until the NULL-character and - # perform shell parsing (z) and unquoting (Q) as an array (@). - items=("${(@Q)${(z)ASYNC_PROCESS_BUFFER[$worker][1,$pos-1]}}") - - # Remove the extracted items from the buffer. - ASYNC_PROCESS_BUFFER[$worker]=${ASYNC_PROCESS_BUFFER[$worker][$pos+1,$len]} - - len=${#ASYNC_PROCESS_BUFFER[$worker]} - if (( len > 1 )); then - pos=${ASYNC_PROCESS_BUFFER[$worker][(i)$null]} # Get index of NULL-character (delimiter). - fi - - has_next=$(( len != 0 )) - if (( $#items == 5 )); then - items+=($has_next) - $callback "${(@)items}" # Send all parsed items to the callback. - (( num_processed++ )) - elif [[ -z $items ]]; then - # Empty items occur between results due to double-null ($'\0\0') - # caused by commands being both pre and suffixed with null. - else - # In case of corrupt data, invoke callback with *async* as job - # name, non-zero exit status and an error message on stderr. - $callback "[async]" 1 "" 0 "$0:$LINENO: error: bad format, got ${#items} items (${(q)items})" $has_next - fi - done - done - - (( num_processed )) && return 0 - - # Avoid printing exit value when `setopt printexitvalue` is active.` - [[ $caller = trap || $caller = watcher ]] && return 0 - - # No results were processed - return 1 -} - -# Watch worker for output -_async_zle_watcher() { - setopt localoptions noshwordsplit - typeset -gA ASYNC_PTYS ASYNC_CALLBACKS - local worker=$ASYNC_PTYS[$1] - local callback=$ASYNC_CALLBACKS[$worker] - - if [[ -n $2 ]]; then - # from man zshzle(1): - # `hup' for a disconnect, `nval' for a closed or otherwise - # invalid descriptor, or `err' for any other condition. - # Systems that support only the `select' system call always use - # `err'. - - # this has the side effect to unregister the broken file descriptor - async_stop_worker $worker - - if [[ -n $callback ]]; then - $callback '[async]' 2 "" 0 "$0:$LINENO: error: fd for $worker failed: zle -F $1 returned error $2" 0 - fi - return - fi; - - if [[ -n $callback ]]; then - async_process_results $worker $callback watcher - fi -} - -_async_send_job() { - setopt localoptions noshwordsplit noksharrays noposixidentifiers noposixstrings - - local caller=$1 - local worker=$2 - shift 2 - - zpty -t $worker &>/dev/null || { - typeset -gA ASYNC_CALLBACKS - local callback=$ASYNC_CALLBACKS[$worker] - - if [[ -n $callback ]]; then - $callback '[async]' 3 "" 0 "$0:$LINENO: error: no such worker: $worker" 0 - else - print -u2 "$caller: no such async worker: $worker" - fi - return 1 - } - - zpty -w $worker "$@"$'\0' -} - -# -# Start a new asynchronous job on specified worker, assumes the worker is running. -# -# usage: -# async_job [] -# -async_job() { - setopt localoptions noshwordsplit noksharrays noposixidentifiers noposixstrings - - local worker=$1; shift - - local -a cmd - cmd=("$@") - if (( $#cmd > 1 )); then - cmd=(${(q)cmd}) # Quote special characters in multi argument commands. - fi - - _async_send_job $0 $worker "$cmd" -} - -# -# Evaluate a command (like async_job) inside the async worker, then worker environment can be manipulated. For example, -# issuing a cd command will change the PWD of the worker which will then be inherited by all future async jobs. -# -# Output will be returned via callback, job name will be [async/eval]. -# -# usage: -# async_worker_eval [] -# -async_worker_eval() { - setopt localoptions noshwordsplit noksharrays noposixidentifiers noposixstrings - - local worker=$1; shift - - local -a cmd - cmd=("$@") - if (( $#cmd > 1 )); then - cmd=(${(q)cmd}) # Quote special characters in multi argument commands. - fi - - # Quote the cmd in case RC_EXPAND_PARAM is set. - _async_send_job $0 $worker "_async_eval $cmd" -} - -# This function traps notification signals and calls all registered callbacks -_async_notify_trap() { - setopt localoptions noshwordsplit - - local k - for k in ${(k)ASYNC_CALLBACKS}; do - async_process_results $k ${ASYNC_CALLBACKS[$k]} trap - done -} - -# -# Register a callback for completed jobs. As soon as a job is finnished, async_process_results will be called with the -# specified callback function. This requires that a worker is initialized with the -n (notify) option. -# -# usage: -# async_register_callback -# -async_register_callback() { - setopt localoptions noshwordsplit nolocaltraps - - typeset -gA ASYNC_PTYS ASYNC_CALLBACKS - local worker=$1; shift - - ASYNC_CALLBACKS[$worker]="$*" - - # Enable trap when the ZLE watcher is unavailable, allows - # workers to notify (via -n) when a job is done. - if [[ ! -o interactive ]] || [[ ! -o zle ]]; then - trap '_async_notify_trap' WINCH - elif [[ -o interactive ]] && [[ -o zle ]]; then - local fd w - for fd w in ${(@kv)ASYNC_PTYS}; do - if [[ $w == $worker ]]; then - zle -F $fd _async_zle_watcher # Register the ZLE handler. - break - fi - done - fi -} - -# -# Unregister the callback for a specific worker. -# -# usage: -# async_unregister_callback -# -async_unregister_callback() { - typeset -gA ASYNC_CALLBACKS - - unset "ASYNC_CALLBACKS[$1]" -} - -# -# Flush all current jobs running on a worker. This will terminate any and all running processes under the worker, use -# with caution. -# -# usage: -# async_flush_jobs -# -async_flush_jobs() { - setopt localoptions noshwordsplit - - local worker=$1; shift - - # Check if the worker exists - zpty -t $worker &>/dev/null || return 1 - - # Send kill command to worker - async_job $worker "_killjobs" - - # Clear the zpty buffer. - local junk - if zpty -r -t $worker junk '*'; then - (( ASYNC_DEBUG )) && print -n "async_flush_jobs $worker: ${(V)junk}" - while zpty -r -t $worker junk '*'; do - (( ASYNC_DEBUG )) && print -n "${(V)junk}" - done - (( ASYNC_DEBUG )) && print - fi - - # Finally, clear the process buffer in case of partially parsed responses. - typeset -gA ASYNC_PROCESS_BUFFER - unset "ASYNC_PROCESS_BUFFER[$worker]" -} - -# -# Start a new async worker with optional parameters, a worker can be told to only run unique tasks and to notify a -# process when tasks are complete. -# -# usage: -# async_start_worker [-u] [-n] [-p ] -# -# opts: -# -u unique (only unique job names can run) -# -n notify through SIGWINCH signal -# -p pid to notify (defaults to current pid) -# -async_start_worker() { - setopt localoptions noshwordsplit - - local worker=$1; shift - local -a args - args=("$@") - zpty -t $worker &>/dev/null && return - - typeset -gA ASYNC_PTYS - typeset -h REPLY - typeset has_xtrace=0 - - # Make sure async worker is started without xtrace - # (the trace output interferes with the worker). - [[ -o xtrace ]] && { - has_xtrace=1 - unsetopt xtrace - } - - if [[ -o interactive ]] && [[ -o zle ]]; then - # Inform the worker to ignore the notify flag and that we're - # using a ZLE watcher instead. - args+=(-z) - - if (( ! ASYNC_ZPTY_RETURNS_FD )); then - # When zpty doesn't return a file descriptor (on older versions of zsh) - # we try to guess it anyway. - integer -l zptyfd - exec {zptyfd}>&1 # Open a new file descriptor (above 10). - exec {zptyfd}>&- # Close it so it's free to be used by zpty. - fi - fi - - zpty -b $worker _async_worker -p $$ $args || { - async_stop_worker $worker - return 1 - } - - # Re-enable it if it was enabled, for debugging. - (( has_xtrace )) && setopt xtrace - - if ! is-at-least 5.0.8; then - # For ZSH versions older than 5.0.8 we delay a bit to give - # time for the worker to start before issuing commands, - # otherwise it will not be ready to receive them. - sleep 0.001 - fi - - if [[ -o interactive ]] && [[ -o zle ]]; then - if (( ! ASYNC_ZPTY_RETURNS_FD )); then - REPLY=$zptyfd # Use the guessed value for the file desciptor. - fi - - ASYNC_PTYS[$REPLY]=$worker # Map the file desciptor to the worker. - fi -} - -# -# Stop one or multiple workers that are running, all unfetched and incomplete work will be lost. -# -# usage: -# async_stop_worker [] -# -async_stop_worker() { - setopt localoptions noshwordsplit - - local ret=0 worker k v - for worker in $@; do - # Find and unregister the zle handler for the worker - for k v in ${(@kv)ASYNC_PTYS}; do - if [[ $v == $worker ]]; then - zle -F $k - unset "ASYNC_PTYS[$k]" - fi - done - async_unregister_callback $worker - zpty -d $worker 2>/dev/null || ret=$? - - # Clear any partial buffers. - typeset -gA ASYNC_PROCESS_BUFFER - unset "ASYNC_PROCESS_BUFFER[$worker]" - done - - return $ret -} - -# -# Initialize the required modules for zsh-async. To be called before using the zsh-async library. -# -# usage: -# async_init -# -async_init() { - (( ASYNC_INIT_DONE )) && return - typeset -g ASYNC_INIT_DONE=1 - - zmodload zsh/zpty - zmodload zsh/datetime - - # Load is-at-least for reliable version check. - autoload -Uz is-at-least - - # Check if zsh/zpty returns a file descriptor or not, - # shell must also be interactive with zle enabled. - typeset -g ASYNC_ZPTY_RETURNS_FD=0 - [[ -o interactive ]] && [[ -o zle ]] && { - typeset -h REPLY - zpty _async_test : - (( REPLY )) && ASYNC_ZPTY_RETURNS_FD=1 - zpty -d _async_test - } -} - -async() { - async_init -} - -async "$@" diff --git a/zsh.d/prompts/pure/license b/zsh.d/prompts/pure/license deleted file mode 100644 index e7af2f7..0000000 --- a/zsh.d/prompts/pure/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/zsh.d/prompts/pure/package.json b/zsh.d/prompts/pure/package.json deleted file mode 100644 index b2bf53a..0000000 --- a/zsh.d/prompts/pure/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "pure-prompt", - "version": "1.12.0", - "description": "Pretty, minimal and fast ZSH prompt", - "license": "MIT", - "repository": "sindresorhus/pure", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "maintainers": [ - { - "name": "Mathias Fredriksson", - "url": "https://github.com/mafredri" - } - ], - "scripts": { - "postinstall": "PURE_DEST=/usr/local/share/zsh/site-functions npm run --silent postinstall-link && exit 0; PURE_DEST=\"$PWD/functions\" npm run postinstall-link && npm run postinstall-fail-instructions", - "postinstall-link": "mkdir -p \"$PURE_DEST\" && ln -sf \"$PWD/pure.zsh\" \"$PURE_DEST/prompt_pure_setup\" && ln -sf \"$PWD/async.zsh\" \"$PURE_DEST/async\"", - "postinstall-fail-instructions": "echo \"ERROR: Could not automagically symlink the prompt. Either:\\n1. Check out the readme on how to do it manually: https://github.com/sindresorhus/pure#manually\\n2. Or add the following to your \\`.zshrc\\`:\\n\\n fpath+=('$PWD/functions')\"" - }, - "files": [ - "pure.zsh", - "async.zsh" - ], - "keywords": [ - "zsh", - "zshell", - "sh", - "shell", - "bash", - "pure", - "prompt", - "theme", - "git", - "async", - "fast", - "minimal", - "pretty" - ] -} diff --git a/zsh.d/prompts/pure/prompt_pure_setup b/zsh.d/prompts/pure/prompt_pure_setup deleted file mode 120000 index f5f60e7..0000000 --- a/zsh.d/prompts/pure/prompt_pure_setup +++ /dev/null @@ -1 +0,0 @@ -pure.zsh \ No newline at end of file diff --git a/zsh.d/prompts/pure/pure.plugin.zsh b/zsh.d/prompts/pure/pure.plugin.zsh deleted file mode 120000 index f5f60e7..0000000 --- a/zsh.d/prompts/pure/pure.plugin.zsh +++ /dev/null @@ -1 +0,0 @@ -pure.zsh \ No newline at end of file diff --git a/zsh.d/prompts/pure/pure.zsh b/zsh.d/prompts/pure/pure.zsh deleted file mode 100644 index 9091909..0000000 --- a/zsh.d/prompts/pure/pure.zsh +++ /dev/null @@ -1,845 +0,0 @@ -# Pure -# by Sindre Sorhus -# https://github.com/sindresorhus/pure -# MIT License - -# For my own and others sanity -# git: -# %b => current branch -# %a => current action (rebase/merge) -# prompt: -# %F => color dict -# %f => reset color -# %~ => current path -# %* => time -# %n => username -# %m => shortname host -# %(?..) => prompt conditional - %(condition.true.false) -# terminal codes: -# \e7 => save cursor position -# \e[2A => move cursor 2 lines up -# \e[1G => go to position 1 in terminal -# \e8 => restore cursor position -# \e[K => clears everything after the cursor on the current line -# \e[2K => clear everything on the current line - - -# Turns seconds into human readable time. -# 165392 => 1d 21h 56m 32s -# https://github.com/sindresorhus/pretty-time-zsh -prompt_pure_human_time_to_var() { - local human total_seconds=$1 var=$2 - local days=$(( total_seconds / 60 / 60 / 24 )) - local hours=$(( total_seconds / 60 / 60 % 24 )) - local minutes=$(( total_seconds / 60 % 60 )) - local seconds=$(( total_seconds % 60 )) - (( days > 0 )) && human+="${days}d " - (( hours > 0 )) && human+="${hours}h " - (( minutes > 0 )) && human+="${minutes}m " - human+="${seconds}s" - - # Store human readable time in a variable as specified by the caller - typeset -g "${var}"="${human}" -} - -# Stores (into prompt_pure_cmd_exec_time) the execution -# time of the last command if set threshold was exceeded. -prompt_pure_check_cmd_exec_time() { - integer elapsed - (( elapsed = EPOCHSECONDS - ${prompt_pure_cmd_timestamp:-$EPOCHSECONDS} )) - typeset -g prompt_pure_cmd_exec_time= - (( elapsed > ${PURE_CMD_MAX_EXEC_TIME:-5} )) && { - prompt_pure_human_time_to_var $elapsed "prompt_pure_cmd_exec_time" - } -} - -prompt_pure_set_title() { - setopt localoptions noshwordsplit - - # Emacs terminal does not support settings the title. - (( ${+EMACS} || ${+INSIDE_EMACS} )) && return - - case $TTY in - # Don't set title over serial console. - /dev/ttyS[0-9]*) return;; - esac - - # Show hostname if connected via SSH. - local hostname= - if [[ -n $prompt_pure_state[username] ]]; then - # Expand in-place in case ignore-escape is used. - hostname="${(%):-(%m) }" - fi - - local -a opts - case $1 in - expand-prompt) opts=(-P);; - ignore-escape) opts=(-r);; - esac - - # Set title atomically in one print statement so that it works when XTRACE is enabled. - print -n $opts $'\e]0;'${hostname}${2}$'\a' -} - -prompt_pure_preexec() { - if [[ -n $prompt_pure_git_fetch_pattern ]]; then - # Detect when Git is performing pull/fetch, including Git aliases. - local -H MATCH MBEGIN MEND match mbegin mend - if [[ $2 =~ (git|hub)\ (.*\ )?($prompt_pure_git_fetch_pattern)(\ .*)?$ ]]; then - # We must flush the async jobs to cancel our git fetch in order - # to avoid conflicts with the user issued pull / fetch. - async_flush_jobs 'prompt_pure' - fi - fi - - typeset -g prompt_pure_cmd_timestamp=$EPOCHSECONDS - - # Shows the current directory and executed command in the title while a process is active. - prompt_pure_set_title 'ignore-escape' "$PWD:t: $2" - - # Disallow Python virtualenv from updating the prompt. Set it to 12 if - # untouched by the user to indicate that Pure modified it. Here we use - # the magic number 12, same as in `psvar`. - export VIRTUAL_ENV_DISABLE_PROMPT=${VIRTUAL_ENV_DISABLE_PROMPT:-12} -} - -# Change the colors if their value are different from the current ones. -prompt_pure_set_colors() { - local color_temp key value - for key value in ${(kv)prompt_pure_colors}; do - zstyle -t ":prompt:pure:$key" color "$value" - case $? in - 1) # The current style is different from the one from zstyle. - zstyle -s ":prompt:pure:$key" color color_temp - prompt_pure_colors[$key]=$color_temp ;; - 2) # No style is defined. - prompt_pure_colors[$key]=$prompt_pure_colors_default[$key] ;; - esac - done -} - -prompt_pure_preprompt_render() { - setopt localoptions noshwordsplit - - unset prompt_pure_async_render_requested - - # Set color for Git branch/dirty status and change color if dirty checking has been delayed. - local git_color=$prompt_pure_colors[git:branch] - local git_dirty_color=$prompt_pure_colors[git:dirty] - [[ -n ${prompt_pure_git_last_dirty_check_timestamp+x} ]] && git_color=$prompt_pure_colors[git:branch:cached] - - # Initialize the preprompt array. - local -a preprompt_parts - - # Username and machine, if applicable. - [[ -n $prompt_pure_state[username] ]] && preprompt_parts+=($prompt_pure_state[username]) - - # Set the path. - preprompt_parts+=('%F{${prompt_pure_colors[path]}}%~%f') - - # Git branch and dirty status info. - typeset -gA prompt_pure_vcs_info - if [[ -n $prompt_pure_vcs_info[branch] ]]; then - preprompt_parts+=("%F{$git_color}"'${prompt_pure_vcs_info[branch]}'"%F{$git_dirty_color}"'${prompt_pure_git_dirty}%f') - fi - # Git action (for example, merge). - if [[ -n $prompt_pure_vcs_info[action] ]]; then - preprompt_parts+=("%F{$prompt_pure_colors[git:action]}"'$prompt_pure_vcs_info[action]%f') - fi - # Git pull/push arrows. - if [[ -n $prompt_pure_git_arrows ]]; then - preprompt_parts+=('%F{$prompt_pure_colors[git:arrow]}${prompt_pure_git_arrows}%f') - fi - # Git stash symbol (if opted in). - if [[ -n $prompt_pure_git_stash ]]; then - preprompt_parts+=('%F{$prompt_pure_colors[git:stash]}${PURE_GIT_STASH_SYMBOL:-≡}%f') - fi - - # Execution time. - [[ -n $prompt_pure_cmd_exec_time ]] && preprompt_parts+=('%F{$prompt_pure_colors[execution_time]}${prompt_pure_cmd_exec_time}%f') - - local cleaned_ps1=$PROMPT - local -H MATCH MBEGIN MEND - if [[ $PROMPT = *$prompt_newline* ]]; then - # Remove everything from the prompt until the newline. This - # removes the preprompt and only the original PROMPT remains. - cleaned_ps1=${PROMPT##*${prompt_newline}} - fi - unset MATCH MBEGIN MEND - - # Construct the new prompt with a clean preprompt. - local -ah ps1 - ps1=( - ${(j. .)preprompt_parts} # Join parts, space separated. - $prompt_newline # Separate preprompt and prompt. - $cleaned_ps1 - ) - - PROMPT="${(j..)ps1}" - - # Expand the prompt for future comparision. - local expanded_prompt - expanded_prompt="${(S%%)PROMPT}" - - if [[ $1 == precmd ]]; then - # Initial newline, for spaciousness. - print - elif [[ $prompt_pure_last_prompt != $expanded_prompt ]]; then - # Redraw the prompt. - prompt_pure_reset_prompt - fi - - typeset -g prompt_pure_last_prompt=$expanded_prompt -} - -prompt_pure_precmd() { - setopt localoptions noshwordsplit - - # Check execution time and store it in a variable. - prompt_pure_check_cmd_exec_time - unset prompt_pure_cmd_timestamp - - # Shows the full path in the title. - prompt_pure_set_title 'expand-prompt' '%~' - - # Modify the colors if some have changed.. - prompt_pure_set_colors - - # Perform async Git dirty check and fetch. - prompt_pure_async_tasks - - # Check if we should display the virtual env. We use a sufficiently high - # index of psvar (12) here to avoid collisions with user defined entries. - psvar[12]= - # Check if a Conda environment is active and display its name. - if [[ -n $CONDA_DEFAULT_ENV ]]; then - psvar[12]="${CONDA_DEFAULT_ENV//[$'\t\r\n']}" - fi - # When VIRTUAL_ENV_DISABLE_PROMPT is empty, it was unset by the user and - # Pure should take back control. - if [[ -n $VIRTUAL_ENV ]] && [[ -z $VIRTUAL_ENV_DISABLE_PROMPT || $VIRTUAL_ENV_DISABLE_PROMPT = 12 ]]; then - psvar[12]="${VIRTUAL_ENV:t}" - export VIRTUAL_ENV_DISABLE_PROMPT=12 - fi - - # Make sure VIM prompt is reset. - prompt_pure_reset_prompt_symbol - - # Print the preprompt. - prompt_pure_preprompt_render "precmd" - - if [[ -n $ZSH_THEME ]]; then - print "WARNING: Oh My Zsh themes are enabled (ZSH_THEME='${ZSH_THEME}'). Pure might not be working correctly." - print "For more information, see: https://github.com/sindresorhus/pure#oh-my-zsh" - unset ZSH_THEME # Only show this warning once. - fi -} - -prompt_pure_async_git_aliases() { - setopt localoptions noshwordsplit - local -a gitalias pullalias - - # List all aliases and split on newline. - gitalias=(${(@f)"$(command git config --get-regexp "^alias\.")"}) - for line in $gitalias; do - parts=(${(@)=line}) # Split line on spaces. - aliasname=${parts[1]#alias.} # Grab the name (alias.[name]). - shift parts # Remove `aliasname` - - # Check alias for pull or fetch. Must be exact match. - if [[ $parts =~ ^(.*\ )?(pull|fetch)(\ .*)?$ ]]; then - pullalias+=($aliasname) - fi - done - - print -- ${(j:|:)pullalias} # Join on pipe, for use in regex. -} - -prompt_pure_async_vcs_info() { - setopt localoptions noshwordsplit - - # Configure `vcs_info` inside an async task. This frees up `vcs_info` - # to be used or configured as the user pleases. - zstyle ':vcs_info:*' enable git - zstyle ':vcs_info:*' use-simple true - # Only export four message variables from `vcs_info`. - zstyle ':vcs_info:*' max-exports 3 - # Export branch (%b), Git toplevel (%R), action (rebase/cherry-pick) (%a) - zstyle ':vcs_info:git*' formats '%b' '%R' '%a' - zstyle ':vcs_info:git*' actionformats '%b' '%R' '%a' - - vcs_info - - local -A info - info[pwd]=$PWD - info[branch]=$vcs_info_msg_0_ - info[top]=$vcs_info_msg_1_ - info[action]=$vcs_info_msg_2_ - - print -r - ${(@kvq)info} -} - -# Fastest possible way to check if a Git repo is dirty. -prompt_pure_async_git_dirty() { - setopt localoptions noshwordsplit - local untracked_dirty=$1 - - if [[ $untracked_dirty = 0 ]]; then - command git diff --no-ext-diff --quiet --exit-code - else - test -z "$(command git status --porcelain --ignore-submodules -unormal)" - fi - - return $? -} - -prompt_pure_async_git_fetch() { - setopt localoptions noshwordsplit - - # Sets `GIT_TERMINAL_PROMPT=0` to disable authentication prompt for Git fetch (Git 2.3+). - export GIT_TERMINAL_PROMPT=0 - # Set SSH `BachMode` to disable all interactive SSH password prompting. - export GIT_SSH_COMMAND="${GIT_SSH_COMMAND:-"ssh"} -o BatchMode=yes" - - local ref - ref=$(command git symbolic-ref -q HEAD) - local -a remote - remote=($(command git for-each-ref --format='%(upstream:remotename) %(refname)' $ref)) - - if [[ -z $remote[1] ]]; then - # No remote specified for this branch, skip fetch. - return 97 - fi - - # Default return code, which indicates Git fetch failure. - local fail_code=99 - - # Guard against all forms of password prompts. By setting the shell into - # MONITOR mode we can notice when a child process prompts for user input - # because it will be suspended. Since we are inside an async worker, we - # have no way of transmitting the password and the only option is to - # kill it. If we don't do it this way, the process will corrupt with the - # async worker. - setopt localtraps monitor - - # Make sure local HUP trap is unset to allow for signal propagation when - # the async worker is flushed. - trap - HUP - - trap ' - # Unset trap to prevent infinite loop - trap - CHLD - if [[ $jobstates = suspended* ]]; then - # Set fail code to password prompt and kill the fetch. - fail_code=98 - kill %% - fi - ' CHLD - - # Only fetch information for the current branch and avoid - # fetching tags or submodules to speed up the process. - command git -c gc.auto=0 fetch \ - --quiet \ - --no-tags \ - --recurse-submodules=no \ - $remote &>/dev/null & - wait $! || return $fail_code - - unsetopt monitor - - # Check arrow status after a successful `git fetch`. - prompt_pure_async_git_arrows -} - -prompt_pure_async_git_arrows() { - setopt localoptions noshwordsplit - command git rev-list --left-right --count HEAD...@'{u}' -} - -prompt_pure_async_git_stash() { - git rev-list --walk-reflogs --count refs/stash -} - -# Try to lower the priority of the worker so that disk heavy operations -# like `git status` has less impact on the system responsivity. -prompt_pure_async_renice() { - setopt localoptions noshwordsplit - - if command -v renice >/dev/null; then - command renice +15 -p $$ - fi - - if command -v ionice >/dev/null; then - command ionice -c 3 -p $$ - fi -} - -prompt_pure_async_init() { - typeset -g prompt_pure_async_inited - if ((${prompt_pure_async_inited:-0})); then - return - fi - prompt_pure_async_inited=1 - async_start_worker "prompt_pure" -u -n - async_register_callback "prompt_pure" prompt_pure_async_callback - async_worker_eval "prompt_pure" prompt_pure_async_renice -} - -prompt_pure_async_tasks() { - setopt localoptions noshwordsplit - - # Initialize the async worker. - prompt_pure_async_init - - # Update the current working directory of the async worker. - async_worker_eval "prompt_pure" builtin cd -q $PWD - - typeset -gA prompt_pure_vcs_info - - local -H MATCH MBEGIN MEND - if [[ $PWD != ${prompt_pure_vcs_info[pwd]}* ]]; then - # Stop any running async jobs. - async_flush_jobs "prompt_pure" - - # Reset Git preprompt variables, switching working tree. - unset prompt_pure_git_dirty - unset prompt_pure_git_last_dirty_check_timestamp - unset prompt_pure_git_arrows - unset prompt_pure_git_stash - unset prompt_pure_git_fetch_pattern - prompt_pure_vcs_info[branch]= - prompt_pure_vcs_info[top]= - fi - unset MATCH MBEGIN MEND - - async_job "prompt_pure" prompt_pure_async_vcs_info - - # Only perform tasks inside a Git working tree. - [[ -n $prompt_pure_vcs_info[top] ]] || return - - prompt_pure_async_refresh -} - -prompt_pure_async_refresh() { - setopt localoptions noshwordsplit - - if [[ -z $prompt_pure_git_fetch_pattern ]]; then - # We set the pattern here to avoid redoing the pattern check until the - # working tree has changed. Pull and fetch are always valid patterns. - typeset -g prompt_pure_git_fetch_pattern="pull|fetch" - async_job "prompt_pure" prompt_pure_async_git_aliases - fi - - async_job "prompt_pure" prompt_pure_async_git_arrows - - # Do not perform `git fetch` if it is disabled or in home folder. - if (( ${PURE_GIT_PULL:-1} )) && [[ $prompt_pure_vcs_info[top] != $HOME ]]; then - # Tell the async worker to do a `git fetch`. - async_job "prompt_pure" prompt_pure_async_git_fetch - fi - - # If dirty checking is sufficiently fast, - # tell the worker to check it again, or wait for timeout. - integer time_since_last_dirty_check=$(( EPOCHSECONDS - ${prompt_pure_git_last_dirty_check_timestamp:-0} )) - if (( time_since_last_dirty_check > ${PURE_GIT_DELAY_DIRTY_CHECK:-1800} )); then - unset prompt_pure_git_last_dirty_check_timestamp - # Check check if there is anything to pull. - async_job "prompt_pure" prompt_pure_async_git_dirty ${PURE_GIT_UNTRACKED_DIRTY:-1} - fi - - # If stash is enabled, tell async worker to count stashes - if zstyle -t ":prompt:pure:git:stash" show; then - async_job "prompt_pure" prompt_pure_async_git_stash - else - unset prompt_pure_git_stash - fi -} - -prompt_pure_check_git_arrows() { - setopt localoptions noshwordsplit - local arrows left=${1:-0} right=${2:-0} - - (( right > 0 )) && arrows+=${PURE_GIT_DOWN_ARROW:-⇣} - (( left > 0 )) && arrows+=${PURE_GIT_UP_ARROW:-⇡} - - [[ -n $arrows ]] || return - typeset -g REPLY=$arrows -} - -prompt_pure_async_callback() { - setopt localoptions noshwordsplit - local job=$1 code=$2 output=$3 exec_time=$4 next_pending=$6 - local do_render=0 - - case $job in - \[async]) - # Handle all the errors that could indicate a crashed - # async worker. See zsh-async documentation for the - # definition of the exit codes. - if (( code == 2 )) || (( code == 3 )) || (( code == 130 )); then - # Our worker died unexpectedly, try to recover immediately. - # TODO(mafredri): Do we need to handle next_pending - # and defer the restart? - typeset -g prompt_pure_async_inited=0 - async_stop_worker prompt_pure - prompt_pure_async_init # Reinit the worker. - prompt_pure_async_tasks # Restart all tasks. - - # Reset render state due to restart. - unset prompt_pure_async_render_requested - fi - ;; - \[async/eval]) - if (( code )); then - # Looks like async_worker_eval failed, - # rerun async tasks just in case. - prompt_pure_async_tasks - fi - ;; - prompt_pure_async_vcs_info) - local -A info - typeset -gA prompt_pure_vcs_info - - # Parse output (z) and unquote as array (Q@). - info=("${(Q@)${(z)output}}") - local -H MATCH MBEGIN MEND - if [[ $info[pwd] != $PWD ]]; then - # The path has changed since the check started, abort. - return - fi - # Check if Git top-level has changed. - if [[ $info[top] = $prompt_pure_vcs_info[top] ]]; then - # If the stored pwd is part of $PWD, $PWD is shorter and likelier - # to be top-level, so we update pwd. - if [[ $prompt_pure_vcs_info[pwd] = ${PWD}* ]]; then - prompt_pure_vcs_info[pwd]=$PWD - fi - else - # Store $PWD to detect if we (maybe) left the Git path. - prompt_pure_vcs_info[pwd]=$PWD - fi - unset MATCH MBEGIN MEND - - # The update has a Git top-level set, which means we just entered a new - # Git directory. Run the async refresh tasks. - [[ -n $info[top] ]] && [[ -z $prompt_pure_vcs_info[top] ]] && prompt_pure_async_refresh - - # Always update branch, top-level and stash. - prompt_pure_vcs_info[branch]=$info[branch] - prompt_pure_vcs_info[top]=$info[top] - prompt_pure_vcs_info[action]=$info[action] - - do_render=1 - ;; - prompt_pure_async_git_aliases) - if [[ -n $output ]]; then - # Append custom Git aliases to the predefined ones. - prompt_pure_git_fetch_pattern+="|$output" - fi - ;; - prompt_pure_async_git_dirty) - local prev_dirty=$prompt_pure_git_dirty - if (( code == 0 )); then - unset prompt_pure_git_dirty - else - typeset -g prompt_pure_git_dirty="*" - fi - - [[ $prev_dirty != $prompt_pure_git_dirty ]] && do_render=1 - - # When `prompt_pure_git_last_dirty_check_timestamp` is set, the Git info is displayed - # in a different color. To distinguish between a "fresh" and a "cached" result, the - # preprompt is rendered before setting this variable. Thus, only upon the next - # rendering of the preprompt will the result appear in a different color. - (( $exec_time > 5 )) && prompt_pure_git_last_dirty_check_timestamp=$EPOCHSECONDS - ;; - prompt_pure_async_git_fetch|prompt_pure_async_git_arrows) - # `prompt_pure_async_git_fetch` executes `prompt_pure_async_git_arrows` - # after a successful fetch. - case $code in - 0) - local REPLY - prompt_pure_check_git_arrows ${(ps:\t:)output} - if [[ $prompt_pure_git_arrows != $REPLY ]]; then - typeset -g prompt_pure_git_arrows=$REPLY - do_render=1 - fi - ;; - 97) - # No remote available, make sure to clear git arrows if set. - if [[ -n $prompt_pure_git_arrows ]]; then - typeset -g prompt_pure_git_arrows= - do_render=1 - fi - ;; - 99|98) - # Git fetch failed. - ;; - *) - # Non-zero exit status from `prompt_pure_async_git_arrows`, - # indicating that there is no upstream configured. - if [[ -n $prompt_pure_git_arrows ]]; then - unset prompt_pure_git_arrows - do_render=1 - fi - ;; - esac - ;; - prompt_pure_async_git_stash) - local prev_stash=$prompt_pure_git_stash - typeset -g prompt_pure_git_stash=$output - [[ $prev_stash != $prompt_pure_git_stash ]] && do_render=1 - ;; - esac - - if (( next_pending )); then - (( do_render )) && typeset -g prompt_pure_async_render_requested=1 - return - fi - - [[ ${prompt_pure_async_render_requested:-$do_render} = 1 ]] && prompt_pure_preprompt_render - unset prompt_pure_async_render_requested -} - -prompt_pure_reset_prompt() { - if [[ $CONTEXT == cont ]]; then - # When the context is "cont", PS2 is active and calling - # reset-prompt will have no effect on PS1, but it will - # reset the execution context (%_) of PS2 which we don't - # want. Unfortunately, we can't save the output of "%_" - # either because it is only ever rendered as part of the - # prompt, expanding in-place won't work. - return - fi - - zle && zle .reset-prompt -} - -prompt_pure_reset_prompt_symbol() { - prompt_pure_state[prompt]=${PURE_PROMPT_SYMBOL:-❯} -} - -prompt_pure_update_vim_prompt_widget() { - setopt localoptions noshwordsplit - prompt_pure_state[prompt]=${${KEYMAP/vicmd/${PURE_PROMPT_VICMD_SYMBOL:-❮}}/(main|viins)/${PURE_PROMPT_SYMBOL:-❯}} - - prompt_pure_reset_prompt -} - -prompt_pure_reset_vim_prompt_widget() { - setopt localoptions noshwordsplit - prompt_pure_reset_prompt_symbol - - # We can't perform a prompt reset at this point because it - # removes the prompt marks inserted by macOS Terminal. -} - -prompt_pure_state_setup() { - setopt localoptions noshwordsplit - - # Check SSH_CONNECTION and the current state. - local ssh_connection=${SSH_CONNECTION:-$PROMPT_PURE_SSH_CONNECTION} - local username hostname - if [[ -z $ssh_connection ]] && (( $+commands[who] )); then - # When changing user on a remote system, the $SSH_CONNECTION - # environment variable can be lost. Attempt detection via `who`. - local who_out - who_out=$(who -m 2>/dev/null) - if (( $? )); then - # Who am I not supported, fallback to plain who. - local -a who_in - who_in=( ${(f)"$(who 2>/dev/null)"} ) - who_out="${(M)who_in:#*[[:space:]]${TTY#/dev/}[[:space:]]*}" - fi - - local reIPv6='(([0-9a-fA-F]+:)|:){2,}[0-9a-fA-F]+' # Simplified, only checks partial pattern. - local reIPv4='([0-9]{1,3}\.){3}[0-9]+' # Simplified, allows invalid ranges. - # Here we assume two non-consecutive periods represents a - # hostname. This matches `foo.bar.baz`, but not `foo.bar`. - local reHostname='([.][^. ]+){2}' - - # Usually the remote address is surrounded by parenthesis, but - # not on all systems (e.g. busybox). - local -H MATCH MBEGIN MEND - if [[ $who_out =~ "\(?($reIPv4|$reIPv6|$reHostname)\)?\$" ]]; then - ssh_connection=$MATCH - - # Export variable to allow detection propagation inside - # shells spawned by this one (e.g. tmux does not always - # inherit the same tty, which breaks detection). - export PROMPT_PURE_SSH_CONNECTION=$ssh_connection - fi - unset MATCH MBEGIN MEND - fi - - hostname='%F{$prompt_pure_colors[host]}@%m%f' - # Show `username@host` if logged in through SSH. - [[ -n $ssh_connection ]] && username='%F{$prompt_pure_colors[user]}%n%f'"$hostname" - - # Show `username@host` if root, with username in default color. - [[ $UID -eq 0 ]] && username='%F{$prompt_pure_colors[user:root]}%n%f'"$hostname" - - typeset -gA prompt_pure_state - prompt_pure_state[version]="1.11.0" - prompt_pure_state+=( - username "$username" - prompt "${PURE_PROMPT_SYMBOL:-❯}" - ) -} - -prompt_pure_system_report() { - setopt localoptions noshwordsplit - - print - "- Zsh: $($SHELL --version) ($SHELL)" - print -n - "- Operating system: " - case "$(uname -s)" in - Darwin) print "$(sw_vers -productName) $(sw_vers -productVersion) ($(sw_vers -buildVersion))";; - *) print "$(uname -s) ($(uname -v))";; - esac - print - "- Terminal program: ${TERM_PROGRAM:-unknown} (${TERM_PROGRAM_VERSION:-unknown})" - print -n - "- Tmux: " - [[ -n $TMUX ]] && print "yes" || print "no" - - local git_version - git_version=($(git --version)) # Remove newlines, if hub is present. - print - "- Git: $git_version" - - print - "- Pure state:" - for k v in "${(@kv)prompt_pure_state}"; do - print - " - $k: \`${(q)v}\`" - done - print - "- PROMPT: \`$(typeset -p PROMPT)\`" - print - "- Colors: \`$(typeset -p prompt_pure_colors)\`" - print - "- Virtualenv: \`$(typeset -p VIRTUAL_ENV_DISABLE_PROMPT)\`" - print - "- Conda: \`$(typeset -p CONDA_CHANGEPS1)\`" - - local ohmyzsh=0 - typeset -la frameworks - (( $+ANTIBODY_HOME )) && frameworks+=("Antibody") - (( $+ADOTDIR )) && frameworks+=("Antigen") - (( $+ANTIGEN_HS_HOME )) && frameworks+=("Antigen-hs") - (( $+functions[upgrade_oh_my_zsh] )) && { - ohmyzsh=1 - frameworks+=("Oh My Zsh") - } - (( $+ZPREZTODIR )) && frameworks+=("Prezto") - (( $+ZPLUG_ROOT )) && frameworks+=("Zplug") - (( $+ZPLGM )) && frameworks+=("Zplugin") - - (( $#frameworks == 0 )) && frameworks+=("None") - print - "- Detected frameworks: ${(j:, :)frameworks}" - - if (( ohmyzsh )); then - print - " - Oh My Zsh:" - print - " - Plugins: ${(j:, :)plugins}" - fi -} - -prompt_pure_setup() { - # Prevent percentage showing up if output doesn't end with a newline. - export PROMPT_EOL_MARK='' - - prompt_opts=(subst percent) - - # Borrowed from `promptinit`. Sets the prompt options in case Pure was not - # initialized via `promptinit`. - setopt noprompt{bang,cr,percent,subst} "prompt${^prompt_opts[@]}" - - if [[ -z $prompt_newline ]]; then - # This variable needs to be set, usually set by promptinit. - typeset -g prompt_newline=$'\n%{\r%}' - fi - - zmodload zsh/datetime - zmodload zsh/zle - zmodload zsh/parameter - zmodload zsh/zutil - - autoload -Uz add-zsh-hook - autoload -Uz vcs_info - autoload -Uz async && async - - # The `add-zle-hook-widget` function is not guaranteed to be available. - # It was added in Zsh 5.3. - autoload -Uz +X add-zle-hook-widget 2>/dev/null - - # Set the colors. - typeset -gA prompt_pure_colors_default prompt_pure_colors - prompt_pure_colors_default=( - execution_time yellow - git:arrow cyan - git:stash cyan - git:branch 242 - git:branch:cached red - git:action yellow - git:dirty 218 - host 242 - path blue - prompt:error red - prompt:success magenta - prompt:continuation 242 - user 242 - user:root default - virtualenv 242 - ) - prompt_pure_colors=("${(@kv)prompt_pure_colors_default}") - - add-zsh-hook precmd prompt_pure_precmd - add-zsh-hook preexec prompt_pure_preexec - - prompt_pure_state_setup - - zle -N prompt_pure_reset_prompt - zle -N prompt_pure_update_vim_prompt_widget - zle -N prompt_pure_reset_vim_prompt_widget - if (( $+functions[add-zle-hook-widget] )); then - add-zle-hook-widget zle-line-finish prompt_pure_reset_vim_prompt_widget - add-zle-hook-widget zle-keymap-select prompt_pure_update_vim_prompt_widget - fi - - # If a virtualenv is activated, display it in grey. - PROMPT='%(12V.%F{$prompt_pure_colors[virtualenv]}%12v%f .)' - - # Prompt turns red if the previous command didn't exit with 0. - local prompt_indicator='%(?.%F{$prompt_pure_colors[prompt:success]}.%F{$prompt_pure_colors[prompt:error]})${prompt_pure_state[prompt]}%f ' - PROMPT+=$prompt_indicator - - # Indicate continuation prompt by … and use a darker color for it. - PROMPT2='%F{$prompt_pure_colors[prompt:continuation]}… %(1_.%_ .%_)%f'$prompt_indicator - - # Store prompt expansion symbols for in-place expansion via (%). For - # some reason it does not work without storing them in a variable first. - typeset -ga prompt_pure_debug_depth - prompt_pure_debug_depth=('%e' '%N' '%x') - - # Compare is used to check if %N equals %x. When they differ, the main - # prompt is used to allow displaying both filename and function. When - # they match, we use the secondary prompt to avoid displaying duplicate - # information. - local -A ps4_parts - ps4_parts=( - depth '%F{yellow}${(l:${(%)prompt_pure_debug_depth[1]}::+:)}%f' - compare '${${(%)prompt_pure_debug_depth[2]}:#${(%)prompt_pure_debug_depth[3]}}' - main '%F{blue}${${(%)prompt_pure_debug_depth[3]}:t}%f%F{242}:%I%f %F{242}@%f%F{blue}%N%f%F{242}:%i%f' - secondary '%F{blue}%N%f%F{242}:%i' - prompt '%F{242}>%f ' - ) - # Combine the parts with conditional logic. First the `:+` operator is - # used to replace `compare` either with `main` or an ampty string. Then - # the `:-` operator is used so that if `compare` becomes an empty - # string, it is replaced with `secondary`. - local ps4_symbols='${${'${ps4_parts[compare]}':+"'${ps4_parts[main]}'"}:-"'${ps4_parts[secondary]}'"}' - - # Improve the debug prompt (PS4), show depth by repeating the +-sign and - # add colors to highlight essential parts like file and function name. - PROMPT4="${ps4_parts[depth]} ${ps4_symbols}${ps4_parts[prompt]}" - - # Guard against Oh My Zsh themes overriding Pure. - unset ZSH_THEME - - # Guard against (ana)conda changing the PS1 prompt - # (we manually insert the env when it's available). - export CONDA_CHANGEPS1=no -} - -prompt_pure_setup "$@" diff --git a/zsh.d/prompts/pure/readme.md b/zsh.d/prompts/pure/readme.md deleted file mode 100644 index cc06b39..0000000 --- a/zsh.d/prompts/pure/readme.md +++ /dev/null @@ -1,281 +0,0 @@ -# Pure - -> Pretty, minimal and fast ZSH prompt - - - -
- ---- - -
-

-

- - Sindre's open source work is supported by the community - -

- Special thanks to: -
-
- - Botpress - -
- Botpress is an open-source conversational assistant creation platform. -
- They welcome contributions from anyone, whether you're into machine learning,
want to get started in open-source, or just have an improvement idea.
-
-

-
- ---- - -
- -## Overview - -Most prompts are cluttered, ugly and slow. I wanted something visually pleasing that stayed out of my way. - -### Why? - -- Comes with the perfect prompt character. - Author went through the whole Unicode range to find it. -- Shows `git` branch and whether it's dirty (with a `*`). -- Indicates when you have unpushed/unpulled `git` commits with up/down arrows. *(Check is done asynchronously!)* -- Prompt character turns red if the last command didn't exit with `0`. -- Command execution time will be displayed if it exceeds the set threshold. -- Username and host only displayed when in an SSH session. -- Shows the current path in the title and the [current folder & command](screenshot-title-cmd.png) when a process is running. -- Support VI-mode indication by reverse prompt symbol (Zsh 5.3+). -- Makes an excellent starting point for your own custom prompt. - -## Install - -Can be installed with `npm` or manually. Requires Git 2.0.0+ and ZSH 5.2+. Older versions of ZSH are known to work, but they are **not** recommended. - -### npm - -```console -$ npm install --global pure-prompt -``` - -That's it. Skip to [Getting started](#getting-started). - -### Manually - -1. Clone this repo somewhere. Here we'll use `$HOME/.zsh/pure`. - -```sh -mkdir -p "$HOME/.zsh" -git clone https://github.com/sindresorhus/pure.git "$HOME/.zsh/pure" -``` - -2. Add the path of the cloned repo to `$fpath` in `$HOME/.zshrc`. -```sh -# .zshrc -fpath+=$HOME/.zsh/pure -``` - -## Getting started - -Initialize the prompt system (if not so already) and choose `pure`: - -```sh -# .zshrc -autoload -U promptinit; promptinit -prompt pure -``` - -## Options - -| Option | Description | Default value | -| :------------------------------- | :--------------------------------------------------------------------------------------------- | :------------- | -| **`PURE_CMD_MAX_EXEC_TIME`** | The max execution time of a process before its run time is shown when it exits. | `5` seconds | -| **`PURE_GIT_PULL=0`** | Prevents Pure from checking whether the current Git remote has been updated. | | -| **`PURE_GIT_UNTRACKED_DIRTY=0`** | Do not include untracked files in dirtiness check. Mostly useful on large repos (like WebKit). | | -| **`PURE_GIT_DELAY_DIRTY_CHECK`** | Time in seconds to delay git dirty checking when `git status` takes > 5 seconds. | `1800` seconds | -| **`PURE_PROMPT_SYMBOL`** | Defines the prompt symbol. | `❯` | -| **`PURE_PROMPT_VICMD_SYMBOL`** | Defines the prompt symbol used when the `vicmd` keymap is active (VI-mode). | `❮` | -| **`PURE_GIT_DOWN_ARROW`** | Defines the git down arrow symbol. | `⇣` | -| **`PURE_GIT_UP_ARROW`** | Defines the git up arrow symbol. | `⇡` | -| **`PURE_GIT_STASH_SYMBOL`** | Defines the git stash symbol. | `≡` | - -Showing git stash status as part of the prompt is not activated by default. To activate this you'll need to opt in via `zstyle`: - -`zstyle :prompt:pure:git:stash show yes` - -## Colors - -As explained in ZSH's [manual](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting), color values can be: -- A decimal integer corresponding to the color index of your terminal. If your `$TERM` is `xterm-256color`, see this [chart](https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg). -- The name of one of the following nine colors: `black`, `red`, `green`, `yellow`, `blue`, `magenta`, `cyan`, `white`, and `default` (the terminal’s default foreground) -- `#` followed by an RGB triplet in hexadecimal format, for example `#424242`. Only if your terminal supports 24-bit colors (true color) or when the [`zsh/nearcolor` module](http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002fnearcolor-Module) is loaded. - -Colors can be changed by using [`zstyle`](http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002fzutil-Module) with a pattern of the form `:prompt:pure:$color_name` and style `color`. The color names, their default, and what part they affect are: -- `execution_time` (yellow) - The execution time of the last command when exceeding `PURE_CMD_MAX_EXEC_TIME`. -- `git:arrow` (cyan) - For `PURE_GIT_UP_ARROW` and `PURE_GIT_DOWN_ARROW`. -- `git:stash` (cyan) - For `PURE_GIT_STASH_SYMBOL`. -- `git:branch` (242) - The name of the current branch when in a Git repository. -- `git:branch:cached` (red) - The name of the current branch when the data isn't fresh. -- `git:action` (242) - The current action in progress (cherry-pick, rebase, etc.) when in a Git repository. -- `git:dirty` (218) - The asterisk showing the branch is dirty. -- `host` (242) - The hostname when on a remote machine. -- `path` (blue) - The current path, for example, `PWD`. -- `prompt:error` (red) - The `PURE_PROMPT_SYMBOL` when the previous command has *failed*. -- `prompt:success` (magenta) - The `PURE_PROMPT_SYMBOL` when the previous command has *succeded*. -- `prompt:continuation` (242) - The color for showing the state of the parser in the continuation prompt (PS2). It's the pink part in [this screenshot](https://user-images.githubusercontent.com/147409/70068574-ebc74800-15f8-11ea-84c0-8b94a4b57ff4.png), it appears in the same spot as `virtualenv`. You could for example matching both colors so that Pure has a uniform look. -- `user` (242) - The username when on remote machine. -- `user:root` (default) - The username when the user is root. -- `virtualenv` (242) - The name of the Python `virtualenv` when in use. - -The following diagram shows where each color is applied on the prompt: - -``` -┌────────────────────────────────────────────────────── user -│ ┌─────────────────────────────────────────────── host -│ │ ┌─────────────────────────────────── path -│ │ │ ┌──────────────────────── git:branch -│ │ │ │ ┌────────────────── git:dirty -│ │ │ │ │ ┌──────────────── git:action -│ │ │ │ │ │ ┌─────── git:arrow -│ │ │ │ │ │ │ ┌───── git:stash -│ │ │ │ │ │ │ │ ┌─── execution_time -│ │ │ │ │ │ │ │ │ -zaphod@heartofgold ~/dev/pure master* rebase-i ⇡ ≡ 42s -venv ❯ -│ │ -│ └───────────────────────────────────────────────── prompt -└────────────────────────────────────────────────────── virtualenv (or prompt:continuation) -``` - -### RGB colors - -There are two ways to use RGB colors with the hexadecimal format. The correct way is to use a [terminal that support 24-bit colors](https://gist.github.com/XVilka/8346728) and enable this feature as explained in the terminal's documentation. - -If you can't use such terminal, the module [`zsh/nearcolor`](http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002fnearcolor-Module) can be useful. It will map any hexadecimal color to the nearest color in the 88 or 256 color palettes of your termial, but without using the first 16 colors, since their values can be modified by the user. Keep in mind that when using this module you won't be able to display true RGB colors. It only allows you to specify colors in a more convenient way. The following is an example on how to use this module: - -```sh -# .zshrc -zmodload zsh/nearcolor -zstyle :prompt:pure:path color '#FF0000' -``` - -## Example - -```sh -# .zshrc - -autoload -U promptinit; promptinit - -# optionally define some options -PURE_CMD_MAX_EXEC_TIME=10 - -# change the path color -zstyle :prompt:pure:path color white - -# change the color for both `prompt:success` and `prompt:error` -zstyle ':prompt:pure:prompt:*' color cyan - -# turn on git stash status -zstyle :prompt:pure:git:stash show yes - -prompt pure -``` - -## Tips - -In the screenshot you see Pure running in [Hyper](https://hyper.is) with the [hyper-snazzy](https://github.com/sindresorhus/hyper-snazzy) theme and Menlo font. - -The [Tomorrow Night Eighties](https://github.com/chriskempson/tomorrow-theme) theme with the [Droid Sans Mono](https://www.fontsquirrel.com/fonts/droid-sans-mono) font (15pt) is also a [nice combination](https://github.com/sindresorhus/pure/blob/95ee3e7618c6e2162a1e3cdac2a88a20ac3beb27/screenshot.png).
-*Just make sure you have anti-aliasing enabled in your terminal.* - -To have commands colorized as seen in the screenshot, install [zsh-syntax-highlighting](https://github.com/zsh-users/zsh-syntax-highlighting). - -## Integration - -### [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh) - -1. Set `ZSH_THEME=""` in your `.zshrc` to disable oh-my-zsh themes. -2. Follow the Pure [Install](#install) instructions. -3. Do not enable the following (incompatible) plugins: `vi-mode`, `virtualenv`. - -**NOTE:** `oh-my-zsh` overrides the prompt so Pure must be activated *after* `source $ZSH/oh-my-zsh.sh`. - -### [prezto](https://github.com/sorin-ionescu/prezto) - -Pure is bundled with Prezto. No need to install it. - -Add `prompt pure` to your `~/.zpreztorc`. - -### [zim](https://github.com/Eriner/zim) - -Add `zmodule sindresorhus/pure --source async.zsh --source pure.zsh` to your `.zimrc` and run `zimfw install`. - -### [antigen](https://github.com/zsh-users/antigen) - -Update your `.zshrc` file with the following two lines (order matters). Do not use the `antigen theme` function. - -```sh -antigen bundle mafredri/zsh-async -antigen bundle sindresorhus/pure -``` - -### [antibody](https://github.com/getantibody/antibody) - -Update your `.zshrc` file with the following two lines (order matters): - -```sh -antibody bundle mafredri/zsh-async -antibody bundle sindresorhus/pure -``` - -### [zplug](https://github.com/zplug/zplug) - -Update your `.zshrc` file with the following two lines: - -```sh -zplug mafredri/zsh-async, from:github -zplug sindresorhus/pure, use:pure.zsh, from:github, as:theme -``` - -### [zinit](https://github.com/zdharma/zinit) - -Update your `.zshrc` file with the following two lines (order matters): - -```sh -zinit ice compile'(pure|async).zsh' pick'async.zsh' src'pure.zsh' -zinit light sindresorhus/pure -``` - -## FAQ - -There are currently no FAQs. - -See [FAQ Archive](https://github.com/sindresorhus/pure/wiki/FAQ-Archive) for previous FAQs. - -## Ports - -- **ZSH** - - [therealklanni/purity](https://github.com/therealklanni/purity) - More compact current working directory, important details on the main prompt line, and extra Git indicators. - - [intelfx/pure](https://github.com/intelfx/pure) - Solarized-friendly colors, highly verbose, and fully async Git integration. - - [dfurnes/purer](https://github.com/dfurnes/purer) - Compact single-line prompt with built-in Vim-mode indicator. - - [chabou/pure-now](https://github.com/chabou/pure-now) - Fork with [Now](https://zeit.co/now) support. - - [pure10k](https://gist.github.com/romkatv/7cbab80dcbc639003066bb68b9ae0bbf) - Configuration file for [Powerlevel10k](https://github.com/romkatv/powerlevel10k/) that makes it look like Pure. -- **Bash** - - [sapegin/dotfiles](https://github.com/sapegin/dotfiles) - [Prompt](https://github.com/sapegin/dotfiles/blob/dd063f9c30de7d2234e8accdb5272a5cc0a3388b/includes/bash_prompt.bash) and [color theme](https://github.com/sapegin/dotfiles/tree/master/color) for Terminal.app. -- **Fish** - - [brandonweiss/pure.fish](https://github.com/brandonweiss/pure.fish) - Pure-inspired prompt for Fish. Not intended to have feature parity. - - [rafaelrinaldi/pure](https://github.com/rafaelrinaldi/pure) - Support for bare Fish and various framework ([Oh-My-Fish](https://github.com//oh-my-fish/oh-my-fish), [Fisherman](https://github.com//fisherman/fisherman), and [Wahoo](https://github.com//bucaran/wahoo)). -- **Rust** - - [xcambar/purs](https://github.com/xcambar/purs) - Pure-inspired prompt in Rust. -- **Go** - - [talal/mimir](https://github.com/talal/mimir) - Pure-inspired prompt in Go with Kubernetes and OpenStack cloud support. Not intended to have feature parity. -- **PowerShell** - - [nickcox/pure-pwsh](https://github.com/nickcox/pure-pwsh/) - PowerShell/PS Core implementation of the Pure prompt. - -## Team - -[![Sindre Sorhus](https://github.com/sindresorhus.png?size=100)](https://sindresorhus.com) | [![Mathias Fredriksson](https://github.com/mafredri.png?size=100)](https://github.com/mafredri) ----|--- -[Sindre Sorhus](https://github.com/sindresorhus) | [Mathias Fredriksson](https://github.com/mafredri) diff --git a/zsh.d/prompts/pure/screenshot-title-cmd.png b/zsh.d/prompts/pure/screenshot-title-cmd.png deleted file mode 100644 index 3f4b77c20d712f7f3a1d651ad1f53262f5d00987..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24844 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 Zy{=138 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 diff --git a/zsh.d/prompts/pure/screenshot.png b/zsh.d/prompts/pure/screenshot.png deleted file mode 100644 index 1a2767874f23197b7d24614cab8c3b37d55cb76a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72121 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 be=0opXdjX-b`?BQPkzttK;J5FTGsyo7yVsp diff --git a/zsh.d/prompts/pure/repo.txt b/zsh.d/prompts/pure_repo.txt similarity index 100% rename from zsh.d/prompts/pure/repo.txt rename to zsh.d/prompts/pure_repo.txt