diff --git a/README.md b/README.md index f46e378c..7b2efb1d 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ and prompt themes. ## Installation +### Manual + Prezto will work with any recent release of Zsh, but the minimum required version is **4.3.11**. @@ -35,7 +37,7 @@ version is **4.3.11**. git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-${XDG_CONFIG_HOME:-$HOME/.config}/zsh}/.zprezto" ``` - - Configure `$XDG_CONFIG_HOME` and `$ZDOTDIR` in _`${$HOME}/.zshenv`_: + - Configure `$XDG_CONFIG_HOME` and `$ZDOTDIR` in _`$HOME/.zshenv`_: ```sh export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:=$HOME/.config}" @@ -71,6 +73,14 @@ version is **4.3.11**. 05. Open a new Zsh terminal window or tab. +### [Fig](https://fig.io) + +Fig adds apps, shortcuts, and autocomplete to your existing terminal. + +Install `prezto` in just one click. + +<a href="https://fig.io/plugins/other/prezto" target="_blank"><img src="https://fig.io/badges/install-with-fig.svg" /></a> + ### Troubleshooting If you are not able to find certain commands after switching to Prezto, modify diff --git a/modules/archive/functions/unarchive b/modules/archive/functions/unarchive index 66c7e35a..3e58b867 100644 --- a/modules/archive/functions/unarchive +++ b/modules/archive/functions/unarchive @@ -34,24 +34,24 @@ fi # here, we check for dropin/multi-threaded replacements # this should eventually be moved to modules/archive/init.zsh # as a global alias -if (( $+commands[pigz] )); then - _gzip_bin='pigz' +if (( $+commands[unpigz] )); then + _gzip_bin='unpigz' else - _gzip_bin='gzip' + _gzip_bin='gunzip' fi if (( $+commands[pixz] )); then - _xz_bin='pixz' + _xz_bin='pixz -d' else _xz_bin='xz' fi -if (( $+commands[lbzip2] )); then - _bzip2_bin='lbzip2' -elif (( $+commands[pbzip2] )); then - _bzip2_bin='pbzip2' +if (( $+commands[lbunzip2] )); then + _bzip2_bin='lbunzip2' +elif (( $+commands[pbunzip2] )); then + _bzip2_bin='pbunzip2' else - _bzip2_bin='bzip2' + _bzip2_bin='bunzip2' fi _zstd_bin='zstd' diff --git a/modules/command-not-found/init.zsh b/modules/command-not-found/init.zsh index d81692d8..cf8f64ea 100644 --- a/modules/command-not-found/init.zsh +++ b/modules/command-not-found/init.zsh @@ -7,14 +7,14 @@ # # Load command-not-found on Debian-based distributions. -if [[ -s '/etc/zsh_command_not_found' ]]; then - source '/etc/zsh_command_not_found' +if [[ -s /etc/zsh_command_not_found ]]; then + source /etc/zsh_command_not_found # Load command-not-found on Arch Linux-based distributions. -elif [[ -s '/usr/share/doc/pkgfile/command-not-found.zsh' ]]; then - source '/usr/share/doc/pkgfile/command-not-found.zsh' +elif [[ -s /usr/share/doc/pkgfile/command-not-found.zsh ]]; then + source /usr/share/doc/pkgfile/command-not-found.zsh # Load command-not-found on macOS when Homebrew tap is configured. elif (( $+commands[brew] )) \ - && [[ -s "${hb_cnf_handler::="$(brew --repository 2> /dev/null)"/Library/Taps/homebrew/homebrew-command-not-found/handler.sh}" ]]; then + && [[ -s ${hb_cnf_handler::="${HOMEBREW_REPOSITORY:-$commands[brew]:A:h:h}/Library/Taps/homebrew/homebrew-command-not-found/handler.sh"} ]]; then source "$hb_cnf_handler" unset hb_cnf_handler # Return if requirements are not found. diff --git a/modules/completion/external b/modules/completion/external index 11ad0a45..67921bc1 160000 --- a/modules/completion/external +++ b/modules/completion/external @@ -1 +1 @@ -Subproject commit 11ad0a45ff1695cac00e86c687cce6fa1fd1cdbd +Subproject commit 67921bc12502c1e7b0f156533fbac2cb51f6943d diff --git a/modules/completion/init.zsh b/modules/completion/init.zsh index fc5cfd45..9ba95634 100644 --- a/modules/completion/init.zsh +++ b/modules/completion/init.zsh @@ -14,12 +14,16 @@ fi # Add zsh-completions to $fpath. fpath=(${0:h}/external/src $fpath) -# Add completion for keg-only brewed curl when available. -if (( $+commands[brew] )) \ - && [[ -d "${curl_prefix::="$(brew --prefix 2> /dev/null)"/opt/curl}" ]]; then - fpath=($curl_prefix/share/zsh/site-functions $fpath) +# Add completion for keg-only brewed curl on macOS when available. +if (( $+commands[brew] )); then + brew_prefix=${HOMEBREW_PREFIX:-${HOMEBREW_REPOSITORY:-$commands[brew]:A:h:h}} + # $HOMEBREW_PREFIX defaults to $HOMEBREW_REPOSITORY but is explicitly set to + # /usr/local when $HOMEBREW_REPOSITORY is /usr/local/Homebrew. + # https://github.com/Homebrew/brew/blob/2a850e02d8f2dedcad7164c2f4b95d340a7200bb/bin/brew#L66-L69 + [[ $brew_prefix == '/usr/local/Homebrew' ]] && brew_prefix=$brew_prefix:h + fpath=($brew_prefix/opt/curl/share/zsh/site-functions(/N) $fpath) + unset brew_prefix fi -unset curl_prefix # # Options diff --git a/modules/directory/README.md b/modules/directory/README.md index 86953a47..8603d9f6 100644 --- a/modules/directory/README.md +++ b/modules/directory/README.md @@ -17,6 +17,13 @@ Sets directory options and defines directory aliases. ## Aliases +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:directory:alias' skip 'yes' +``` + - `d` prints the contents of the directory stack. - `1 ... 9` changes the directory to the **n** previous one. diff --git a/modules/directory/init.zsh b/modules/directory/init.zsh index 8abc1e24..caf08d2a 100644 --- a/modules/directory/init.zsh +++ b/modules/directory/init.zsh @@ -25,5 +25,8 @@ unsetopt CLOBBER # Do not overwrite existing files with > and >>. # Aliases # -alias d='dirs -v' -for index ({1..9}) alias "$index"="cd +${index}"; unset index +if ! zstyle -t ':prezto:module:directory:alias' skip; then + alias -- -='cd -' + alias d='dirs -v' + for index ({1..9}) alias "$index"="cd +${index}"; unset index +fi diff --git a/modules/docker/alias.zsh b/modules/docker/alias.zsh index cdd9f7c8..12eb2542 100644 --- a/modules/docker/alias.zsh +++ b/modules/docker/alias.zsh @@ -152,26 +152,26 @@ alias dkmv='docker-machine version' alias dkmx='docker-machine stop' # Docker Compose (c) -alias dkc='docker-compose' -alias dkcb='docker-compose build' -alias dkcB='docker-compose build --no-cache' -alias dkcd='docker-compose down' -alias dkce='docker-compose exec' -alias dkck='docker-compose kill' -alias dkcl='docker-compose logs' -alias dkcls='docker-compose ps' -alias dkcp='docker-compose pause' -alias dkcP='docker-compose unpause' -alias dkcpl='docker-compose pull' -alias dkcph='docker-compose push' -alias dkcps='docker-compose ps' -alias dkcr='docker-compose run' -alias dkcR='docker-compose run --rm' -alias dkcrm='docker-compose rm' -alias dkcs='docker-compose start' -alias dkcsc='docker-compose scale' -alias dkcS='docker-compose restart' -alias dkcu='docker-compose up' -alias dkcU='docker-compose up -d' -alias dkcv='docker-compose version' -alias dkcx='docker-compose stop' +alias dkc='docker compose' +alias dkcb='docker compose build' +alias dkcB='docker compose build --no-cache' +alias dkcd='docker compose down' +alias dkce='docker compose exec' +alias dkck='docker compose kill' +alias dkcl='docker compose logs' +alias dkcls='docker compose ps' +alias dkcp='docker compose pause' +alias dkcP='docker compose unpause' +alias dkcpl='docker compose pull' +alias dkcph='docker compose push' +alias dkcps='docker compose ps' +alias dkcr='docker compose run' +alias dkcR='docker compose run --rm' +alias dkcrm='docker compose rm' +alias dkcs='docker compose start' +alias dkcsc='docker compose scale' +alias dkcS='docker compose restart' +alias dkcu='docker compose up' +alias dkcU='docker compose up -d' +alias dkcv='docker compose version' +alias dkcx='docker compose stop' diff --git a/modules/emacs/README.md b/modules/emacs/README.md index f93304aa..8cf7bfc8 100644 --- a/modules/emacs/README.md +++ b/modules/emacs/README.md @@ -12,6 +12,13 @@ execution of `carton`. ## Aliases +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:emacs:alias' skip 'yes' +``` + ### Carton - `cai` installs dependencies. diff --git a/modules/emacs/init.zsh b/modules/emacs/init.zsh index 3acc965c..a53285ab 100644 --- a/modules/emacs/init.zsh +++ b/modules/emacs/init.zsh @@ -19,7 +19,9 @@ source "$HOME/.cask/etc/cask_completion.zsh" 2> /dev/null # Aliases # -alias cai='cask install' -alias cau='cask update' -alias caI='cask init' -alias cae='cask exec' +if ! zstyle -t ':prezto:module:emacs:alias' skip; then + alias cai='cask install' + alias cau='cask update' + alias caI='cask init' + alias cae='cask exec' +fi diff --git a/modules/fasd/README.md b/modules/fasd/README.md index 1958a739..04f9693a 100644 --- a/modules/fasd/README.md +++ b/modules/fasd/README.md @@ -19,6 +19,13 @@ instead of the bundled version. ## Aliases +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:fasd:alias' skip 'yes' +``` + - `j` changes the current working directory interactively. ## Completion diff --git a/modules/fasd/init.zsh b/modules/fasd/init.zsh index f948789e..bd142f80 100644 --- a/modules/fasd/init.zsh +++ b/modules/fasd/init.zsh @@ -53,5 +53,7 @@ function fasd_cd { # Aliases # -# Changes the current working directory interactively. -alias j='fasd_cd -i' +if ! zstyle -t ':prezto:module:fasd:alias' skip; then + # Changes the current working directory interactively. + alias j='fasd_cd -i' +fi diff --git a/modules/git/functions/git-hub-browse b/modules/git/functions/git-hub-browse index bdeb298b..3451198c 100644 --- a/modules/git/functions/git-hub-browse +++ b/modules/git/functions/git-hub-browse @@ -47,7 +47,7 @@ file="$3" if [[ -n "$url" ]]; then url="$url/tree/$reference/$file" - if [[ -z "$BROWSER" ]]; then + if [[ -n "$BROWSER" ]]; then "$BROWSER" "$url" return 0 else diff --git a/modules/git/functions/git-info b/modules/git/functions/git-info index 07f261d4..eca50462 100644 --- a/modules/git/functions/git-info +++ b/modules/git/functions/git-info @@ -417,6 +417,11 @@ function git-info { if (( dirty > 0 )); then zstyle -s ':prezto:module:git:info:dirty' format 'dirty_format' zformat -f dirty_formatted "$dirty_format" "D:$dirty" + # Overwrite branch format to use dirty-branch format + zstyle -s ':prezto:module:git:info:dirty-branch' format 'branch_format' + if [[ -n "$branch" && -n "$branch_format" ]]; then + zformat -f branch_formatted "$branch_format" "b:$branch" + fi else zstyle -s ':prezto:module:git:info:clean' format 'clean_formatted' fi diff --git a/modules/gnu-utility/init.zsh b/modules/gnu-utility/init.zsh index 85e86050..2cfbf2fa 100644 --- a/modules/gnu-utility/init.zsh +++ b/modules/gnu-utility/init.zsh @@ -44,8 +44,7 @@ _gnu_utility_cmds=( 'libtool' 'libtoolize' # Miscellaneous - 'egrep' 'fgrep' 'getopt' 'grep' 'indent' 'make' 'sed' 'tar' 'time' 'units' - 'which' + 'awk' 'getopt' 'grep' 'indent' 'make' 'sed' 'tar' 'time' 'units' 'which' ) # Wrap GNU utilities in functions. diff --git a/modules/history-substring-search/README.md b/modules/history-substring-search/README.md index a8529e49..32841106 100644 --- a/modules/history-substring-search/README.md +++ b/modules/history-substring-search/README.md @@ -71,6 +71,24 @@ _`${ZDOTDIR:-$HOME}/.zpreztorc`_: zstyle ':prezto:module:history-substring-search' prefixed 'yes' ``` +### Fuzzy search + +To enable fuzzy search add the following line to +`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:history-substring-search' fuzzy 'yes' +``` + +### Unique results + +To retrieve only unique results (remove duplicates) add the following line to +`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:history-substring-search' ensure-unique 'yes' +``` + ## Authors _The authors of this module should be contacted via the [issue tracker][5]._ diff --git a/modules/history-substring-search/external b/modules/history-substring-search/external index 0f80b8eb..400e58a8 160000 --- a/modules/history-substring-search/external +++ b/modules/history-substring-search/external @@ -1 +1 @@ -Subproject commit 0f80b8eb3368b46e5e573c1d91ae69eb095db3fb +Subproject commit 400e58a87f72ecec14f783fbd29bc6be4ff1641c diff --git a/modules/history-substring-search/init.zsh b/modules/history-substring-search/init.zsh index fe00722d..37483255 100644 --- a/modules/history-substring-search/init.zsh +++ b/modules/history-substring-search/init.zsh @@ -42,6 +42,14 @@ if ! zstyle -t ':prezto:module:history-substring-search' color; then unset HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_{FOUND,NOT_FOUND} fi +if zstyle -t ':prezto:module:history-substring-search' fuzzy; then + HISTORY_SUBSTRING_SEARCH_FUZZY=1 +fi + +if zstyle -t ':prezto:module:history-substring-search' ensure-unique; then + HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE=1 +fi + # # Key Bindings # diff --git a/modules/history/README.md b/modules/history/README.md index 3806096a..51e6e8ca 100644 --- a/modules/history/README.md +++ b/modules/history/README.md @@ -36,8 +36,44 @@ Alternately, you can set `HISTFILE` manually to _`${ZDOTDIR:-$HOME}/.zhistory`_. ## Aliases +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:history:alias' skip 'yes' +``` + - `history-stat` lists the ten most used commands +## Settings + +### histfile + +Can be configured either by setting HISTFILE manually before loading this +module or by using zstyle: + +```sh +zstyle ':prezto:module:history' histfile "<file_name>" +``` + +defaults to "${ZDOTDIR:-$HOME}/.zsh_history". + +### histsize + +```sh +zstyle ':prezto:module:history' histsize <number> +``` + +defaults to 10000. + +### savehist + +```sh +zstyle ':prezto:module:history' savehist <number> +``` + +defaults to histsize + ## Authors _The authors of this module should be contacted via the [issue tracker][2]._ diff --git a/modules/history/init.zsh b/modules/history/init.zsh index 3f815c02..069dc2f1 100644 --- a/modules/history/init.zsh +++ b/modules/history/init.zsh @@ -10,54 +10,34 @@ # Options # -setopt BANG_HIST # Treat the '!' character specially during expansion. -setopt EXTENDED_HISTORY # Write the history file in the ':start:elapsed;command' format. -setopt SHARE_HISTORY # Share history between all sessions. -setopt HIST_EXPIRE_DUPS_FIRST # Expire a duplicate event first when trimming history. -setopt HIST_IGNORE_DUPS # Do not record an event that was just recorded again. -setopt HIST_IGNORE_ALL_DUPS # Delete an old recorded event if a new event is a duplicate. -setopt HIST_FIND_NO_DUPS # Do not display a previously found event. -setopt HIST_IGNORE_SPACE # Do not record an event starting with a space. -setopt HIST_SAVE_NO_DUPS # Do not write a duplicate event to the history file. -setopt HIST_VERIFY # Do not execute immediately upon history expansion. -setopt HIST_BEEP # Beep when accessing non-existent history. +setopt BANG_HIST # Treat the '!' character specially during expansion. +setopt EXTENDED_HISTORY # Write the history file in the ':start:elapsed;command' format. +setopt SHARE_HISTORY # Share history between all sessions. +setopt HIST_EXPIRE_DUPS_FIRST # Expire a duplicate event first when trimming history. +setopt HIST_IGNORE_DUPS # Do not record an event that was just recorded again. +setopt HIST_IGNORE_ALL_DUPS # Delete an old recorded event if a new event is a duplicate. +setopt HIST_FIND_NO_DUPS # Do not display a previously found event. +setopt HIST_IGNORE_SPACE # Do not record an event starting with a space. +setopt HIST_SAVE_NO_DUPS # Do not write a duplicate event to the history file. +setopt HIST_VERIFY # Do not execute immediately upon history expansion. +setopt HIST_BEEP # Beep when accessing non-existent history. # # Variables # -HISTFILE="${HISTFILE:-${ZDOTDIR:-$HOME}/.zsh_history}" # The path to the history file. -HISTSIZE=10000 # The maximum number of events to save in the internal history. -SAVEHIST=10000 # The maximum number of events to save in the history file. +zstyle -s ':prezto:module:history' histfile 'HISTFILE' \ + || HISTFILE="${HISTFILE:-${ZDOTDIR:-$HOME}/.zsh_history}" # The path to the history file. +zstyle -s ':prezto:module:history' histsize 'HISTSIZE' \ + || HISTSIZE=10000 # The maximum number of events to save in the internal history. +zstyle -s ':prezto:module:history' savehist 'SAVEHIST' \ + || SAVEHIST=$HISTSIZE # The maximum number of events to save in the history file. # # Aliases # -# Lists the ten most used commands. -alias history-stat="history 0 | awk '{print \$2}' | sort | uniq -c | sort -n -r | head" - -if [[ -s "${OLD_HISTFILE::=${HISTFILE:h}/.zhistory}" ]]; then - - # New 'HISTFILE' doesn't exist yet, rename legacy one if available and notify. - if [[ ! -s "$HISTFILE" ]]; then - <<EON -NOTICE: Default path of 'HISTFILE' has changed from '${OLD_HISTFILE/#$HOME/~}' - to '${HISTFILE/#$HOME/~}'. - Attempting to rename the existing 'HISTFILE' ... -EON - command mv -v "$OLD_HISTFILE" "$HISTFILE" - - # New 'HISTFILE' does exist and is older than legacy one, just warn. - elif [[ "$OLD_HISTFILE" -nt "$HISTFILE" ]]; then - <<EOW -WARNING: Default path of 'HISTFILE' has changed from '${OLD_HISTFILE/#$HOME/~}' - to '${HISTFILE/#$HOME/~}'. - Either set 'HISTFILE' in '${${0:h}/#$HOME/~}' - or move previous history from '${OLD_HISTFILE/#$HOME/~}' to - '${HISTFILE/#$HOME/~}'. -EOW - fi - - unset OLD_HISTFILE +if ! zstyle -t ':prezto:module:history:alias' skip; then + # Lists the ten most used commands. + alias history-stat="history 0 | awk '{print \$2}' | sort | uniq -c | sort -n -r | head" fi diff --git a/modules/homebrew/README.md b/modules/homebrew/README.md index 1875e08d..77d8f377 100644 --- a/modules/homebrew/README.md +++ b/modules/homebrew/README.md @@ -12,6 +12,13 @@ brew shellenv ## Aliases +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:homebrew:alias' skip 'yes' +``` + ### Homebrew Core - `brewc` cleans outdated brews and their cached archives. diff --git a/modules/homebrew/init.zsh b/modules/homebrew/init.zsh index 4b0fb86a..78992587 100644 --- a/modules/homebrew/init.zsh +++ b/modules/homebrew/init.zsh @@ -29,19 +29,21 @@ fi # # Homebrew -alias brewc='brew cleanup' -alias brewi='brew install' -alias brewL='brew leaves' -alias brewl='brew list' -alias brewo='brew outdated' -alias brews='brew search' -alias brewu='brew upgrade' -alias brewx='brew uninstall' +if ! zstyle -t ':prezto:module:homebrew:alias' skip; then + alias brewc='brew cleanup' + alias brewi='brew install' + alias brewL='brew leaves' + alias brewl='brew list' + alias brewo='brew outdated' + alias brews='brew search' + alias brewu='brew upgrade' + alias brewx='brew uninstall' -# Homebrew Cask -alias caski='brew install --cask' -alias caskl='brew list --cask' -alias casko='brew outdated --cask' -alias casks='brew search --cask' -alias casku='brew upgrade --cask' -alias caskx='brew uninstall --cask' + # Homebrew Cask + alias caski='brew install --cask' + alias caskl='brew list --cask' + alias casko='brew outdated --cask' + alias casks='brew search --cask' + alias casku='brew upgrade --cask' + alias caskx='brew uninstall --cask' +fi diff --git a/modules/macports/README.md b/modules/macports/README.md index ba6143b5..15963b33 100644 --- a/modules/macports/README.md +++ b/modules/macports/README.md @@ -4,6 +4,13 @@ Defines MacPorts aliases and adds MacPorts directories to path variables. ## Aliases +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:macports:alias' skip 'yes' +``` + - `portc` cleans the files used to build ports. - `porti` installs a port. - `ports` searches for a port. diff --git a/modules/macports/init.zsh b/modules/macports/init.zsh index 7bf4ab29..1ac3c531 100644 --- a/modules/macports/init.zsh +++ b/modules/macports/init.zsh @@ -28,10 +28,12 @@ path=( # Aliases # -alias portc='sudo port clean --all installed' -alias porti='sudo port install' -alias ports='port search' -alias portU='sudo port selfupdate && sudo port upgrade outdated' -alias portu='sudo port upgrade' -alias portX='sudo port -u uninstall' -alias portx='sudo port uninstall' +if ! zstyle -t ':prezto:module:macports:alias' skip; then + alias portc='sudo port clean --all installed' + alias porti='sudo port install' + alias ports='port search' + alias portU='sudo port selfupdate && sudo port upgrade outdated' + alias portu='sudo port upgrade' + alias portX='sudo port -u uninstall' + alias portx='sudo port uninstall' +fi diff --git a/modules/node/README.md b/modules/node/README.md index 6ec0b75c..bc262151 100644 --- a/modules/node/README.md +++ b/modules/node/README.md @@ -29,6 +29,13 @@ _`$XDG_CONFIG_HOME/nvm`_, _`~/.nvm`_, or is installed with homebrew. ## Aliases +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:node:alias' skip 'yes' +``` + ### npm - `npmi` install a package. diff --git a/modules/node/init.zsh b/modules/node/init.zsh index b3591049..0c27764d 100644 --- a/modules/node/init.zsh +++ b/modules/node/init.zsh @@ -48,18 +48,20 @@ N_PREFIX="${XDG_CONFIG_HOME:-$HOME/.config}/n" # The path to 'n' cache. # Aliases # -# npm -alias npmi='npm install' -alias npml='npm list' -alias npmo='npm outdated' -alias npmp='npm publish' -alias npmP='npm prune' -alias npmr='npm run' -alias npms='npm search' -alias npmt='npm test' -alias npmu='npm update' -alias npmx='npm uninstall' +if ! zstyle -t ':prezto:module:node:alias' skip; then + # npm + alias npmi='npm install' + alias npml='npm list' + alias npmo='npm outdated' + alias npmp='npm publish' + alias npmP='npm prune' + alias npmr='npm run' + alias npms='npm search' + alias npmt='npm test' + alias npmu='npm update' + alias npmx='npm uninstall' -alias npmci='npm ci' -alias npmcit='npm cit' -alias npmit='npm it' + alias npmci='npm ci' + alias npmcit='npm cit' + alias npmit='npm it' +fi diff --git a/modules/osx/functions/manp b/modules/osx/functions/manp index fcb2a026..d31bbc40 100644 --- a/modules/osx/functions/manp +++ b/modules/osx/functions/manp @@ -9,7 +9,7 @@ function manp { local page if (( $# > 0 )); then for page in "$@"; do - man -t "$page" | open -f -a Preview + mandoc -T pdf "$(/usr/bin/man -w $page)" | open -fa Preview done else print 'What manual page do you want?' >&2 diff --git a/modules/perl/README.md b/modules/perl/README.md index 772d0680..dd594491 100644 --- a/modules/perl/README.md +++ b/modules/perl/README.md @@ -40,6 +40,13 @@ The subcommands of _plenv_ is similar with _rbenv_. ## Aliases +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:perl:alias' skip 'yes' +``` + ### General - `pl` is short for `perl`. diff --git a/modules/perl/init.zsh b/modules/perl/init.zsh index 1b5e6657..efadd9ea 100644 --- a/modules/perl/init.zsh +++ b/modules/perl/init.zsh @@ -61,37 +61,39 @@ fi # Aliases # -# General -alias pl='perl' -alias pld='perldoc' -alias ple='perl -wlne' +if ! zstyle -t ':prezto:module:perl:alias' skip; then + # General + alias pl='perl' + alias pld='perldoc' + alias ple='perl -wlne' -# Perlbrew -if (( $+commands[perlbrew] )); then - alias plb='perlbrew' - alias plba='perlbrew available' - alias plbi='perlbrew install' - alias plbl='perlbrew list' - alias plbo='perlbrew off' - alias plbO='perlbrew switch-off' - alias plbs='perlbrew switch' - alias plbu='perlbrew use' - alias plbx='perlbrew uninstall' + # Perlbrew + if (( $+commands[perlbrew] )); then + alias plb='perlbrew' + alias plba='perlbrew available' + alias plbi='perlbrew install' + alias plbl='perlbrew list' + alias plbo='perlbrew off' + alias plbO='perlbrew switch-off' + alias plbs='perlbrew switch' + alias plbu='perlbrew use' + alias plbx='perlbrew uninstall' -elif (( $+commands[plenv] )); then - alias plv='plenv' - alias plvc='plenv commands' - alias plvl='plenv local' - alias plvg='plenv global' - alias plvs='plenv shell' - alias plvi='plenv install' - alias plvu='plenv uninstall' - alias plvr='plenv rehash' - alias plvv='plenv version' - alias plvV='plenv versions' - alias plvw='plenv which' - alias plvW='plenv whence' - alias plvm='plenv list-modules' - alias plvM='plenv migrate-modules' - alias plvI='plenv install-cpanm' + elif (( $+commands[plenv] )); then + alias plv='plenv' + alias plvc='plenv commands' + alias plvl='plenv local' + alias plvg='plenv global' + alias plvs='plenv shell' + alias plvi='plenv install' + alias plvu='plenv uninstall' + alias plvr='plenv rehash' + alias plvv='plenv version' + alias plvV='plenv versions' + alias plvw='plenv which' + alias plvW='plenv whence' + alias plvm='plenv list-modules' + alias plvM='plenv migrate-modules' + alias plvI='plenv install-cpanm' + fi fi diff --git a/modules/prompt/external/async b/modules/prompt/external/async index bbbc92bd..a66d76f8 160000 --- a/modules/prompt/external/async +++ b/modules/prompt/external/async @@ -1 +1 @@ -Subproject commit bbbc92bd01592513a6b7739a45b7911af18acaef +Subproject commit a66d76f8404bd9e7a26037640e6c892cf5871ff4 diff --git a/modules/prompt/external/powerlevel10k b/modules/prompt/external/powerlevel10k index f5d61840..017395a2 160000 --- a/modules/prompt/external/powerlevel10k +++ b/modules/prompt/external/powerlevel10k @@ -1 +1 @@ -Subproject commit f5d61840ae3a4f8c2765e1a67d94d9a96de71601 +Subproject commit 017395a266aa15011c09e64e44a1c98ed91c478c diff --git a/modules/prompt/external/pure b/modules/prompt/external/pure index 2e354b80..87e6f5dd 160000 --- a/modules/prompt/external/pure +++ b/modules/prompt/external/pure @@ -1 +1 @@ -Subproject commit 2e354b80deae105ea246699c49e65dcd4fe8b759 +Subproject commit 87e6f5dd4c793f6d980532205aaefe196780606f diff --git a/modules/prompt/init.zsh b/modules/prompt/init.zsh index 31808837..37bff328 100644 --- a/modules/prompt/init.zsh +++ b/modules/prompt/init.zsh @@ -10,18 +10,8 @@ autoload -Uz promptinit && promptinit # Load the prompt theme. zstyle -a ':prezto:module:prompt' theme 'prompt_argv' -if [[ "$TERM" == (dumb|linux|*bsd*) ]] || (( $#prompt_argv < 1 )); then +if [[ $TERM == (dumb|linux|*bsd*) ]] || (( $#prompt_argv < 1 )); then prompt 'off' -elif [[ "$prompt_argv[1]" == 'powerlevel9k' ]] ; then - <<EOW -WARNING: Prezto does not support 'powerlevel9k' anymore as it has - been deprecated and is not supported by its author. - Consider migrating to 'powerlevel10k' instead by setting: - zstyle ':prezto:module:prompt' theme 'powerlevel10k' - in ${${ZDOTDIR:-$HOME}/#$HOME/~}/.zpreztorc. - Switching to prezto default prompt 'sorin'..." -EOW - prompt 'sorin' else prompt "$prompt_argv[@]" fi diff --git a/modules/python/README.md b/modules/python/README.md index 1695fa05..2e3b2eec 100644 --- a/modules/python/README.md +++ b/modules/python/README.md @@ -124,6 +124,13 @@ zstyle ':prezto:module:python:virtualenv' initialize 'no' ## Aliases +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:python:alias' skip 'yes' +``` + - `py` is short for `python`. - `py2` is short for `python2`. - `py3` is short for `python3`. diff --git a/modules/python/functions/_pip b/modules/python/functions/_pip deleted file mode 100644 index 4e0ffb80..00000000 --- a/modules/python/functions/_pip +++ /dev/null @@ -1,19 +0,0 @@ -#compdef -P pip[0-9.]# -#autoload - -# -# Pip completion, delegating to pip to do all the completion work. -# -# Authors: -# Indrajit Raychaudhuri <irc@indrajit.com> -# - -if (( $+commands[$words[1]] )); then - - function _pip_completion { - compadd -- $( COMP_WORDS="$words[*]" COMP_CWORD=$(( CURRENT - 1 )) \ - PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null ) - } - _pip_completion "$@" - -fi diff --git a/modules/python/init.zsh b/modules/python/init.zsh index 91aa6d0a..ce2fc693 100644 --- a/modules/python/init.zsh +++ b/modules/python/init.zsh @@ -8,6 +8,12 @@ # Indrajit Raychaudhuri <irc@indrajit.com> # +# +# Options +# + +setopt EXTENDED_GLOB + # Load dependencies. pmodload 'helper' @@ -44,7 +50,7 @@ fi unset local_pyenv # Return if requirements are not found. -if (( ! $#commands[(i)python[23]#] && ! $+functions[pyenv] && ! $+commands[conda] )); then +if (( ! $+commands[(i)python[0-9.]#] && ! $+functions[pyenv] && ! $+commands[conda] )); then return 1 fi @@ -110,37 +116,42 @@ if (( $+VIRTUALENVWRAPPER_VIRTUALENV || $+commands[virtualenv] )) \ # look for plugins of interest. Scanning shell '$path' isn't enough as they # can exist in 'pyenv' synthesized paths (e.g., '~/.pyenv/plugins') instead. local -a pyenv_plugins + local pyenv_virtualenvwrapper_plugin_found if (( $+commands[pyenv] )); then pyenv_plugins=(${(@oM)${(f)"$(pyenv commands --no-sh 2> /dev/null)"}:#virtualenv*}) - fi - if (( $pyenv_plugins[(i)virtualenv-init] <= $#pyenv_plugins )); then - # Enable 'virtualenv' with 'pyenv'. - eval "$(pyenv virtualenv-init - zsh)" + # Optionally activate 'virtualenv-init' plugin when available. + if (( $pyenv_plugins[(i)virtualenv-init] <= $#pyenv_plugins )); then + eval "$(pyenv virtualenv-init - zsh)" + fi # Optionally activate 'virtualenvwrapper' plugin when available. if (( $pyenv_plugins[(i)virtualenvwrapper(_lazy|)] <= $#pyenv_plugins )); then pyenv "$pyenv_plugins[(R)virtualenvwrapper(_lazy|)]" - fi - else - # Fallback to 'virtualenvwrapper' without 'pyenv' wrapper if 'python' is - # available in '$path'. - if (( ! $+VIRTUALENVWRAPPER_PYTHON )) && (( $#commands[(i)python[23]#] )); then - VIRTUALENVWRAPPER_PYTHON=$commands[(i)python[23]#] + pyenv_virtualenvwrapper_plugin_found="true" fi - virtenv_sources=( + unset pyenv_plugins + fi + + if [[ $pyenv_virtualenvwrapper_plugin_found != "true" ]]; then + # Fallback to standard 'virtualenvwrapper' if 'python' is available in '$path'. + if (( ! $+VIRTUALENVWRAPPER_PYTHON )) && (( $+commands[(i)python[0-9.]#] )); then + VIRTUALENVWRAPPER_PYTHON=$commands[(i)python[0-9.]#] + fi + + virtualenvwrapper_sources=( ${(@Ov)commands[(I)virtualenvwrapper(_lazy|).sh]} /usr/share/virtualenvwrapper/virtualenvwrapper(_lazy|).sh(OnN) ) - if (( $#virtenv_sources )); then - source "$virtenv_sources[1]" + if (( $#virtualenvwrapper_sources )); then + source "$virtualenvwrapper_sources[1]" fi - unset virtenv_sources + unset virtualenvwrapper_sources fi - unset pyenv_plugins + unset pyenv_virtualenvwrapper_plugin_found fi # Load conda into the shell session, if requested. @@ -160,6 +171,8 @@ fi # Aliases # -alias py='python' -alias py2='python2' -alias py3='python3' +if ! zstyle -t ':prezto:module:python:alias' skip; then + alias py='python' + alias py2='python2' + alias py3='python3' +fi diff --git a/modules/rails/README.md b/modules/rails/README.md index 129627a0..5e230e0e 100644 --- a/modules/rails/README.md +++ b/modules/rails/README.md @@ -4,6 +4,13 @@ Defines [Ruby on Rails][1] aliases. ## Aliases +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:rails:alias' skip 'yes' +``` + - `ror` is short for `rails`. - `rorc` starts the Rails console. - `rordc` starts the Rails console connected to the database. diff --git a/modules/rails/init.zsh b/modules/rails/init.zsh index 44b53e90..ed86372b 100644 --- a/modules/rails/init.zsh +++ b/modules/rails/init.zsh @@ -19,17 +19,19 @@ fi # Aliases # -alias ror='bundle exec rails' -alias rorc='bundle exec rails console' -alias rordc='bundle exec rails dbconsole' -alias rordm='bundle exec rake db:migrate' -alias rordM='bundle exec rake db:migrate db:test:clone' -alias rordr='bundle exec rake db:rollback' -alias rorg='bundle exec rails generate' -alias rorl='tail -f "$(ruby-app-root)/log/development.log"' -alias rorlc='bundle exec rake log:clear' -alias rorp='bundle exec rails plugin' -alias rorr='bundle exec rails runner' -alias rors='bundle exec rails server' -alias rorsd='bundle exec rails server --debugger' -alias rorx='bundle exec rails destroy' +if ! zstyle -t ':prezto:module:rails:alias' skip; then + alias ror='bundle exec rails' + alias rorc='bundle exec rails console' + alias rordc='bundle exec rails dbconsole' + alias rordm='bundle exec rake db:migrate' + alias rordM='bundle exec rake db:migrate db:test:clone' + alias rordr='bundle exec rake db:rollback' + alias rorg='bundle exec rails generate' + alias rorl='tail -f "$(ruby-app-root)/log/development.log"' + alias rorlc='bundle exec rake log:clear' + alias rorp='bundle exec rails plugin' + alias rorr='bundle exec rails runner' + alias rors='bundle exec rails server' + alias rorsd='bundle exec rails server --debugger' + alias rorx='bundle exec rails destroy' +fi diff --git a/modules/ruby/README.md b/modules/ruby/README.md index 97a09f07..fa3d1064 100644 --- a/modules/ruby/README.md +++ b/modules/ruby/README.md @@ -54,6 +54,13 @@ dependencies, with [Bundler][5]. ## Aliases +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:ruby:alias' skip 'yes' +``` + ### General - `rb` is short for `ruby`. diff --git a/modules/ruby/init.zsh b/modules/ruby/init.zsh index cf55bc50..86ab43ce 100644 --- a/modules/ruby/init.zsh +++ b/modules/ruby/init.zsh @@ -59,23 +59,25 @@ fi # Aliases # -# General -alias rb='ruby' +if ! zstyle -t ':prezto:module:ruby:alias' skip; then + # General + alias rb='ruby' -# Bundler -if (( $+commands[bundle] )); then - alias rbb='bundle' - alias rbbc='bundle clean' - alias rbbe='bundle exec' - alias rbbi='bundle install --path vendor/bundle' - alias rbbl='bundle list' - alias rbbo='bundle open' - alias rbbp='bundle package' - alias rbbu='bundle update' - alias rbbI='rbbi \ - && bundle package \ - && print .bundle >>! .gitignore \ - && print vendor/assets >>! .gitignore \ - && print vendor/bundle >>! .gitignore \ - && print vendor/cache >>! .gitignore' + # Bundler + if (( $+commands[bundle] )); then + alias rbb='bundle' + alias rbbc='bundle clean' + alias rbbe='bundle exec' + alias rbbi='bundle install --path vendor/bundle' + alias rbbl='bundle list' + alias rbbo='bundle open' + alias rbbp='bundle package' + alias rbbu='bundle update' + alias rbbI='rbbi \ + && bundle package \ + && print .bundle >>! .gitignore \ + && print vendor/assets >>! .gitignore \ + && print vendor/bundle >>! .gitignore \ + && print vendor/cache >>! .gitignore' + fi fi diff --git a/modules/screen/README.md b/modules/screen/README.md index a1775f7e..b5549510 100644 --- a/modules/screen/README.md +++ b/modules/screen/README.md @@ -24,6 +24,13 @@ zstyle ':prezto:module:screen:auto-start' remote 'yes' ## Aliases +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:screen:alias' skip 'yes' +``` + - `scr` is short for `screen`. - `scrl` lists sessions/socket directory. - `scrn` starts a new session. diff --git a/modules/screen/init.zsh b/modules/screen/init.zsh index 0dee1c96..4dea5661 100644 --- a/modules/screen/init.zsh +++ b/modules/screen/init.zsh @@ -36,7 +36,9 @@ fi # Aliases # -alias scr='screen' -alias scrl='screen -list' -alias scrn='screen -U -S' -alias scrr='screen -a -A -U -D -R' +if ! zstyle -t ':prezto:module:screen:alias' skip; then + alias scr='screen' + alias scrl='screen -list' + alias scrn='screen -U -S' + alias scrr='screen -a -A -U -D -R' +fi diff --git a/modules/ssh/init.zsh b/modules/ssh/init.zsh index b9567d46..f8709979 100644 --- a/modules/ssh/init.zsh +++ b/modules/ssh/init.zsh @@ -52,9 +52,9 @@ if ssh-add -l 2>&1 | grep -q 'The agent has no identities'; then # program specified by SSH_ASKPASS and open an X11 window to read the # passphrase. if [[ -n "$DISPLAY" && -x "$SSH_ASKPASS" ]]; then - ssh-add ${_ssh_identities:+$_ssh_dir/${^_ssh_identities[@]}} < /dev/null 2> /dev/null + ssh-add ${_ssh_identities:+$_ssh_dir/${^~_ssh_identities[@]}} < /dev/null 2> /dev/null else - ssh-add ${_ssh_identities:+$_ssh_dir/${^_ssh_identities[@]}} 2> /dev/null + ssh-add ${_ssh_identities:+$_ssh_dir/${^~_ssh_identities[@]}} 2> /dev/null fi fi diff --git a/modules/tmux/README.md b/modules/tmux/README.md index e7ae929d..f6d375b0 100644 --- a/modules/tmux/README.md +++ b/modules/tmux/README.md @@ -53,6 +53,13 @@ Read [iTerm2 and tmux Integration][7] for more information. ## Aliases +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:tmux:alias' skip 'yes' +``` + - `tmuxa` attaches or switches to a tmux session. - `tmuxl` lists sessions managed by the tmux server. diff --git a/modules/tmux/init.zsh b/modules/tmux/init.zsh index 5c51855f..17006c82 100644 --- a/modules/tmux/init.zsh +++ b/modules/tmux/init.zsh @@ -23,7 +23,7 @@ if ([[ "$TERM_PROGRAM" = 'iTerm.app' ]] && \ _tmux_iterm_integration='-CC' fi -if [[ -z "$TMUX" && -z "$EMACS" && -z "$VIM" && -z "$INSIDE_EMACS" && "$TERM_PROGRAM" != "vscode" ]] && ( \ +if [[ -z "$TMUX" && -z "$EMACS" && -z "$VIM" && -z "$INSIDE_EMACS" && "$TERM_PROGRAM" != "vscode" && "$TERMINAL_EMULATOR" != "JetBrains-JediTerm" ]] && ( \ ( [[ -n "$SSH_TTY" ]] && zstyle -t ':prezto:module:tmux:auto-start' remote ) || ( [[ -z "$SSH_TTY" ]] && zstyle -t ':prezto:module:tmux:auto-start' local ) \ ); then @@ -45,5 +45,7 @@ fi # Aliases # -alias tmuxa="tmux $_tmux_iterm_integration new-session -A" -alias tmuxl='tmux list-sessions' +if ! zstyle -t ':prezto:module:tmux:alias' skip; then + alias tmuxa="tmux $_tmux_iterm_integration new-session -A" + alias tmuxl='tmux list-sessions' +fi diff --git a/modules/utility/init.zsh b/modules/utility/init.zsh index c6dc3c03..7e2e14ed 100644 --- a/modules/utility/init.zsh +++ b/modules/utility/init.zsh @@ -76,7 +76,7 @@ if zstyle -T ':prezto:module:utility' safe-ops; then fi # ls -if [[ ${(@M)${(f)"$(ls --version 2>&1)"}:#*GNU *} ]]; then +if [[ ${(@M)${(f)"$(ls --version 2>&1)"}:#*(GNU|lsd) *} ]]; then # GNU Core Utilities if zstyle -T ':prezto:module:utility:ls' dirs-first; then @@ -196,12 +196,14 @@ fi # Serves a directory via HTTP. if (( $#commands[(i)python(|[23])] )); then autoload -Uz is-at-least - if is-at-least 3 ${"$(python --version 2>&1)"[(w)2]}; then - alias http-serve='python -m http.server' - elif (( $+commands[python3] )); then + if (( $+commands[python3] )); then alias http-serve='python3 -m http.server' + elif (( $+commands[python2] )); then + alias http-serve='python2 -m SimpleHTTPServer' + elif is-at-least 3 ${"$(python --version 2>&1)"[(w)2]}; then + alias http-serve='python -m http.server' else - alias http-serve='$commands[(i)python(|2)] -m SimpleHTTPServer' + alias http-serve='python -m SimpleHTTPServer' fi fi diff --git a/runcoms/zlogin b/runcoms/zlogin index ac4d3422..2f834353 100644 --- a/runcoms/zlogin +++ b/runcoms/zlogin @@ -10,7 +10,10 @@ # Compile the completion dump to increase startup speed. zcompdump="${XDG_CACHE_HOME:-$HOME/.cache}/prezto/zcompdump" if [[ -s "$zcompdump" && (! -s "${zcompdump}.zwc" || "$zcompdump" -nt "${zcompdump}.zwc") ]]; then - zcompile "$zcompdump" + if command mkdir "${zcompdump}.zwc.lock" 2>/dev/null; then + zcompile "$zcompdump" + command rmdir "${zcompdump}.zwc.lock" 2>/dev/null + fi fi } &! diff --git a/runcoms/zpreztorc b/runcoms/zpreztorc index adb3c288..03e290bc 100644 --- a/runcoms/zpreztorc +++ b/runcoms/zpreztorc @@ -83,6 +83,19 @@ zstyle ':prezto:module:editor' key-bindings 'emacs' # Set the command prefix on non-GNU systems. # zstyle ':prezto:module:gnu-utility' prefix 'g' +# +# History +# + +# Set the file to save the history in when an interactive shell exits. +# zstyle ':prezto:module:history' histfile "${ZDOTDIR:-$HOME}/.zsh_history" + +# Set the maximum number of events stored in the internal history list. +# zstyle ':prezto:module:history' histsize 10000 + +# Set the maximum number of history events to save in the history file. +# zstyle ':prezto:module:history' savehist 10000 + # # History Substring Search # @@ -99,6 +112,12 @@ zstyle ':prezto:module:editor' key-bindings 'emacs' # Set the search prefixed. # zstyle ':prezto:module:history-substring-search' prefixed 'yes' +# Enable fuzzy search +# zstyle ':prezto:module:history-substring-search' fuzzy 'yes' + +# Retrieve only unique results (removes duplicates) +# zstyle ':prezto:module:history-substring-search' ensure-unique 'yes' + # # macOS # diff --git a/runcoms/zprofile b/runcoms/zprofile index 1cf48bfb..d2acd311 100644 --- a/runcoms/zprofile +++ b/runcoms/zprofile @@ -9,7 +9,7 @@ # Browser # -if [[ "$OSTYPE" == darwin* ]]; then +if [[ -z "$BROWSER" && "$OSTYPE" == darwin* ]]; then export BROWSER='open' fi @@ -17,9 +17,15 @@ fi # Editors # -export EDITOR='nano' -export VISUAL='nano' -export PAGER='less' +if [[ -z "$EDITOR" ]]; then + export EDITOR='nano' +fi +if [[ -z "$VISUAL" ]]; then + export VISUAL='nano' +fi +if [[ -z "$PAGER" ]]; then + export PAGER='less' +fi # # Language @@ -43,7 +49,9 @@ typeset -gU cdpath fpath mailpath path # Set the list of directories that Zsh searches for programs. path=( - /usr/local/{bin,sbin} + $HOME/{,s}bin(N) + /opt/{homebrew,local}/{,s}bin(N) + /usr/local/{,s}bin(N) $path ) @@ -54,10 +62,12 @@ path=( # Set the default Less options. # Mouse-wheel scrolling has been disabled by -X (disable screen clearing). # Remove -X to enable it. -export LESS='-g -i -M -R -S -w -X -z-4' +if [[ -z "$LESS" ]]; then + export LESS='-g -i -M -R -S -w -X -z-4' +fi # Set the Less input preprocessor. # Try both `lesspipe` and `lesspipe.sh` as either might exist on a system. -if (( $#commands[(i)lesspipe(|.sh)] )); then +if [[ -z "$LESSOPEN" ]] && (( $#commands[(i)lesspipe(|.sh)] )); then export LESSOPEN="| /usr/bin/env $commands[(i)lesspipe(|.sh)] %s 2>&-" fi