Browse Source

feat(eza): create plugin (#12237)

Co-authored-by: Carlo Sala <carlosalag@protonmail.com>
Pandu E POLUAN 2 months ago
parent
commit
6a65ac9025
3 changed files with 166 additions and 2 deletions
  1. 3 2
      .github/CODEOWNERS
  2. 101 0
      plugins/eza/README.md
  3. 62 0
      plugins/eza/eza.plugin.zsh

+ 3 - 2
.github/CODEOWNERS

@@ -1,13 +1,14 @@
 # Plugin owners
 plugins/archlinux/                  @ratijas
+plugins/dbt/                        @msempere
+plugins/eza/                        @pepoluan
 plugins/genpass/                    @atoponce
 plugins/git-lfs/                    @hellovietduc
 plugins/gitfast/                    @felipec
 plugins/react-native                @esthor
 plugins/sdk/                        @rgoldberg
 plugins/shell-proxy/                @septs
+plugins/starship/                   @axieax
 plugins/universalarchive/           @Konfekt
 plugins/wp-cli/                     @joshmedeski
 plugins/zoxide/                     @ajeetdsouza
-plugins/starship/                   @axieax
-plugins/dbt/                        @msempere

+ 101 - 0
plugins/eza/README.md

@@ -0,0 +1,101 @@
+# eza plugin
+
+This provides aliases that invoke the [`eza`](https://github.com/eza-community/eza) utility rather than `ls`
+
+To use it add `eza` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... eza)
+```
+
+## Configuration
+
+All configurations are done using the `zstyle` command in the `:omz:plugins:eza` namespace.
+
+**NOTE:** The configuring needs to be done prior to OMZ loading the plugins. When the plugin is loaded,
+changing the `zstyle` won't have any effect.
+
+### `dirs-first`
+
+```zsh
+zstyle ':omz:plugins:eza' 'dirs-first' yes|no
+```
+
+If `yes`, directories will be grouped first.
+
+Default: `no`
+
+### `git-status`
+
+```zsh
+zstyle ':omz:plugins:eza' 'git-status' yes|no
+```
+
+If `yes`, always add `--git` flag to indicate git status (if tracked / in a git repo).
+
+Default: `no`
+
+### `header`
+
+```zsh
+zstyle ':omz:plugins:eza' 'header' yes|no
+```
+
+If `yes`, always add `-h` flag to add a header row for each column.
+
+Default: `no`
+
+### `show-group`
+
+```zsh
+zstyle ':omz:plugins:eza' 'show-group' yes|no
+```
+
+If `yes` (default), always add `-g` flag to show the group ownership.
+
+Default: `yes`
+
+### `size-prefix`
+
+```zsh
+zstyle ':omz:plugins:eza' 'size-prefix' (binary|none|si)
+```
+
+Choose the prefix to be used in displaying file size:
+
+- `binary` -- use [binary prefixes](https://en.wikipedia.org/wiki/Binary_prefix) such as "Ki", "Mi", "Gi" and
+  so on
+- `none` -- don't use any prefix, show size in bytes
+- `si` (default) -- use [Metric/S.I. prefixes](https://en.wikipedia.org/wiki/Metric_prefix)
+
+Default: `si`
+
+### `time-style`
+
+```zsh
+zstyle ':omz:plugins:eza' 'time-style' $TIME_STYLE
+```
+
+Sets the `--time-style` option of `eza`. (See `man eza` for the options)
+
+Default: Not set, which means the default behavior of `eza` will take place.
+
+## Aliases
+
+**Notes:**
+
+- Aliases may be modified by Configuration
+- The term "files" without "only" qualifier means both files & directories
+
+| Alias  | Command           | Description                                                                |
+| ------ | ----------------- | -------------------------------------------------------------------------- |
+| `la`   | `eza -la`         | List all files (except . and ..) as a long list                            |
+| `ldot` | `eza -ld .*`      | List dotfiles only (directories shown as entries instead of recursed into) |
+| `lD`   | `eza -lD`         | List only directories (excluding dotdirs) as a long list                   |
+| `lDD`  | `eza -laD`        | List only directories (including dotdirs) as a long list                   |
+| `ll`   | `eza -l`          | List files as a long list                                                  |
+| `ls`   | `eza`             | Plain eza call                                                             |
+| `lsd`  | `eza -d`          | List specified files with directories as entries, in a grid                |
+| `lsdl` | `eza -dl`         | List specified files with directories as entries, in a long list           |
+| `lS`   | `eza -l -ssize`   | List files as a long list, sorted by size                                  |
+| `lT`   | `eza -l -snewest` | List files as a long list, sorted by date (newest last)                    |

+ 62 - 0
plugins/eza/eza.plugin.zsh

@@ -0,0 +1,62 @@
+if ! (( $+commands[eza] )); then
+  print "zsh eza plugin: eza not found. Please install eza before using this plugin." >&2
+  return 1
+fi
+
+typeset -a _EZA_HEAD
+typeset -a _EZA_TAIL
+
+function _configure_eza() {
+  local _val
+  # Get the head flags
+  if zstyle -T ':omz:plugins:eza' 'show-group'; then
+    _EZA_HEAD+=("g")
+  fi
+  if zstyle -t ':omz:plugins:eza' 'header'; then
+    _EZA_HEAD+=("h")
+  fi
+  zstyle -s ':omz:plugins:eza' 'size-prefix' _val
+  case "${_val:l}" in
+    binary)
+      _EZA_HEAD+=("b")
+      ;;
+    none)
+      _EZA_HEAD+=("B")
+      ;;
+  esac
+  # Get the tail long-options
+  if zstyle -t ':omz:plugins:eza' 'dirs-first'; then
+    _EZA_TAIL+=("--group-directories-first")
+  fi
+  if zstyle -t ':omz:plugins:eza' 'git-status'; then
+    _EZA_TAIL+=("--git")
+  fi
+  zstyle -s ':omz:plugins:eza' 'time-style' _val
+  if [[ $_val ]]; then
+    _EZA_TAIL+=("--time-style='$_val'")
+  fi
+}
+
+_configure_eza
+
+function _alias_eza() {
+  local _head="${(j::)_EZA_HEAD}$2"
+  local _tail="${(j: :)_EZA_TAIL}"
+  alias "$1"="eza${_head:+ -}${_head}${_tail:+ }${_tail}${3:+ }$3"
+}
+
+_alias_eza la   la
+_alias_eza ldot ld ".*"
+_alias_eza lD   lD
+_alias_eza lDD  lDa
+_alias_eza ll   l
+_alias_eza ls
+_alias_eza lsd  d
+_alias_eza lsdl dl
+_alias_eza lS   "l -ssize"
+_alias_eza lT   "l -snewest"
+
+unfunction _alias_eza
+unfunction _configure_eza
+unset _EZA_HEAD
+unset _EZA_TAIL