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

+ 1 - 1
lib/cli.zsh

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

+ 2 - 1
lib/termsupport.zsh

@@ -47,7 +47,7 @@ fi
 
 
 # Runs before showing the prompt
 # Runs before showing the prompt
 function omz_termsupport_precmd {
 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"
   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
 # Identifies the directory using a file: URI scheme, including
 # the host name to disambiguate local vs. remote paths.
 # the host name to disambiguate local vs. remote paths.
 function omz_termsupport_cwd {
 function omz_termsupport_cwd {
+  setopt localoptions unset
   # Percent-encode the host and path names.
   # Percent-encode the host and path names.
   local URL_HOST URL_PATH
   local URL_HOST URL_PATH
   URL_HOST="$(omz_urlencode -P $HOST)" || return 1
   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
     # make filter to find only shorter results than current cmd
     if [[ $cheaper == true ]]; then
     if [[ $cheaper == true ]]; then
       cmdLen=$(echo -n "$cmd" | wc -c)
       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
     fi
 
 
     alias | grep -E "$filter" | grep -E "=$finder"
     alias | grep -E "$filter" | grep -E "=$finder"
 
 
     if [[ $exact == true ]]; then
     if [[ $exact == true ]]; then
       break # because exact case is only one
       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
       break # because above grep command already found every longer aliases during first cycle
     fi
     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.
 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 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)
 - [@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
 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 {
 function bgnotify_appid {
   if (( ${+commands[osascript]} )); then
   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
     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)
     local app_id=$(bgnotify_find_sway_appid)
     [[ -n "$app_id" ]] && echo "$app_id" || echo $EPOCHSECONDS
     [[ -n "$app_id" ]] && echo "$app_id" || echo $EPOCHSECONDS
   elif [[ -z $WAYLAND_DISPLAY ]] && [[ -n $DISPLAY ]] && (( ${+commands[xprop]} )); then
   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
 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
 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 (`/`).
 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=()
 dirhistory_future=()
 export dirhistory_past
 export dirhistory_past
 export dirhistory_future
 export dirhistory_future
-
 export DIRHISTORY_SIZE=30
 export DIRHISTORY_SIZE=30
 
 
+alias cde='dirhistory_cd'
+
 # Pop the last element of dirhistory_past.
 # Pop the last element of dirhistory_past.
 # Pass the name of the variable to return the result in.
 # Pass the name of the variable to return the result in.
 # Returns the element if the array was not empty,
 # Returns the element if the array was not empty,
@@ -136,7 +137,11 @@ for keymap in emacs vicmd viins; do
 
 
   case "$TERM_PROGRAM" in
   case "$TERM_PROGRAM" in
   Apple_Terminal) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # Terminal.app
   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
   esac
 
 
   if (( ${+terminfo[kcub1]} )); then
   if (( ${+terminfo[kcub1]} )); then
@@ -151,7 +156,11 @@ for keymap in emacs vicmd viins; do
 
 
   case "$TERM_PROGRAM" in
   case "$TERM_PROGRAM" in
   Apple_Terminal) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # Terminal.app
   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
   esac
 
 
   if (( ${+terminfo[kcuf1]} )); then
   if (( ${+terminfo[kcuf1]} )); then
@@ -200,6 +209,7 @@ for keymap in emacs vicmd viins; do
   case "$TERM_PROGRAM" in
   case "$TERM_PROGRAM" in
   Apple_Terminal) bindkey -M $keymap "^[[A" dirhistory_zle_dirhistory_up ;;  # Terminal.app
   Apple_Terminal) bindkey -M $keymap "^[[A" dirhistory_zle_dirhistory_up ;;  # Terminal.app
   iTerm.app) bindkey -M $keymap "^[^[[A" dirhistory_zle_dirhistory_up ;;     # iTerm2
   iTerm.app) bindkey -M $keymap "^[^[[A" dirhistory_zle_dirhistory_up ;;     # iTerm2
+  ghostty) bindkey -M $keymap "^[[1;3A" dirhistory_zle_dirhistory_up ;;      # ghostty
   esac
   esac
 
 
   if (( ${+terminfo[kcuu1]} )); then
   if (( ${+terminfo[kcuu1]} )); then
