23 次代码提交 f97e871c33 ... f81259fb34

作者 SHA1 备注 提交日期
  Carlo Sala f81259fb34 fix(cli): support `noexec` environments (#13042) 3 周之前
  Carlo Sala a78d006faa fix(asdf)!: remove legacy <0.16 integration 3 周之前
  Kartik Vashistha 2f3a141f65 docs(asdf): match README with 0.16 (#13026) 3 周之前
  Mikrz 346c09d469 fix(dnf): function name typo (#13040) 3 周之前
  Roeniss Moon 506cedb7ca chore(alias-finder): code style (#13038) 3 周之前
  Chriss fa396ad771 feat(docker): add alias for stats (#12988) 3 周之前
  Roeniss Moon 4efdc90dba docs(docker): add section for podman's docker wrapper (#13024) 3 周之前
  Roeniss Moon 1de190e439 fix(alias-finder): early return on cmd len <2 (#13030) 3 周之前
  Carlo Sala eeaf9f89b0 fix(tmux): disable AUTOREFRESH by default (#13034) 3 周之前
  Benjamin Neff 899af6328b fix(bgnotify): detect if sway is running and not just installed (#12989) 4 周之前
  Adil Erchouk ac1335125c feat(macos): add support for Ghostty (#12890) 1 月之前
  Marc Cornellà 407be8f036 feat(dirhistory): preserve forward directories with `cde` alias (#9328) 1 月之前
  Gurram Siddarth Reddy 22ec00d1f6 chore(install): option case matching (#12881) 1 月之前
  Carlo Sala 0c8c7bf2a8 docs(tmux): add note to README for #5282 1 月之前
  Xin Li ec07c79d7e feat(tmux): refresh global environments automatically (#5282) 1 月之前
  Marc Cornellà 068299685c fix(dirhistory): support iTerm2 natural text key bindings (#11026) 1 月之前
  Carlo Sala 5eaebdf0fe fix(termsupport): ensure ohmyzsh can run with `set -eu` 1 月之前
  Kristijan 85d60d489c feat(dirhistory): add support for ghostty (#12868) 1 月之前
  bretello 070f823a84 feat(uv): alias `uv` with `noglob` (#12866) 1 月之前
  Ken van der Eerden 6591606d56 feat(jira): add `project` command to open project (#12851) 1 月之前
  Hong Xu da2510c199 fix(nicoluaj): avoid overriding customization params (#12859) 1 月之前
  Robert Dober bea0dd2ca0 feat(mix): autocomplete `format` command (#13012) 1 月之前
  Linda TJ 34e9830dd3 fix(ranq-quote): use https for quote retrieval (#13021) 1 月之前

+ 2 - 1
lib/async_prompt.zsh

@@ -26,7 +26,7 @@ autoload -Uz is-at-least
 # This API is subject to change and optimization. Rely on it at your own risk.
 
 function _omz_register_handler {
-  setopt localoptions noksharrays
+  setopt localoptions noksharrays unset
   typeset -ga _omz_async_functions
   # we want to do nothing if there's no $1 function or we already set it up
   if [[ -z "$1" ]] || (( ! ${+functions[$1]} )) \
@@ -44,6 +44,7 @@ function _omz_register_handler {
 
 # Set up async handlers and callbacks
 function _omz_async_request {
+  setopt localoptions noksharrays unset
   local -i ret=$?
   typeset -gA _OMZ_ASYNC_FDS _OMZ_ASYNC_PIDS _OMZ_ASYNC_OUTPUT
 

+ 1 - 1
lib/cli.zsh

@@ -193,7 +193,7 @@ EOF
     return 1
   fi
 
-  "$ZSH/tools/changelog.sh" "$version" "${2:-}" "$format"
+  ZSH="$ZSH" command zsh -f "$ZSH/tools/changelog.sh" "$version" "${2:-}" "$format"
 }
 
 function _omz::plugin {

+ 2 - 1
lib/termsupport.zsh

@@ -47,7 +47,7 @@ fi
 
 # Runs before showing the prompt
 function omz_termsupport_precmd {
-  [[ "${DISABLE_AUTO_TITLE:-}" != true ]] || return
+  [[ "${DISABLE_AUTO_TITLE:-}" != true ]] || return 0
   title "$ZSH_THEME_TERM_TAB_TITLE_IDLE" "$ZSH_THEME_TERM_TITLE_IDLE"
 }
 
@@ -145,6 +145,7 @@ esac
 # Identifies the directory using a file: URI scheme, including
 # the host name to disambiguate local vs. remote paths.
 function omz_termsupport_cwd {
+  setopt localoptions unset
   # Percent-encode the host and path names.
   local URL_HOST URL_PATH
   URL_HOST="$(omz_urlencode -P $HOST)" || return 1

+ 6 - 2
plugins/alias-finder/alias-finder.plugin.zsh

@@ -36,14 +36,18 @@ alias-finder() {
     # make filter to find only shorter results than current cmd
     if [[ $cheaper == true ]]; then
       cmdLen=$(echo -n "$cmd" | wc -c)
-      filter="^'{0,1}.{0,$((cmdLen - 1))}="
+      if [[ $cmdLen -le 1 ]]; then
+        return
+      fi
+
+      filter="^'?.{1,$((cmdLen - 1))}'?=" # some aliases is surrounded by single quotes
     fi
 
     alias | grep -E "$filter" | grep -E "=$finder"
 
     if [[ $exact == true ]]; then
       break # because exact case is only one
-    elif [[ $longer = true ]]; then
+    elif [[ $longer == true ]]; then
       break # because above grep command already found every longer aliases during first cycle
     fi
 

+ 24 - 17
plugins/asdf/README.md

@@ -1,32 +1,39 @@
-## asdf
+# asdf
 
 Adds integration with [asdf](https://github.com/asdf-vm/asdf), the extendable version manager, with support for Ruby, Node.js, Elixir, Erlang and more.
 
-### Installation
+## Installation
 
-1. [Download asdf](https://asdf-vm.com/guide/getting-started.html#_2-download-asdf) by running the following:
+1. [Install](https://asdf-vm.com/guide/getting-started.html#_1-install-asdf) asdf and ensure that's it's discoverable on `$PATH`;
+2. Enable it by adding it to your `plugins` definition in `~/.zshrc`:
 
-  ```
-  git clone https://github.com/asdf-vm/asdf.git ~/.asdf
-  ```
+```sh
+plugins=(asdf)
+```
 
-2. [Enable asdf](https://asdf-vm.com/guide/getting-started.html#_3-install-asdf) by adding it to your `plugins` definition in `~/.zshrc`.
+## Usage
 
-  ```
-  plugins=(asdf)
-  ```
+Refer to the [asdf plugin documentation](https://asdf-vm.com/guide/getting-started.html#_4-install-a-plugin) for information on how to add a plugin and install the many runtime versions for it.
 
-### Usage
+Example for installing the nodejs plugin and the many runtimes for it:
 
-See the [asdf documentation](https://asdf-vm.com/guide/getting-started.html#_4-install-a-plugin) for information on how to use asdf:
+```sh
+# Add plugin to asdf
+asdf plugin add nodejs 
 
-```
-asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
+# Install the latest available nodejs runtime version
 asdf install nodejs latest
-asdf global nodejs latest
-asdf local nodejs latest
+
+# Install nodejs v16.5.0 runtime version
+asdf install nodejs 16.5.0
+
+# Set the latest version in .tools-version in the current working directory
+asdf set nodejs latest
+
+# Set a version globally that will apply to all directories under $HOME
+asdf set -u nodejs 16.5.0
 ```
 
-### Maintainer
+## Maintainer
 
 - [@RobLoach](https://github.com/RobLoach)

+ 10 - 45
plugins/asdf/asdf.plugin.zsh

@@ -1,48 +1,13 @@
-if (( $+commands[asdf] )); then
-  export ASDF_DATA_DIR="${ASDF_DATA_DIR:-$HOME/.asdf}"
-  path=("$ASDF_DATA_DIR/shims" $path)
+(( ! $+commands[asdf] )) && return
 
-  # If the completion file doesn't exist yet, we need to autoload it and
-  # bind it to `asdf`. Otherwise, compinit will have already done that.
-  if [[ ! -f "$ZSH_CACHE_DIR/completions/_asdf" ]]; then
-    typeset -g -A _comps
-    autoload -Uz _asdf
-    _comps[asdf]=_asdf
-  fi
-  asdf completion zsh >| "$ZSH_CACHE_DIR/completions/_asdf" &|
+export ASDF_DATA_DIR="${ASDF_DATA_DIR:-$HOME/.asdf}"
+path=("$ASDF_DATA_DIR/shims" $path)
 
-  return
-fi
-
-# TODO:(2025-02-12): remove deprecated asdf <0.16 code
-
-# Find where asdf should be installed
-ASDF_DIR="${ASDF_DIR:-$HOME/.asdf}"
-ASDF_COMPLETIONS="$ASDF_DIR/completions"
-
-if [[ ! -f "$ASDF_DIR/asdf.sh" || ! -f "$ASDF_COMPLETIONS/_asdf" ]]; then
-  # If not found, check for archlinux/AUR package (/opt/asdf-vm/)
-  if [[ -f "/opt/asdf-vm/asdf.sh" ]]; then
-    ASDF_DIR="/opt/asdf-vm"
-    ASDF_COMPLETIONS="$ASDF_DIR"
-  # If not found, check for Homebrew package
-  elif (( $+commands[brew] )); then
-    _ASDF_PREFIX="$(brew --prefix asdf)"
-    ASDF_DIR="${_ASDF_PREFIX}/libexec"
-    ASDF_COMPLETIONS="${_ASDF_PREFIX}/share/zsh/site-functions"
-    unset _ASDF_PREFIX
-  else
-    return
-  fi
-fi
-
-# Load command
-if [[ -f "$ASDF_DIR/asdf.sh" ]]; then
-  source "$ASDF_DIR/asdf.sh"
-  # Load completions
-  if [[ -f "$ASDF_COMPLETIONS/_asdf" ]]; then
-    fpath+=("$ASDF_COMPLETIONS")
-    autoload -Uz _asdf
-    compdef _asdf asdf # compdef is already loaded before loading plugins
-  fi
+# If the completion file doesn't exist yet, we need to autoload it and
+# bind it to `asdf`. Otherwise, compinit will have already done that.
+if [[ ! -f "$ZSH_CACHE_DIR/completions/_asdf" ]]; then
+  typeset -g -A _comps
+  autoload -Uz _asdf
+  _comps[asdf]=_asdf
 fi
+asdf completion zsh >| "$ZSH_CACHE_DIR/completions/_asdf" &|

+ 1 - 1
plugins/bgnotify/bgnotify.plugin.zsh

@@ -62,7 +62,7 @@ function bgnotify_formatted {
 function bgnotify_appid {
   if (( ${+commands[osascript]} )); then
     osascript -e "tell application id \"$(bgnotify_programid)\"  to get the {id, frontmost, id of front window, visible of front window}" 2>/dev/null
-  elif [[ -n $WAYLAND_DISPLAY ]] && (( ${+commands[swaymsg]} )); then # wayland+sway
+  elif [[ -n $WAYLAND_DISPLAY ]] && ([[ -n $SWAYSOCK ]] || [[ -n $I3SOCK ]]) && (( ${+commands[swaymsg]} )); then # wayland+sway
     local app_id=$(bgnotify_find_sway_appid)
     [[ -n "$app_id" ]] && echo "$app_id" || echo $EPOCHSECONDS
   elif [[ -z $WAYLAND_DISPLAY ]] && [[ -n $DISPLAY ]] && (( ${+commands[xprop]} )); then

+ 43 - 0
plugins/dirhistory/README.md

@@ -60,3 +60,46 @@ to `/usr` again.
 After that, <kbd>Alt</kbd> + <kbd>Down</kbd> will probably go to `/usr/bin` if `bin` is the first directory in alphabetical
 order (depends on your `/usr` folder structure). <kbd>Alt</kbd> + <kbd>Up</kbd> will return to `/usr`, and once more will get
 you to the root folder (`/`).
+
+### cde
+
+This plugin also provides a `cde` alias that allows you to change to a directory without clearing the next directory stack.
+This changes the default behavior of `dirhistory`, which is to clear the next directory stack when changing directories.
+
+For example, if the shell was started, and the following commands were entered:
+
+```shell
+cd ~
+cd /usr
+cd share
+cd doc
+
+# <Alt + Left>
+# <Alt + Left>
+```
+
+The directory stack would look like this:
+
+```sh
+➜  /usr typeset -pm dirhistory_\*
+typeset -ax dirhistory_past=( /home/user /usr )
+typeset -ax dirhistory_future=( /usr/share/doc /usr/share )
+```
+
+This means that pressing <kbd>Alt</kbd> + <kbd>Right</kbd>, you'd go to `/usr/share` and `/usr/share/doc` (the "future" directories).
+
+If you run `cd /usr/bin`, the "future" directories will be removed, and you won't be able to access them with <kbd>Alt</kbd> + <kbd>Right</kbd>:
+
+```sh
+➜  /u/bin typeset -pm dirhistory_\*
+typeset -ax dirhistory_past=( /home/user /usr )
+typeset -ax dirhistory_future=( /usr/bin )
+```
+
+If you instead run `cde /usr/bin`, the "future" directories will be preserved:
+
+```sh
+➜  /u/bin typeset -pm dirhistory_\*
+typeset -ax dirhistory_past=( /home/user /usr /usr/bin )
+typeset -ax dirhistory_future=( /usr/share/doc /usr/share )
+```

+ 14 - 3
plugins/dirhistory/dirhistory.plugin.zsh

@@ -11,9 +11,10 @@ dirhistory_past=($PWD)
 dirhistory_future=()
 export dirhistory_past
 export dirhistory_future
-
 export DIRHISTORY_SIZE=30
 
+alias cde='dirhistory_cd'
+
 # Pop the last element of dirhistory_past.
 # Pass the name of the variable to return the result in.
 # Returns the element if the array was not empty,
@@ -136,7 +137,11 @@ for keymap in emacs vicmd viins; do
 
   case "$TERM_PROGRAM" in
   Apple_Terminal) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # Terminal.app
-  iTerm.app) bindkey -M $keymap "^[^[[D" dirhistory_zle_dirhistory_back ;;   # iTerm2
+  ghostty) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;;        # ghostty
+  iTerm.app)
+    bindkey -M $keymap "^[^[[D" dirhistory_zle_dirhistory_back
+    bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back
+    ;;
   esac
 
   if (( ${+terminfo[kcub1]} )); then
@@ -151,7 +156,11 @@ for keymap in emacs vicmd viins; do
 
   case "$TERM_PROGRAM" in
   Apple_Terminal) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # Terminal.app
-  iTerm.app) bindkey -M $keymap "^[^[[C" dirhistory_zle_dirhistory_future ;;   # iTerm2
+  ghostty) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;;        # ghostty
+  iTerm.app)
+    bindkey -M $keymap "^[^[[C" dirhistory_zle_dirhistory_future
+    bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future
+    ;;
   esac
 
   if (( ${+terminfo[kcuf1]} )); then
@@ -200,6 +209,7 @@ for keymap in emacs vicmd viins; do
   case "$TERM_PROGRAM" in
   Apple_Terminal) bindkey -M $keymap "^[[A" dirhistory_zle_dirhistory_up ;;  # Terminal.app
   iTerm.app) bindkey -M $keymap "^[^[[A" dirhistory_zle_dirhistory_up ;;     # iTerm2
+  ghostty) bindkey -M $keymap "^[[1;3A" dirhistory_zle_dirhistory_up ;;      # ghostty
   esac
 
   if (( ${+terminfo[kcuu1]} )); then
@@ -215,6 +225,7 @@ for keymap in emacs vicmd viins; do
   case "$TERM_PROGRAM" in
   Apple_Terminal) bindkey -M $keymap "^[[B" dirhistory_zle_dirhistory_down ;;  # Terminal.app
   iTerm.app) bindkey -M $keymap "^[^[[B" dirhistory_zle_dirhistory_down ;;     # iTerm2
+  ghostty) bindkey -M $keymap "^[[1;3B" dirhistory_zle_dirhistory_down ;;      # ghostty
   esac
 
   if (( ${+terminfo[kcud1]} )); then

+ 1 - 1
plugins/dnf/_dnf5

@@ -38,7 +38,7 @@ _dnf5_rpm_files() {
 
 _dnf5_packages_or_rpms() {
   if [[ "$words[CURRENT]" = (*/*|\~*) ]]; then # if looks like a path name
-    _dnf_rpm_files
+    _dnf5_rpm_files
   else
     _dnf5_packages "$@"
   fi

+ 5 - 0
plugins/docker/README.md

@@ -39,6 +39,10 @@ following setting. See https://github.com/ohmyzsh/ohmyzsh/issues/11789 for more
 zstyle ':omz:plugins:docker' legacy-completion yes
 ```
 
+### For Podman's Docker wrapper users
+
+If you use Podman's Docker wrapper, you need to enable legacy completion. See above section.
+
 ## Aliases
 
 | Alias   | Command                       | Description                                                                              |
@@ -73,6 +77,7 @@ zstyle ':omz:plugins:docker' legacy-completion yes
 | drs     | `docker container restart`    | Restart one or more containers                                                           |
 | dsta    | `docker stop $(docker ps -q)` | Stop all running containers                                                              |
 | dstp    | `docker container stop`       | Stop one or more running containers                                                      |
+| dsts    | `docker stats`                | Display real-time streaming statistics for containers                                                    |
 | dtop    | `docker top`                  | Display the running processes of a container                                             |
 | dvi     | `docker volume inspect`       | Display detailed information about one or more volumes                                   |
 | dvls    | `docker volume ls`            | List all the volumes known to docker                                                     |

+ 1 - 0
plugins/docker/docker.plugin.zsh

@@ -28,6 +28,7 @@ alias dst='docker container start'
 alias drs='docker container restart'
 alias dsta='docker stop $(docker ps -q)'
 alias dstp='docker container stop'
+alias dsts='docker stats'
 alias dtop='docker top'
 alias dvi='docker volume inspect'
 alias dvls='docker volume ls'

+ 1 - 0
plugins/jira/README.md

@@ -26,6 +26,7 @@ This plugin supplies one command, `jira`, through which all its features are exp
 | `jira new`                    | Opens a new Jira issue dialogue                          |
 | `jira ABC-123`                | Opens an existing issue                                  |
 | `jira ABC-123 m`              | Opens an existing issue for adding a comment             |
+| `jira project ABC`            | Opens JIRA project summary                               |
 | `jira dashboard [rapid_view]` | Opens your JIRA dashboard                                |
 | `jira mine`                   | Queries for your own issues                              |
 | `jira tempo`                  | Opens your JIRA Tempo                                    |

+ 1 - 0
plugins/jira/_jira

@@ -5,6 +5,7 @@ local -a _1st_arguments
 _1st_arguments=(
   'new:create a new issue'
   'mine:open my issues'
+  'project:open the project'
   'dashboard:open the dashboard'
   'tempo:open the tempo'
   'reported:search for issues reported by a user'

+ 4 - 0
plugins/jira/jira.plugin.zsh

@@ -8,6 +8,7 @@ jira                            Performs the default action
 jira new                        Opens a new Jira issue dialogue
 jira ABC-123                    Opens an existing issue
 jira ABC-123 m                  Opens an existing issue for adding a comment
+jira project ABC                Opens JIRA project summary
 jira dashboard [rapid_view]     Opens your JIRA dashboard
 jira mine                       Queries for your own issues
 jira tempo                      Opens your JIRA Tempo
@@ -88,6 +89,9 @@ function jira() {
   elif [[ "$action" == "mine" ]]; then
     echo "Opening my issues"
     open_command "${jira_url}/issues/?filter=-1"
+  elif [[ "$action" == "project" ]]; then
+    echo "Opening project"
+    open_command "${jira_url}/jira/software/c/projects/${2}/summary"
   elif [[ "$action" == "dashboard" ]]; then
     echo "Opening dashboard"
     if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then

+ 1 - 0
plugins/macos/README.md

@@ -13,6 +13,7 @@ plugins=(... macos)
 - [iTerm2](https://iterm2.com/)
 - [Hyper](https://hyper.is/)
 - [Tabby](https://tabby.sh/)
+- [Ghostty](https://ghostty.org)
 
 ## Commands
 

+ 18 - 0
plugins/macos/macos.plugin.zsh

@@ -85,6 +85,12 @@ EOF
       tell application "System Events"
         tell process "Tabby" to keystroke "t" using command down
       end tell
+EOF
+  elif [[ "$the_app" == 'ghostty' ]]; then
+    osascript >/dev/null <<EOF
+      tell application "System Events"
+        tell process "Ghostty" to keystroke "t" using command down
+      end tell
 EOF
   else
     echo "$0: unsupported terminal app: $the_app" >&2
@@ -139,6 +145,12 @@ EOF
       tell application "System Events"
         tell process "Tabby" to keystroke "D" using command down
       end tell
+EOF
+  elif [[ "$the_app" == 'ghostty' ]]; then
+    osascript >/dev/null <<EOF
+      tell application "System Events"
+        tell process "Ghostty" to keystroke "D" using command down
+      end tell
 EOF
   else
     echo "$0: unsupported terminal app: $the_app" >&2
@@ -194,6 +206,12 @@ EOF
       tell application "System Events"
         tell process "Tabby" to keystroke "d" using command down
       end tell
+EOF
+  elif [[ "$the_app" == 'ghostty' ]]; then
+    osascript >/dev/null <<EOF
+      tell application "System Events"
+        tell process "Ghostty" to keystroke "d" using command down
+      end tell
 EOF
   else
     echo "$0: unsupported terminal app: $the_app" >&2

+ 10 - 0
plugins/mix/_mix

@@ -146,6 +146,16 @@ case $state in
       (help)
          _arguments ':feature:__task_list'
          ;;
+      (format)
+        _arguments -C \
+          '--check-formatted' \
+          '--dot-formatter' \
+          '--dry-run' \
+          '--force' \
+          '--migrate' \
+          '--no-exit' \
+          '*::file:_files'
+          ;;
       (test)
          _files
          ;;

+ 1 - 1
plugins/rand-quote/rand-quote.plugin.zsh

@@ -8,7 +8,7 @@ function quote {
 
   # Get random quote data
   local data
-  data="$(command curl -s --connect-timeout 2 "http://www.quotationspage.com/random.php" \
+  data="$(command curl -s --connect-timeout 2 "https://www.quotationspage.com/random.php" \
     | iconv -c -f ISO-8859-1 -t UTF-8 \
     | command grep -a -m 1 'dt class="quote"')"
 

+ 1 - 0
plugins/tmux/README.md

@@ -31,6 +31,7 @@ The plugin also supports the following:
 
 | Variable                            | Description                                                                                                                    |
 | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
+| `ZSH_TMUX_AUTOREFRESH`              | Automatically refresh global environments (default: `false`)                                                                   |
 | `ZSH_TMUX_AUTOSTART`                | Automatically starts tmux (default: `false`)                                                                                   |
 | `ZSH_TMUX_AUTOSTART_ONCE`           | Autostart only if tmux hasn't been started previously (default: `true`)                                                        |
 | `ZSH_TMUX_AUTOCONNECT`              | Automatically connect to a previous session if it exits (default: `true`)                                                      |

+ 17 - 0
plugins/tmux/tmux.plugin.zsh

@@ -15,6 +15,8 @@ fi
 : ${ZSH_TMUX_AUTOQUIT:=$ZSH_TMUX_AUTOSTART}
 # Automatically name the new session based on the basename of PWD
 : ${ZSH_TMUX_AUTONAME_SESSION:=false}
+# Automatically pick up tmux environments
+: ${ZSH_TMUX_AUTOREFRESH:=false}
 # Set term to screen or screen-256color based on current terminal support
 : ${ZSH_TMUX_DETACHED:=false}
 # Set detached mode
@@ -158,6 +160,15 @@ function _zsh_tmux_plugin_run() {
   fi
 }
 
+# Refresh tmux environment variables.
+function _zsh_tmux_plugin_preexec()
+{
+  local -a tmux_cmd
+  tmux_cmd=(command tmux)
+
+  eval $($tmux_cmd show-environment -s)
+}
+
 # Use the completions for tmux for our function
 compdef _tmux _zsh_tmux_plugin_run
 # Alias tmux to our wrapper function.
@@ -184,3 +195,9 @@ if [[ -z "$TMUX" && "$ZSH_TMUX_AUTOSTART" == "true" && -z "$INSIDE_EMACS" && -z
     _zsh_tmux_plugin_run
   fi
 fi
+
+# Automatically refresh tmux environments if tmux is running.
+if [[ -n "$TMUX" && "$ZSH_TMUX_AUTOREFRESH" == "true" ]] && tmux ls >/dev/null 2>/dev/null; then
+  autoload -U add-zsh-hook
+  add-zsh-hook preexec _zsh_tmux_plugin_preexec
+fi

+ 2 - 0
plugins/uv/uv.plugin.zsh

@@ -3,6 +3,8 @@ if (( ! ${+commands[uv]} )); then
   return
 fi
 
+alias uv="noglob uv"
+
 alias uva='uv add'
 alias uvexp='uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet'
 alias uvl='uv lock'

+ 6 - 6
themes/nicoulaj.zsh-theme

@@ -12,12 +12,12 @@
 # ------------------------------------------------------------------------------
 
 # Customizable parameters.
-PROMPT_PATH_MAX_LENGTH=30
-PROMPT_DEFAULT_END=❯
-PROMPT_ROOT_END=❯❯❯
-PROMPT_SUCCESS_COLOR=$FG[071]
-PROMPT_FAILURE_COLOR=$FG[124]
-PROMPT_VCS_INFO_COLOR=$FG[242]
+PROMPT_PATH_MAX_LENGTH=${PROMPT_PATH_MAX_LENGTH:-30}
+PROMPT_DEFAULT_END=${PROMPT_DEFAULT_END:-}
+PROMPT_ROOT_END=${PROMPT_ROOT_END:-❯❯❯}
+PROMPT_SUCCESS_COLOR=${PROMPT_SUCCESS_COLOR:-$FG[071]}
+PROMPT_FAILURE_COLOR=${PROMPT_FAILURE_COLOR:-$FG[124]}
+PROMPT_VCS_INFO_COLOR=${PROMPT_VCS_INFO_COLOR:-$FG[242]}
 
 # Set required options.
 setopt promptsubst

+ 2 - 2
tools/install.sh

@@ -399,8 +399,8 @@ EOF
     "$FMT_YELLOW" "$FMT_RESET"
   read -r opt
   case $opt in
-    y*|Y*|"") ;;
-    n*|N*) echo "Shell change skipped."; return ;;
+    [Yy]*|"") ;;
+    [Nn]*) echo "Shell change skipped."; return ;;
     *) echo "Invalid choice. Shell change skipped."; return ;;
   esac
 

+ 1 - 1
tools/upgrade.sh

@@ -254,7 +254,7 @@ if LANG= git pull --quiet --rebase $remote $branch; then
 
     # Print changelog to the terminal
     if [[ $interactive == true && $verbose_mode == default ]]; then
-      "$ZSH/tools/changelog.sh" HEAD "$last_commit"
+      ZSH="$ZSH" command zsh -f "$ZSH/tools/changelog.sh" HEAD "$last_commit"
     fi
 
     if [[ $verbose_mode != silent ]]; then