From d893dd9b83d518f2b2bd4b9a5b6a92ca0e4e33e2 Mon Sep 17 00:00:00 2001 From: Dee'Kej Date: Sat, 6 Apr 2024 19:12:05 +0200 Subject: [PATCH 01/22] fix(autojump): add macOS 'pkgsrc' installation location (#12329) --- plugins/autojump/autojump.plugin.zsh | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/autojump/autojump.plugin.zsh b/plugins/autojump/autojump.plugin.zsh index 84333a89f..5a52e3067 100644 --- a/plugins/autojump/autojump.plugin.zsh +++ b/plugins/autojump/autojump.plugin.zsh @@ -13,6 +13,7 @@ autojump_paths=( /opt/local/etc/profile.d/autojump.sh # macOS with MacPorts /usr/local/etc/profile.d/autojump.sh # macOS with Homebrew (default) /opt/homebrew/etc/profile.d/autojump.sh # macOS with Homebrew (default on M1 macs) + /opt/pkg/share/autojump/autojump.zsh # macOS with pkgsrc /etc/profiles/per-user/$USER/etc/profile.d/autojump.sh # macOS Nix, Home Manager and flakes ) From bf713e2c112ee1f0daf10deffa1215c982513f9b Mon Sep 17 00:00:00 2001 From: David Chin Date: Sun, 7 Apr 2024 01:23:19 +0800 Subject: [PATCH 02/22] Update README for git-prompt to clarify how to use (#10922) * Add note about need to customise theme. It may not be obvious that the theme needs to be customised. See: https://github.com/ohmyzsh/ohmyzsh/issues/9395 * Clarify type of theme customisation needed. --- plugins/git-prompt/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/git-prompt/README.md b/plugins/git-prompt/README.md index 05208d72f..8f42c6842 100644 --- a/plugins/git-prompt/README.md +++ b/plugins/git-prompt/README.md @@ -9,6 +9,10 @@ To use it, add `git-prompt` to the plugins array in your zshrc file: plugins=(... git-prompt) ``` +You may also need to [customize your theme](https://github.com/ohmyzsh/ohmyzsh/issues/9395#issuecomment-1027130429) +to change the way the prompt is built. See the +[OMZ wiki on customizing themes](https://github.com/ohmyzsh/ohmyzsh/wiki/Customization#overriding-and-adding-themes). + See the [original repository](https://github.com/olivierverdier/zsh-git-prompt). ## Requirements From a6ce40df49e0b219372517273c4edce1d34e49a2 Mon Sep 17 00:00:00 2001 From: Matheus Richard Date: Mon, 8 Apr 2024 12:48:57 -0300 Subject: [PATCH 03/22] feat(git): introduce `gwipe` alias (#12302) `gpristine` might be too much on several occasions, given that it removes all untracked files. This might not be ideal because it will delete important things like environment files and encryption keys. With that in mind, this commit introduces `gwipe` as a way to get a "clean slate" but still have your dev environment working. --- plugins/git/git.plugin.zsh | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index 692a36a73..545ccc541 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -349,6 +349,7 @@ alias grhh='git reset --hard' alias grhk='git reset --keep' alias grhs='git reset --soft' alias gpristine='git reset --hard && git clean --force -dfx' +alias gwipe='git reset --hard && git clean --force -df' alias groh='git reset origin/$(git_current_branch) --hard' alias grs='git restore' alias grss='git restore --source' From 5bff59f78e607e77f2ed924c1e93ccc09a6ccb7e Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Mon, 8 Apr 2024 22:05:23 +0200 Subject: [PATCH 04/22] docs(git): add `gwipe` alias --- plugins/git/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/git/README.md b/plugins/git/README.md index 4acb0c858..181de37fc 100644 --- a/plugins/git/README.md +++ b/plugins/git/README.md @@ -166,6 +166,7 @@ plugins=(... git) | `grhk` | `git reset --keep` | | `grhs` | `git reset --soft` | | `gpristine` | `git reset --hard && git clean --force -dfx` | +| `gwipe` | `git reset --hard && git clean --force -df` | | `groh` | `git reset origin/$(git_current_branch) --hard` | | `grs` | `git restore` | | `grss` | `git restore --source` | From 982ea721bde90c1fca233419e2c5b6e90fd10225 Mon Sep 17 00:00:00 2001 From: Reza Askari Date: Tue, 9 Apr 2024 00:06:38 +0330 Subject: [PATCH 05/22] feat(laravel): add `artisan test` alias (`pats`) (#12310) --- plugins/laravel/README.md | 1 + plugins/laravel/laravel.plugin.zsh | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/laravel/README.md b/plugins/laravel/README.md index 95f590191..a831a86b6 100644 --- a/plugins/laravel/README.md +++ b/plugins/laravel/README.md @@ -10,6 +10,7 @@ plugins=(... laravel) |:-:|:-:| | `artisan` | `php artisan` | | `pas` | `php artisan serve` | +| `pats` | `php artisan test` | ## Database diff --git a/plugins/laravel/laravel.plugin.zsh b/plugins/laravel/laravel.plugin.zsh index a8382d3c9..319946f07 100644 --- a/plugins/laravel/laravel.plugin.zsh +++ b/plugins/laravel/laravel.plugin.zsh @@ -4,6 +4,7 @@ alias bob='php artisan bob::build' # Development alias pas='php artisan serve' +alias pats='php artisan test' # Database alias pam='php artisan migrate' From 3e2a5742cdb4deae4d7f10351d59c7f2933e3555 Mon Sep 17 00:00:00 2001 From: Soo Philip Jason Kim Date: Tue, 9 Apr 2024 05:40:15 +0900 Subject: [PATCH 06/22] feat(git): add alias `gmc` for `git merge --continue` (#12326) Co-authored-by: PJ Kim --- plugins/git/README.md | 1 + plugins/git/git.plugin.zsh | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/git/README.md b/plugins/git/README.md index 181de37fc..4c005ad2f 100644 --- a/plugins/git/README.md +++ b/plugins/git/README.md @@ -111,6 +111,7 @@ plugins=(... git) | `gfg` | `git ls-files \| grep` | | `gm` | `git merge` | | `gma` | `git merge --abort` | +| `gmc` | `git merge --continue` | | `gms` | `git merge --squash` | | `gmom` | `git merge origin/$(git_main_branch)` | | `gmum` | `git merge upstream/$(git_main_branch)` | diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index 545ccc541..146f4a512 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -252,6 +252,7 @@ alias gignored='git ls-files -v | grep "^[[:lower:]]"' alias gfg='git ls-files | grep' alias gm='git merge' alias gma='git merge --abort' +alias gmc='git merge --continue' alias gms="git merge --squash" alias gmom='git merge origin/$(git_main_branch)' alias gmum='git merge upstream/$(git_main_branch)' From a8f7f9f707ca5fb9ac7bedb088748b09db2fd3bd Mon Sep 17 00:00:00 2001 From: MoAlkhateeb <110918029+MoAlkhateeb@users.noreply.github.com> Date: Tue, 9 Apr 2024 09:07:57 +0300 Subject: [PATCH 07/22] fix(history)!: fix arg passing to `fc` for `history` command (#12338) BREAKING CHANGE: we have fixed a bug in the `history` wrapper for OMZ which means that running just history will now not show all the history since the 1st command, but only recent ones. To get the previous behavior, you can run `history 1` to get all the command history, or other commands such as `history -30` to get the last 30 commands. --- lib/history.zsh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/history.zsh b/lib/history.zsh index 794076904..c39c8c866 100644 --- a/lib/history.zsh +++ b/lib/history.zsh @@ -12,8 +12,8 @@ function omz_history { # if -l provided, run as if calling `fc' directly builtin fc "$@" else - # unless a number is provided, show all history events (starting from 1) - [[ ${@[-1]-} = *[0-9]* ]] && builtin fc -l "$@" || builtin fc -l "$@" 1 + # otherwise, run `fc -l` with a custom format + builtin fc -l "$@" fi } From ef402864830ba2e23720e3a6ee6f6b4f0e05d692 Mon Sep 17 00:00:00 2001 From: Taekin Kim Date: Tue, 9 Apr 2024 19:18:05 +0900 Subject: [PATCH 08/22] docs: fix typo (#12339) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2ba374335..dea36fda7 100644 --- a/README.md +++ b/README.md @@ -366,7 +366,7 @@ zstyle ':omz:lib:directories' aliases no Async prompt functions are an experimental feature (included on April 3, 2024) that allows Oh My Zsh to render prompt information asyncronously. This can improve prompt rendering performance, but it might not work well with some setups. We hope that's not an -issue, but if you're seeing problems with this new feature, you can turn it of by setting the following in your .zshrc file, +issue, but if you're seeing problems with this new feature, you can turn it off by setting the following in your .zshrc file, before Oh My Zsh is sourced: ```sh From f85f501bcf3dc771c64f4b2ec7609fc542d4d031 Mon Sep 17 00:00:00 2001 From: Bartek Pacia Date: Tue, 9 Apr 2024 11:19:14 +0100 Subject: [PATCH 09/22] feat(macos): `ofd` now opens any directory (#12337) Co-authored-by: Carlo Sala --- plugins/macos/README.md | 2 +- plugins/macos/macos.plugin.zsh | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/plugins/macos/README.md b/plugins/macos/README.md index 1cb9b395d..2c52ec8a7 100644 --- a/plugins/macos/README.md +++ b/plugins/macos/README.md @@ -17,7 +17,7 @@ Original author: [Sorin Ionescu](https://github.com/sorin-ionescu) | `tab` | Open the current directory in a new tab | | `split_tab` | Split the current terminal tab horizontally | | `vsplit_tab` | Split the current terminal tab vertically | -| `ofd` | Open the current directory in a Finder window | +| `ofd` | Open passed directories (or $PWD by default) in Finder | | `pfd` | Return the path of the frontmost Finder window | | `pfs` | Return the current Finder selection | | `cdf` | `cd` to the current Finder directory | diff --git a/plugins/macos/macos.plugin.zsh b/plugins/macos/macos.plugin.zsh index a4347005e..2702a1901 100644 --- a/plugins/macos/macos.plugin.zsh +++ b/plugins/macos/macos.plugin.zsh @@ -3,8 +3,15 @@ 0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}" 0="${${(M)0:#/*}:-$PWD/$0}" -# Open the current directory in a Finder window -alias ofd='open_command $PWD' +# Open in Finder the directories passed as arguments, or the current directory if +# no directories are passed +function ofd { + if (( ! $# )); then + open_command $PWD + else + open_command $@ + fi +} # Show/hide hidden files in the Finder alias showfiles="defaults write com.apple.finder AppleShowAllFiles -bool true && killall Finder" From 605d76616aa47b2e5abe25eb26c4c9c1554f93d5 Mon Sep 17 00:00:00 2001 From: MoAlkhateeb <110918029+MoAlkhateeb@users.noreply.github.com> Date: Tue, 9 Apr 2024 19:09:26 +0300 Subject: [PATCH 10/22] fix(history): revert to old behavior when no args passed (#12341) * Fixed a bug in *omz_history* where it would automatically create a file when run with the -p flag * Reverted old history behaviour while fixing parsing bug --- lib/history.zsh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/history.zsh b/lib/history.zsh index c39c8c866..56dda2462 100644 --- a/lib/history.zsh +++ b/lib/history.zsh @@ -3,7 +3,10 @@ function omz_history { local clear list zparseopts -E c=clear l=list - if [[ -n "$clear" ]]; then + if [[ $# -eq 0 ]]; then + # if no arguments provided, show full history starting from 1 + builtin fc -l 1 + elif [[ -n "$clear" ]]; then # if -c provided, clobber the history file echo -n >| "$HISTFILE" fc -p "$HISTFILE" From 53c4c4671a931d9f7a3b39fe9131c6f84fe27ca5 Mon Sep 17 00:00:00 2001 From: Ruize Tang <1466040111@qq.com> Date: Wed, 10 Apr 2024 21:39:19 +0800 Subject: [PATCH 11/22] fix(shell-proxy): support ssh-proxy using http proxy in cygwin (#12340) --- plugins/shell-proxy/ssh-proxy.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/shell-proxy/ssh-proxy.py b/plugins/shell-proxy/ssh-proxy.py index a498c84bc..4b692f9e4 100755 --- a/plugins/shell-proxy/ssh-proxy.py +++ b/plugins/shell-proxy/ssh-proxy.py @@ -22,7 +22,8 @@ if parsed.scheme not in proxy_protocols: def make_argv(): yield "nc" - if sys.platform == 'linux': + if sys.platform in {'linux', 'cygwin'}: + # caveats: the built-in netcat of most linux distributions and cygwin support proxy type # caveats: macOS built-in netcat command not supported proxy-type yield "-X" # --proxy-type # Supported protocols are 4 (SOCKS v4), 5 (SOCKS v5) and connect (HTTP proxy). From 6e9d57d5abdb33b0c22f8979dc529c1a046d7aa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?jo=C3=A9l=20hawkins=20torres?= Date: Thu, 11 Apr 2024 10:27:29 -0700 Subject: [PATCH 12/22] fix(yarn): use `builtin cd` in completion (#12347) --- plugins/yarn/_yarn | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/yarn/_yarn b/plugins/yarn/_yarn index f15756ff4..9ffe5660c 100644 --- a/plugins/yarn/_yarn +++ b/plugins/yarn/_yarn @@ -86,7 +86,7 @@ _global_commands=( ) _yarn_find_package_json() { - local dir=$(cd "$1" && pwd) + local dir=$(builtin cd "$1" && pwd) while true do @@ -109,7 +109,7 @@ _yarn_commands_scripts() { if [[ -n $opt_args[--cwd] ]]; then packageJson=$(_yarn_find_package_json $opt_args[--cwd]) - binaries=($(cd $opt_args[--cwd] && echo node_modules/.bin/*(x:t))) + binaries=($(builtin cd $opt_args[--cwd] && echo node_modules/.bin/*(x:t))) else packageJson=$(_yarn_find_package_json $pwd) binaries=($(echo node_modules/.bin/*(x:t))) @@ -130,9 +130,9 @@ _yarn_scripts() { if [[ -n $_yarn_run_cwd ]]; then packageJson=$(_yarn_find_package_json $_yarn_run_cwd) if [[ -d "${_yarn_run_cwd}/node_modules" ]]; then - binaries=($(cd $_yarn_run_cwd && echo node_modules/.bin/*(x:t))) + binaries=($(builtin cd $_yarn_run_cwd && echo node_modules/.bin/*(x:t))) else - binaries=($(cd $_yarn_run_cwd && yarn bin | perl -wln -e 'm{^[^:]+: (\S+)$} and print $1')) + binaries=($(builtin cd $_yarn_run_cwd && yarn bin | perl -wln -e 'm{^[^:]+: (\S+)$} and print $1')) fi else packageJson=$(_yarn_find_package_json $pwd) From 31f2025e0fa963788655fe197e0179c47588b175 Mon Sep 17 00:00:00 2001 From: Kate Sullivan <75387802+katesullivan@users.noreply.github.com> Date: Fri, 12 Apr 2024 02:24:54 -0500 Subject: [PATCH 13/22] feat(poetry-env): support changing between two venv dirs (#12346) Co-authored-by: Carlo Sala --- plugins/poetry-env/poetry-env.plugin.zsh | 38 ++++++++++++------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/plugins/poetry-env/poetry-env.plugin.zsh b/plugins/poetry-env/poetry-env.plugin.zsh index 97ca52492..f98c177b4 100644 --- a/plugins/poetry-env/poetry-env.plugin.zsh +++ b/plugins/poetry-env/poetry-env.plugin.zsh @@ -1,27 +1,27 @@ -# Automatic poetry environment activation/deactivation _togglePoetryShell() { - # deactivate environment if pyproject.toml doesn't exist and not in a subdir - if [[ ! -f "$PWD/pyproject.toml" ]] ; then - if [[ "$poetry_active" == 1 ]]; then - if [[ "$PWD" != "$poetry_dir"* ]]; then - export poetry_active=0 - deactivate - return - fi - fi + # Determine if currently in a Poetry-managed directory + local in_poetry_dir=0 + if [[ -f "$PWD/pyproject.toml" ]] && grep -q 'tool.poetry' "$PWD/pyproject.toml"; then + in_poetry_dir=1 fi - # activate the environment if pyproject.toml exists - if [[ "$poetry_active" != 1 ]]; then - if [[ -f "$PWD/pyproject.toml" ]]; then - if grep -q 'tool.poetry' "$PWD/pyproject.toml" && venv_dir=$(poetry env info --path); then - export poetry_active=1 - export poetry_dir="$PWD" - source "${venv_dir}/bin/activate" - fi + # Deactivate the current environment if moving out of a Poetry directory or into a different Poetry directory + if [[ $poetry_active -eq 1 ]] && { [[ $in_poetry_dir -eq 0 ]] || [[ "$PWD" != "$poetry_dir"* ]]; }; then + export poetry_active=0 + unset poetry_dir + deactivate + fi + + # Activate the environment if in a Poetry directory and no environment is currently active + if [[ $in_poetry_dir -eq 1 ]] && [[ $poetry_active -ne 1 ]]; then + venv_dir=$(poetry env info --path 2>/dev/null) + if [[ -n "$venv_dir" ]]; then + export poetry_active=1 + export poetry_dir="$PWD" + source "${venv_dir}/bin/activate" fi fi } autoload -U add-zsh-hook add-zsh-hook chpwd _togglePoetryShell -_togglePoetryShell +_togglePoetryShell # Initial call to check the current directory at shell startup From b26000d1685fa61bddddea42e2a606b2a0d64e25 Mon Sep 17 00:00:00 2001 From: Jhon Pedroza Date: Tue, 16 Apr 2024 02:52:12 -0500 Subject: [PATCH 14/22] feat(tmux): sessions named as current dir (#12351) --- plugins/tmux/README.md | 1 + plugins/tmux/tmux.plugin.zsh | 24 ++++++++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/plugins/tmux/README.md b/plugins/tmux/README.md index 50f8b2c2f..09952a9f5 100644 --- a/plugins/tmux/README.md +++ b/plugins/tmux/README.md @@ -37,6 +37,7 @@ The plugin also supports the following: | `ZSH_TMUX_AUTOQUIT` | Automatically closes terminal once tmux exits (default: `ZSH_TMUX_AUTOSTART`) | | `ZSH_TMUX_CONFIG` | Set the configuration path (default: `$HOME/.tmux.conf`, `$XDG_CONFIG_HOME/tmux/tmux.conf`) | | `ZSH_TMUX_DEFAULT_SESSION_NAME` | Set tmux default session name when autostart is enabled | +| `ZSH_TMUX_AUTONAME_SESSION` | Automatically name new sessions based on the basename of `$PWD` (default: `false`) | | `ZSH_TMUX_DETACHED` | Set the detached mode (default: `false`) | | `ZSH_TMUX_FIXTERM` | Sets `$TERM` to 256-color term or not based on current terminal support | | `ZSH_TMUX_FIXTERM_WITHOUT_256COLOR` | `$TERM` to use for non 256-color terminals (default: `tmux` if available, `screen` otherwise) | diff --git a/plugins/tmux/tmux.plugin.zsh b/plugins/tmux/tmux.plugin.zsh index 791592d8f..f65598358 100644 --- a/plugins/tmux/tmux.plugin.zsh +++ b/plugins/tmux/tmux.plugin.zsh @@ -13,6 +13,8 @@ fi : ${ZSH_TMUX_AUTOCONNECT:=true} # Automatically close the terminal when tmux exits : ${ZSH_TMUX_AUTOQUIT:=$ZSH_TMUX_AUTOSTART} +# Automatically name the new session based on the basename of PWD +: ${ZSH_TMUX_AUTONAME_SESSION:=false} # Set term to screen or screen-256color based on current terminal support : ${ZSH_TMUX_DETACHED:=false} # Set detached mode @@ -102,9 +104,22 @@ function _zsh_tmux_plugin_run() { local _detached="" [[ "$ZSH_TMUX_DETACHED" == "true" ]] && _detached="-d" + + local session_name + if [[ "$ZSH_TMUX_AUTONAME_SESSION" == "true" ]]; then + # Name the session after the basename of the current directory + session_name=${PWD##*/} + # If the current directory is the home directory, name it 'HOME' + [[ "$PWD" == "$HOME" ]] && session_name="HOME" + # If the current directory is the root directory, name it 'ROOT' + [[ "$PWD" == "/" ]] && session_name="ROOT" + else + session_name="$ZSH_TMUX_DEFAULT_SESSION_NAME" + fi + # Try to connect to an existing session. - if [[ -n "$ZSH_TMUX_DEFAULT_SESSION_NAME" ]]; then - [[ "$ZSH_TMUX_AUTOCONNECT" == "true" ]] && $tmux_cmd attach $_detached -t $ZSH_TMUX_DEFAULT_SESSION_NAME + if [[ -n "$session_name" ]]; then + [[ "$ZSH_TMUX_AUTOCONNECT" == "true" ]] && $tmux_cmd attach $_detached -t "$session_name" else [[ "$ZSH_TMUX_AUTOCONNECT" == "true" ]] && $tmux_cmd attach $_detached fi @@ -116,8 +131,9 @@ function _zsh_tmux_plugin_run() { elif [[ -e "$ZSH_TMUX_CONFIG" ]]; then tmux_cmd+=(-f "$ZSH_TMUX_CONFIG") fi - if [[ -n "$ZSH_TMUX_DEFAULT_SESSION_NAME" ]]; then - $tmux_cmd new-session -s $ZSH_TMUX_DEFAULT_SESSION_NAME + + if [[ -n "$session_name" ]]; then + $tmux_cmd new-session -s "$session_name" else $tmux_cmd new-session fi From efa8de0b52dda6b51bded60c0b26b6dce2dfa354 Mon Sep 17 00:00:00 2001 From: Martin Hans Date: Tue, 16 Apr 2024 19:38:58 +0200 Subject: [PATCH 15/22] fix(history): fix edge cases introduced in #12341 (#12357) --- lib/history.zsh | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/history.zsh b/lib/history.zsh index 56dda2462..ec89bc15e 100644 --- a/lib/history.zsh +++ b/lib/history.zsh @@ -1,22 +1,20 @@ ## History wrapper function omz_history { - local clear list - zparseopts -E c=clear l=list + # parse arguments and remove from $@ + local clear list stamp + zparseopts -E -D c=clear l=list f=stamp E=stamp i=stamp if [[ $# -eq 0 ]]; then # if no arguments provided, show full history starting from 1 - builtin fc -l 1 + builtin fc $stamp -l 1 elif [[ -n "$clear" ]]; then # if -c provided, clobber the history file echo -n >| "$HISTFILE" fc -p "$HISTFILE" echo >&2 History file deleted. - elif [[ -n "$list" ]]; then - # if -l provided, run as if calling `fc' directly - builtin fc "$@" else # otherwise, run `fc -l` with a custom format - builtin fc -l "$@" + builtin fc $stamp -l "$@" fi } From 7ef3f49f97ff34db3785b1cea444eb4972b1937b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Tue, 16 Apr 2024 20:04:25 +0200 Subject: [PATCH 16/22] fix(agnoster): prevent accidental alias use --- themes/agnoster.zsh-theme | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme index bd0405efb..c2a542163 100644 --- a/themes/agnoster.zsh-theme +++ b/themes/agnoster.zsh-theme @@ -96,7 +96,7 @@ prompt_context() { # Git: branch/detached head, dirty status prompt_git() { (( $+commands[git] )) || return - if [[ "$(git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]]; then + if [[ "$(command git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]]; then return fi local PL_BRANCH_CHAR @@ -106,12 +106,12 @@ prompt_git() { } local ref dirty mode repo_path - if [[ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]]; then - repo_path=$(git rev-parse --git-dir 2>/dev/null) + if [[ "$(command git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]]; then + repo_path=$(command git rev-parse --git-dir 2>/dev/null) dirty=$(parse_git_dirty) - ref=$(git symbolic-ref HEAD 2> /dev/null) || \ - ref="◈ $(git describe --exact-match --tags HEAD 2> /dev/null)" || \ - ref="➦ $(git rev-parse --short HEAD 2> /dev/null)" + ref=$(command git symbolic-ref HEAD 2> /dev/null) || \ + ref="◈ $(command git describe --exact-match --tags HEAD 2> /dev/null)" || \ + ref="➦ $(command git rev-parse --short HEAD 2> /dev/null)" if [[ -n $dirty ]]; then prompt_segment yellow black else @@ -119,8 +119,8 @@ prompt_git() { fi local ahead behind - ahead=$(git log --oneline @{upstream}.. 2>/dev/null) - behind=$(git log --oneline ..@{upstream} 2>/dev/null) + ahead=$(command git log --oneline @{upstream}.. 2>/dev/null) + behind=$(command git log --oneline ..@{upstream} 2>/dev/null) if [[ -n "$ahead" ]] && [[ -n "$behind" ]]; then PL_BRANCH_CHAR=$'\u21c5' elif [[ -n "$ahead" ]]; then @@ -163,10 +163,10 @@ prompt_bzr() { done local bzr_status status_mod status_all revision - if bzr_status=$(bzr status 2>&1); then + if bzr_status=$(command bzr status 2>&1); then status_mod=$(echo -n "$bzr_status" | head -n1 | grep "modified" | wc -m) status_all=$(echo -n "$bzr_status" | head -n1 | wc -m) - revision=${$(bzr log -r-1 --log-format line | cut -d: -f1):gs/%/%%} + revision=${$(command bzr log -r-1 --log-format line | cut -d: -f1):gs/%/%%} if [[ $status_mod -gt 0 ]] ; then prompt_segment yellow black "bzr@$revision ✚" else @@ -182,13 +182,13 @@ prompt_bzr() { prompt_hg() { (( $+commands[hg] )) || return local rev st branch - if $(hg id >/dev/null 2>&1); then - if $(hg prompt >/dev/null 2>&1); then - if [[ $(hg prompt "{status|unknown}") = "?" ]]; then + if $(command hg id >/dev/null 2>&1); then + if $(command hg prompt >/dev/null 2>&1); then + if [[ $(command hg prompt "{status|unknown}") = "?" ]]; then # if files are not added prompt_segment red white st='±' - elif [[ -n $(hg prompt "{status|modified}") ]]; then + elif [[ -n $(command hg prompt "{status|modified}") ]]; then # if any modification prompt_segment yellow black st='±' @@ -196,15 +196,15 @@ prompt_hg() { # if working copy is clean prompt_segment green $CURRENT_FG fi - echo -n ${$(hg prompt "☿ {rev}@{branch}"):gs/%/%%} $st + echo -n ${$(command hg prompt "☿ {rev}@{branch}"):gs/%/%%} $st else st="" - rev=$(hg id -n 2>/dev/null | sed 's/[^-0-9]//g') - branch=$(hg id -b 2>/dev/null) - if `hg st | grep -q "^\?"`; then + rev=$(command hg id -n 2>/dev/null | sed 's/[^-0-9]//g') + branch=$(command hg id -b 2>/dev/null) + if command hg st | command grep -q "^\?"; then prompt_segment red black st='±' - elif `hg st | grep -q "^[MA]"`; then + elif command hg st | command grep -q "^[MA]"; then prompt_segment yellow black st='±' else From 1ed8d4b55530888bfa723e7dc6226a798260bdc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Wed, 17 Apr 2024 20:21:18 +0200 Subject: [PATCH 17/22] fix(git): turn off async prompt by default on zsh < 5.0.6 (#12331) See https://github.com/ohmyzsh/ohmyzsh/issues/12331#issuecomment-2059460268 --- lib/git.zsh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/git.zsh b/lib/git.zsh index c4265970b..277c0b3e8 100644 --- a/lib/git.zsh +++ b/lib/git.zsh @@ -1,3 +1,5 @@ +autoload -Uz is-at-least + # The git prompt's git commands are read-only and should not interfere with # other processes. This environment variable is equivalent to running with `git # --no-optional-locks`, but falls back gracefully for older versions of git. @@ -37,8 +39,10 @@ function _omz_git_prompt_info() { echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${ref:gs/%/%%}${upstream:gs/%/%%}$(parse_git_dirty)${ZSH_THEME_GIT_PROMPT_SUFFIX}" } -# Enable async prompt by default unless the setting is at false / no -if zstyle -T ':omz:alpha:lib:git' async-prompt; then +# Use async version if setting is enabled, or undefined but zsh version is at least 5.0.6 +# https://github.com/ohmyzsh/ohmyzsh/issues/12331#issuecomment-2059460268 +if zstyle -t ':omz:alpha:lib:git' async-prompt \ + || { is-at-least 5.0.6 && zstyle -T ':omz:alpha:lib:git' async-prompt }; then function git_prompt_info() { setopt localoptions noksharrays if [[ -n "$_OMZ_ASYNC_OUTPUT[_omz_git_prompt_info]" ]]; then From eafa78217d836115a99f80bddfcd0a8901a15f77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Thu, 18 Apr 2024 07:12:32 +0200 Subject: [PATCH 18/22] fix(history): fix `history -c` (#12362) Fixes #12362 --- lib/history.zsh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/history.zsh b/lib/history.zsh index ec89bc15e..aace78aa1 100644 --- a/lib/history.zsh +++ b/lib/history.zsh @@ -4,14 +4,14 @@ function omz_history { local clear list stamp zparseopts -E -D c=clear l=list f=stamp E=stamp i=stamp - if [[ $# -eq 0 ]]; then - # if no arguments provided, show full history starting from 1 - builtin fc $stamp -l 1 - elif [[ -n "$clear" ]]; then + if [[ -n "$clear" ]]; then # if -c provided, clobber the history file echo -n >| "$HISTFILE" fc -p "$HISTFILE" echo >&2 History file deleted. + elif [[ $# -eq 0 ]]; then + # if no arguments provided, show full history starting from 1 + builtin fc $stamp -l 1 else # otherwise, run `fc -l` with a custom format builtin fc $stamp -l "$@" From c262ffbb68e6dfc30b619e6ce6bdbd00f27b8a71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Thu, 18 Apr 2024 07:16:42 +0200 Subject: [PATCH 19/22] fix(update): define `$ZSH` if undefined (#12273) Fixes #12273 Fixes https://github.com/topgrade-rs/topgrade/issues/519 --- tools/upgrade.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/upgrade.sh b/tools/upgrade.sh index d7016aa44..5eb90ab41 100755 --- a/tools/upgrade.sh +++ b/tools/upgrade.sh @@ -10,9 +10,14 @@ fi # Protect against unwanted sourcing case "$ZSH_EVAL_CONTEXT" in - *:file) echo "error: this file should not be sourced" && return ;; + *:file) echo "error: this file should not be sourced" && return 1 ;; esac +# Define "$ZSH" if not defined -- in theory this should be `export`ed by the calling script +if [[ -z "$ZSH" ]]; then + ZSH="${0:a:h:h}" +fi + cd "$ZSH" verbose_mode="default" From 56cfcb44e7ff730c10c5a00b58f38c33c984c52e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Thu, 18 Apr 2024 07:33:13 +0200 Subject: [PATCH 20/22] fix(updater): abort update if `$ZSH` is not a git repository Fixes #12298 --- lib/cli.zsh | 12 +++++++++++- tools/check_for_upgrade.sh | 10 ++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/cli.zsh b/lib/cli.zsh index aa36a6ab5..4a8d4d127 100644 --- a/lib/cli.zsh +++ b/lib/cli.zsh @@ -773,7 +773,17 @@ function _omz::theme::use { } function _omz::update { - local last_commit=$(builtin cd -q "$ZSH"; git rev-parse HEAD) + # Check if git command is available + (( $+commands[git] )) || { + _omz::log error "git is not installed. Aborting..." + return 1 + } + + local last_commit=$(builtin cd -q "$ZSH"; git rev-parse HEAD 2>/dev/null) + [[ $? -eq 0 ]] || { + _omz::log error "\`$ZSH\` is not a git directory. Aborting..." + return 1 + } # Run update script zstyle -s ':omz:update' verbose verbose_mode || verbose_mode=default diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh index 1cc193bde..a5d2112f6 100644 --- a/tools/check_for_upgrade.sh +++ b/tools/check_for_upgrade.sh @@ -20,14 +20,16 @@ zstyle -s ':omz:update' mode update_mode || { } # Cancel update if: -# - the automatic update is disabled. -# - the current user doesn't have write permissions nor owns the $ZSH directory. +# - the automatic update is disabled +# - the current user doesn't have write permissions nor owns the $ZSH directory # - is not run from a tty -# - git is unavailable on the system. +# - git is unavailable on the system +# - $ZSH is not a git repository if [[ "$update_mode" = disabled ]] \ || [[ ! -w "$ZSH" || ! -O "$ZSH" ]] \ || [[ ! -t 1 ]] \ - || ! command git --version 2>&1 >/dev/null; then + || ! command git --version 2>&1 >/dev/null + || (builtin cd -q "$ZSH"; ! command git rev-parse --is-inside-work-tree &>/dev/null); then unset update_mode return fi From 80a651a6dfafc40630b47ad2f173d326844d6925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Thu, 18 Apr 2024 07:48:33 +0200 Subject: [PATCH 21/22] chore(updater): small typo --- tools/check_for_upgrade.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh index a5d2112f6..1ecab5c0b 100644 --- a/tools/check_for_upgrade.sh +++ b/tools/check_for_upgrade.sh @@ -28,7 +28,7 @@ zstyle -s ':omz:update' mode update_mode || { if [[ "$update_mode" = disabled ]] \ || [[ ! -w "$ZSH" || ! -O "$ZSH" ]] \ || [[ ! -t 1 ]] \ - || ! command git --version 2>&1 >/dev/null + || ! command git --version 2>&1 >/dev/null \ || (builtin cd -q "$ZSH"; ! command git rev-parse --is-inside-work-tree &>/dev/null); then unset update_mode return From d17ca487a4357923d8b8681b9e40c2bb2d2fadea Mon Sep 17 00:00:00 2001 From: Martin Hans Date: Thu, 18 Apr 2024 10:49:34 +0200 Subject: [PATCH 22/22] fix(history): add `t` option to history wrapper (#12365) The `t` option takes a strftime format specification as argument. This fixes cases in which $HIST_STAMPS is set to a value other than `mm/dd/yyyy|dd.mm.yyyy|yyyy-mm-dd`. --- lib/history.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/history.zsh b/lib/history.zsh index aace78aa1..a8431fd5a 100644 --- a/lib/history.zsh +++ b/lib/history.zsh @@ -2,7 +2,7 @@ function omz_history { # parse arguments and remove from $@ local clear list stamp - zparseopts -E -D c=clear l=list f=stamp E=stamp i=stamp + zparseopts -E -D c=clear l=list f=stamp E=stamp i=stamp t:=stamp if [[ -n "$clear" ]]; then # if -c provided, clobber the history file