@@ -215,6 +225,7 @@ for keymap in emacs vicmd viins; do
   case "$TERM_PROGRAM" in
   case "$TERM_PROGRAM" in
   Apple_Terminal) bindkey -M $keymap "^[[B" dirhistory_zle_dirhistory_down ;;  # Terminal.app
   Apple_Terminal) bindkey -M $keymap "^[[B" dirhistory_zle_dirhistory_down ;;  # Terminal.app
   iTerm.app) bindkey -M $keymap "^[^[[B" dirhistory_zle_dirhistory_down ;;     # iTerm2
   iTerm.app) bindkey -M $keymap "^[^[[B" dirhistory_zle_dirhistory_down ;;     # iTerm2
+  ghostty) bindkey -M $keymap "^[[1;3B" dirhistory_zle_dirhistory_down ;;      # ghostty
   esac
   esac
 
 
   if (( ${+terminfo[kcud1]} )); then
   if (( ${+terminfo[kcud1]} )); then

+ 1 - 1
plugins/dnf/_dnf5

@@ -38,7 +38,7 @@ _dnf5_rpm_files() {
 
 
 _dnf5_packages_or_rpms() {
 _dnf5_packages_or_rpms() {
   if [[ "$words[CURRENT]" = (*/*|\~*) ]]; then # if looks like a path name
   if [[ "$words[CURRENT]" = (*/*|\~*) ]]; then # if looks like a path name
-    _dnf_rpm_files
+    _dnf5_rpm_files
   else
   else
     _dnf5_packages "$@"
     _dnf5_packages "$@"
   fi
   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
 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
 ## Aliases
 
 
 | Alias   | Command                       | Description                                                                              |
 | Alias   | Command                       | Description                                                                              |
@@ -73,6 +77,7 @@ zstyle ':omz:plugins:docker' legacy-completion yes
 | drs     | `docker container restart`    | Restart one or more containers                                                           |
 | drs     | `docker container restart`    | Restart one or more containers                                                           |
 | dsta    | `docker stop $(docker ps -q)` | Stop all running containers                                                              |
 | dsta    | `docker stop $(docker ps -q)` | Stop all running containers                                                              |
 | dstp    | `docker container stop`       | Stop one or more 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                                             |
 | dtop    | `docker top`                  | Display the running processes of a container                                             |
 | dvi     | `docker volume inspect`       | Display detailed information about one or more volumes                                   |
 | dvi     | `docker volume inspect`       | Display detailed information about one or more volumes                                   |
 | dvls    | `docker volume ls`            | List all the volumes known to docker                                                     |
 | 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 drs='docker container restart'
 alias dsta='docker stop $(docker ps -q)'
 alias dsta='docker stop $(docker ps -q)'
 alias dstp='docker container stop'
 alias dstp='docker container stop'
+alias dsts='docker stats'
 alias dtop='docker top'
 alias dtop='docker top'
 alias dvi='docker volume inspect'
 alias dvi='docker volume inspect'
 alias dvls='docker volume ls'
 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 new`                    | Opens a new Jira issue dialogue                          |
 | `jira ABC-123`                | Opens an existing issue                                  |
 | `jira ABC-123`                | Opens an existing issue                                  |
 | `jira ABC-123 m`              | Opens an existing issue for adding a comment             |
 | `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 dashboard [rapid_view]` | Opens your JIRA dashboard                                |
 | `jira mine`                   | Queries for your own issues                              |
 | `jira mine`                   | Queries for your own issues                              |
 | `jira tempo`                  | Opens your JIRA Tempo                                    |
 | `jira tempo`                  | Opens your JIRA Tempo                                    |

+ 1 - 0
plugins/jira/_jira

@@ -5,6 +5,7 @@ local -a _1st_arguments
 _1st_arguments=(
 _1st_arguments=(
   'new:create a new issue'
   'new:create a new issue'
   'mine:open my issues'
   'mine:open my issues'
+  'project:open the project'
   'dashboard:open the dashboard'
   'dashboard:open the dashboard'
   'tempo:open the tempo'
   'tempo:open the tempo'
   'reported:search for issues reported by a user'
   '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 new                        Opens a new Jira issue dialogue
 jira ABC-123                    Opens an existing issue
 jira ABC-123                    Opens an existing issue
 jira ABC-123 m                  Opens an existing issue for adding a comment
 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 dashboard [rapid_view]     Opens your JIRA dashboard
 jira mine                       Queries for your own issues
 jira mine                       Queries for your own issues
 jira tempo                      Opens your JIRA Tempo
 jira tempo                      Opens your JIRA Tempo
@@ -88,6 +89,9 @@ function jira() {
   elif [[ "$action" == "mine" ]]; then
   elif [[ "$action" == "mine" ]]; then
     echo "Opening my issues"
     echo "Opening my issues"
     open_command "${jira_url}/issues/?filter=-1"
     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
   elif [[ "$action" == "dashboard" ]]; then
     echo "Opening dashboard"
     echo "Opening dashboard"
     if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then
     if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then

+ 1 - 0
plugins/macos/README.md

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

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

@@ -85,6 +85,12 @@ EOF
       tell application "System Events"
       tell application "System Events"
         tell process "Tabby" to keystroke "t" using command down
         tell process "Tabby" to keystroke "t" using command down
       end tell
       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
 EOF
   else
   else
     echo "$0: unsupported terminal app: $the_app" >&2
     echo "$0: unsupported terminal app: $the_app" >&2
@@ -139,6 +145,12 @@ EOF
       tell application "System Events"
       tell application "System Events"
         tell process "Tabby" to keystroke "D" using command down
         tell process "Tabby" to keystroke "D" using command down
       end tell
       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
 EOF
   else
   else
     echo "$0: unsupported terminal app: $the_app" >&2
     echo "$0: unsupported terminal app: $the_app" >&2
@@ -194,6 +206,12 @@ EOF
       tell application "System Events"
       tell application "System Events"
         tell process "Tabby" to keystroke "d" using command down
         tell process "Tabby" to keystroke "d" using command down
       end tell
       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
 EOF
   else
   else
     echo "$0: unsupported terminal app: $the_app" >&2
     echo "$0: unsupported terminal app: $the_app" >&2

+ 10 - 0
plugins/mix/_mix

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

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

@@ -8,7 +8,7 @@ function quote {
 
 
   # Get random quote data
   # Get random quote data
   local 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 \
     | iconv -c -f ISO-8859-1 -t UTF-8 \
     | command grep -a -m 1 'dt class="quote"')"
     | 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                                                                                                                    |
 | Variable                            | Description                                                                                                                    |
 | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
 | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
+| `ZSH_TMUX_AUTOREFRESH`              | Automatically refresh global environments (default: `false`)                                                                   |
 | `ZSH_TMUX_AUTOSTART`                | Automatically starts tmux (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_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`)                                                      |
 | `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}
 : ${ZSH_TMUX_AUTOQUIT:=$ZSH_TMUX_AUTOSTART}
 # Automatically name the new session based on the basename of PWD
 # Automatically name the new session based on the basename of PWD
 : ${ZSH_TMUX_AUTONAME_SESSION:=false}
 : ${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
 # Set term to screen or screen-256color based on current terminal support
 : ${ZSH_TMUX_DETACHED:=false}
 : ${ZSH_TMUX_DETACHED:=false}
 # Set detached mode
 # Set detached mode
@@ -158,6 +160,15 @@ function _zsh_tmux_plugin_run() {
   fi
   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
 # Use the completions for tmux for our function
 compdef _tmux _zsh_tmux_plugin_run
 compdef _tmux _zsh_tmux_plugin_run
 # Alias tmux to our wrapper function.
 # 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
     _zsh_tmux_plugin_run
   fi
   fi
 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
   return
 fi
 fi
 
 
+alias uv="noglob uv"
+
 alias uva='uv add'
 alias uva='uv add'
 alias uvexp='uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet'
 alias uvexp='uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet'
 alias uvl='uv lock'
 alias uvl='uv lock'

+ 6 - 6
themes/nicoulaj.zsh-theme

@@ -12,12 +12,12 @@
 # ------------------------------------------------------------------------------
 # ------------------------------------------------------------------------------
 
 
 # Customizable parameters.
 # 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.
 # Set required options.
 setopt promptsubst
 setopt promptsubst

+ 2 - 2
tools/install.sh

@@ -399,8 +399,8 @@ EOF
     "$FMT_YELLOW" "$FMT_RESET"
     "$FMT_YELLOW" "$FMT_RESET"
   read -r opt
   read -r opt
   case $opt in
   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 ;;
     *) echo "Invalid choice. Shell change skipped."; return ;;
   esac
   esac
 
 

+ 1 - 1
tools/upgrade.sh

@@ -254,7 +254,7 @@ if LANG= git pull --quiet --rebase $remote $branch; then
 
 
     # Print changelog to the terminal
     # Print changelog to the terminal
     if [[ $interactive == true && $verbose_mode == default ]]; then
     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
     fi
 
 
     if [[ $verbose_mode != silent ]]; then
     if [[ $verbose_mode != silent ]]; then