From 678bbdefbc8f3461b53e4356a178a519c4f19c5f Mon Sep 17 00:00:00 2001 From: Ajeet D'Souza <98ajeet@gmail.com> Date: Thu, 9 Jan 2025 02:19:20 +0530 Subject: [PATCH] Use POSIX implementation for ksh shells Only ksh93 supports DEBUG traps, and the rest don't have any features that can be used for setting up hooks. May as well use the POSIX implementation for all ksh shells. --- README.md | 15 ---- contrib/completions/_zoxide | 2 +- contrib/completions/zoxide.bash | 2 +- contrib/completions/zoxide.ts | 1 - man/man1/zoxide-init.1 | 7 -- src/cmd/cmd.rs | 2 +- src/cmd/init.rs | 3 +- src/shell.rs | 37 ---------- templates/ksh.txt | 118 -------------------------------- 9 files changed, 4 insertions(+), 183 deletions(-) delete mode 100644 templates/ksh.txt diff --git a/README.md b/README.md index cabf3013..2f0140f7 100644 --- a/README.md +++ b/README.md @@ -242,21 +242,6 @@ zoxide can be installed in 4 easy steps: -
- Ksh - - > Add this to the **end** of your config file (usually `~/.kshrc`): - > - > ```sh - > # ksh93 - > eval "$(zoxide init ksh)" - > - > # mksh, oksh, etc. - > eval "$(zoxide init ksh --hook=prompt)" - > ``` - -
-
Nushell diff --git a/contrib/completions/_zoxide b/contrib/completions/_zoxide index e3452ac1..69882b41 100644 --- a/contrib/completions/_zoxide +++ b/contrib/completions/_zoxide @@ -112,7 +112,7 @@ _arguments "${_arguments_options[@]}" : \ '--help[Print help]' \ '-V[Print version]' \ '--version[Print version]' \ -':shell:(bash elvish fish ksh nushell posix powershell xonsh zsh)' \ +':shell:(bash elvish fish nushell posix powershell xonsh zsh)' \ && ret=0 ;; (query) diff --git a/contrib/completions/zoxide.bash b/contrib/completions/zoxide.bash index 6bc165a6..73dbd45f 100644 --- a/contrib/completions/zoxide.bash +++ b/contrib/completions/zoxide.bash @@ -165,7 +165,7 @@ _zoxide() { return 0 ;; zoxide__init) - opts="-h -V --no-cmd --cmd --hook --help --version bash elvish fish ksh nushell posix powershell xonsh zsh" + opts="-h -V --no-cmd --cmd --hook --help --version bash elvish fish nushell posix powershell xonsh zsh" if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) return 0 diff --git a/contrib/completions/zoxide.ts b/contrib/completions/zoxide.ts index 1e987b12..0200591b 100644 --- a/contrib/completions/zoxide.ts +++ b/contrib/completions/zoxide.ts @@ -182,7 +182,6 @@ const completion: Fig.Spec = { "bash", "elvish", "fish", - "ksh", "nushell", "posix", "powershell", diff --git a/man/man1/zoxide-init.1 b/man/man1/zoxide-init.1 index b637295c..387c3182 100644 --- a/man/man1/zoxide-init.1 +++ b/man/man1/zoxide-init.1 @@ -30,13 +30,6 @@ Add this to the \fBend\fR of your config file (usually \fBzoxide init fish | source\fR .fi .TP -.B ksh -Add this to the \fBend\fR of your config file (usually \fB~/.kshrc\fR): -.sp -.nf - \fBeval $(zoxide init ksh)\fR -.fi -.TP .B nushell Add this to the \fBend\fR of your env file (find it by running \fB$nu.env-path\fR in Nushell): diff --git a/src/cmd/cmd.rs b/src/cmd/cmd.rs index 3b05a60b..61ecbaa2 100644 --- a/src/cmd/cmd.rs +++ b/src/cmd/cmd.rs @@ -137,8 +137,8 @@ pub enum InitShell { Bash, Elvish, Fish, - Ksh, Nushell, + #[clap(alias = "ksh")] Posix, Powershell, Xonsh, diff --git a/src/cmd/init.rs b/src/cmd/init.rs index 70bdca04..3f79ed66 100644 --- a/src/cmd/init.rs +++ b/src/cmd/init.rs @@ -6,7 +6,7 @@ use rinja::Template; use crate::cmd::{Init, InitShell, Run}; use crate::config; use crate::error::BrokenPipeHandler; -use crate::shell::{Bash, Elvish, Fish, Ksh, Nushell, Opts, Posix, Powershell, Xonsh, Zsh}; +use crate::shell::{Bash, Elvish, Fish, Nushell, Opts, Posix, Powershell, Xonsh, Zsh}; impl Run for Init { fn run(&self) -> Result<()> { @@ -19,7 +19,6 @@ impl Run for Init { InitShell::Bash => Bash(opts).render(), InitShell::Elvish => Elvish(opts).render(), InitShell::Fish => Fish(opts).render(), - InitShell::Ksh => Ksh(opts).render(), InitShell::Nushell => Nushell(opts).render(), InitShell::Posix => Posix(opts).render(), InitShell::Powershell => Powershell(opts).render(), diff --git a/src/shell.rs b/src/shell.rs index 10e6235d..721553db 100644 --- a/src/shell.rs +++ b/src/shell.rs @@ -26,7 +26,6 @@ macro_rules! make_template { make_template!(Bash, "bash.txt"); make_template!(Elvish, "elvish.txt"); make_template!(Fish, "fish.txt"); -make_template!(Ksh, "ksh.txt"); make_template!(Nushell, "nushell.txt"); make_template!(Posix, "posix.txt"); make_template!(Powershell, "powershell.txt"); @@ -159,42 +158,6 @@ mod tests { .stderr(""); } - #[apply(opts)] - fn ksh_ksh(cmd: Option<&str>, hook: InitHook, echo: bool, resolve_symlinks: bool) { - let opts = Opts { cmd, hook, echo, resolve_symlinks }; - let source = Ksh(&opts).render().unwrap(); - Command::new("ksh").args(["-n", "-c", &source]).assert().success().stdout("").stderr(""); - } - - #[apply(opts)] - fn ksh_shellcheck(cmd: Option<&str>, hook: InitHook, echo: bool, resolve_symlinks: bool) { - let opts = Opts { cmd, hook, echo, resolve_symlinks }; - let source = Ksh(&opts).render().unwrap(); - - Command::new("shellcheck") - .args(["--enable=all", "-"]) - .write_stdin(source) - .assert() - .success() - .stdout("") - .stderr(""); - } - - #[apply(opts)] - fn ksh_shfmt(cmd: Option<&str>, hook: InitHook, echo: bool, resolve_symlinks: bool) { - let opts = Opts { cmd, hook, echo, resolve_symlinks }; - let mut source = Ksh(&opts).render().unwrap(); - source.push('\n'); - - Command::new("shfmt") - .args(["--diff", "--indent=4", "--language-dialect=mksh", "--simplify", "-"]) - .write_stdin(source) - .assert() - .success() - .stdout("") - .stderr(""); - } - #[apply(opts)] fn nushell_nushell(cmd: Option<&str>, hook: InitHook, echo: bool, resolve_symlinks: bool) { let opts = Opts { cmd, hook, echo, resolve_symlinks }; diff --git a/templates/ksh.txt b/templates/ksh.txt deleted file mode 100644 index 2f8fd06d..00000000 --- a/templates/ksh.txt +++ /dev/null @@ -1,118 +0,0 @@ -{%- let section = "# =============================================================================\n#" -%} -{%- let not_configured = "# -- not configured --" -%} - -# shellcheck shell=ksh - -{{ section }} -# Utility functions for zoxide. -# - -# pwd based on the value of _ZO_RESOLVE_SYMLINKS. -__zoxide_pwd() { -{%- if cfg!(windows) %} - \command cygpath -w "$(\builtin pwd -P)" -{%- else if resolve_symlinks %} - \command pwd -P -{%- else %} - \command pwd -L -{%- endif %} -} - -# cd + custom logic based on the value of _ZO_ECHO. -__zoxide_cd() { - # shellcheck disable=SC2164 - \command cd "$@" {%- if echo %} && __zoxide_pwd {%- endif %} -} - -{{ section }} -# Hook configuration for zoxide. -# - -{% match hook %} -{%- when InitHook::None -%} -{{ not_configured }} - -{%- when InitHook::Prompt -%} -# Hook to add new entries to the database. -__zoxide_hook() { - \command zoxide add -- "$(__zoxide_pwd || \builtin true)" -} - -# Initialize hook. -if [[ ${PS1:=} == "${PS1#*\$(__zoxide_hook)}" ]]; then - PS1="${PS1}\$(__zoxide_hook)" -fi - -{%- when InitHook::Pwd -%} -# Hook to add new entries to the database. -__zoxide_hook() { - __zoxide_retval="$?" - __zoxide_newpwd="$(__zoxide_pwd)" - if [[ ${__zoxide_oldpwd:-__zoxide_newpwd} != "${__zoxide_newpwd}" ]]; then - \command zoxide add -- "${__zoxide_newpwd}" - __zoxide_oldpwd="${__zoxide_newpwd}" - fi - return "${__zoxide_retval}" -} - -# Initialize hook. -__zoxide_trap="$(\command trap -p DEBUG)" -if [[ ${__zoxide_trap} != *'__zoxide_hook'* ]]; then - \command trap "__zoxide_hook;${__zoxide_trap#';'}" DEBUG -fi -{%- endmatch %} - -{{ section }} -# When using zoxide with --no-cmd, alias these internal functions as desired. -# - -# Jump to a directory using only keywords. -__zoxide_z() { - # shellcheck disable=SC2199 - if (($# == 0)); then - __zoxide_cd ~ - elif [[ ($# == 1) && $1 == '-' ]]; then - __zoxide_cd "${OLDPWD}" - elif [[ ($# == 1) && -d $1 ]]; then - __zoxide_cd "$1" - elif [[ ($# == 2) && $1 == '--' ]]; then - __zoxide_cd "$2" - else - # shellcheck disable=SC2312 - __zoxide_result="$(\command zoxide query --exclude "$(__zoxide_pwd)" -- "$@")" && - __zoxide_cd "${__zoxide_result}" - fi -} - -# Jump to a directory using interactive search. -__zoxide_zi() { - __zoxide_result="$(\command zoxide query --interactive -- "$@")" && __zoxide_cd "${__zoxide_result}" -} - -{{ section }} -# Commands for zoxide. Disable these using --no-cmd. -# - -{%- match cmd %} -{%- when Some with (cmd) %} - -\command unalias {{cmd}} >/dev/null 2>&1 || \true -{{cmd}}() { - __zoxide_z "$@" -} - -\command unalias {{cmd}}i >/dev/null 2>&1 || \true -{{cmd}}i() { - __zoxide_zi "$@" -} - -{%- when None %} - -{{ not_configured }} - -{%- endmatch %} - -{{ section }} -# To initialize zoxide, add this to your configuration (usually ~/.kshrc): -# -# eval "$(zoxide init ksh)"