From 6bccd98b89a8a88f763a491f09a3a0c6cb6814b8 Mon Sep 17 00:00:00 2001 From: Daniele Pintore Date: Sat, 12 Jul 2025 01:43:32 +0200 Subject: [PATCH] now config alias is a function, autocomplete for paths is now working --- .config/zsh/conf.d/03_auto_completition.zsh | 9 +++++++-- .config/zsh/conf.d/06_aliases.zsh | 3 --- .config/zsh/functions/config.zsh | 22 +++++++++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 .config/zsh/functions/config.zsh diff --git a/.config/zsh/conf.d/03_auto_completition.zsh b/.config/zsh/conf.d/03_auto_completition.zsh index 7a18283..e5bf75b 100644 --- a/.config/zsh/conf.d/03_auto_completition.zsh +++ b/.config/zsh/conf.d/03_auto_completition.zsh @@ -7,8 +7,13 @@ if [[ -o interactive ]]; then zstyle ':completion:*' menu select zmodload zsh/complist compinit - _comp_options+=(globdots) # Include hidden files. - unset -f setup_completion # cleanup the function + _comp_options+=(globdots) # Include hidden files. + unset -f setup_completion # cleanup the function + + # dotfiles manager autocompletition trick for add and rm command + # definition on the config functions file (functions/config.zsh) + compdef _config config + # Use vim keys in tab complete menu: bindkey -M menuselect 'h' vi-backward-char bindkey -M menuselect 'k' vi-up-line-or-history diff --git a/.config/zsh/conf.d/06_aliases.zsh b/.config/zsh/conf.d/06_aliases.zsh index 462c7da..ed4af74 100644 --- a/.config/zsh/conf.d/06_aliases.zsh +++ b/.config/zsh/conf.d/06_aliases.zsh @@ -14,6 +14,3 @@ alias podrun='podman run -v $(pwd):/chall/ --rm -it registry.fedoraproject.org/f ## pwninit alias alias pwninit='pwninit --template-path /home/daniele/.config/pwninit/pwninit-template.py' - -## alias for managing dotfiles -alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME' diff --git a/.config/zsh/functions/config.zsh b/.config/zsh/functions/config.zsh new file mode 100644 index 0000000..af779d8 --- /dev/null +++ b/.config/zsh/functions/config.zsh @@ -0,0 +1,22 @@ +config() { + /usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME "$@" +} + +# 3) custom completer +_config() { + local context state line + + if ! (( $+functions[_git] )); then + autoload -U _git + fi + + if [[ $words[2] == "add" || $words[2] == "rm" ]]; then + _files + else + # Set up git completion context + local -x GIT_DIR="$HOME/.cfg" + local -x GIT_WORK_TREE="$HOME" + service=git + _git "$@" + fi +}