From 7c39d7c9d9fc8532c497bf05a6f45473e11c24dd Mon Sep 17 00:00:00 2001 From: Zhengshou Lai Date: Mon, 13 Apr 2026 11:07:37 +0800 Subject: [PATCH] feat(make): auto install/uninstall shell completions Add _install-completions and _uninstall-completions targets to Makefile: - Detect shell (zsh/bash) and generate appropriate completion files - Install to ~/.local/bin/completions/ on make install - Remove completions on make uninstall - Integrate with existing update/upgrade commands --- Makefile | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 83a412e..e36aaee 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,16 @@ ROOT_DIR := $(shell pwd) VENV_MYCLAUDE := $(ROOT_DIR)/.venv/bin/myclaude USER_LOCAL_MYCLAUDE := $(HOME)/.local/bin/myclaude +COMP_DIR := $(HOME)/.local/bin/completions +SHELL_NAME := $(notdir $(SHELL)) -.PHONY: help install uninstall _symlink-myclaude +.PHONY: help install uninstall _symlink-myclaude _install-completions _uninstall-completions help: @echo "Usage: make [target]" @echo "" - @echo " install Sync venv (uv or pip), symlink $(USER_LOCAL_MYCLAUDE) -> .venv/bin/myclaude" - @echo " uninstall Remove $(USER_LOCAL_MYCLAUDE) if it is a symlink to this repo" + @echo " install Sync venv, symlink bin, install completions" + @echo " uninstall Remove bin and completions" install: @cd "$(ROOT_DIR)" && \ @@ -19,6 +21,7 @@ install: .venv/bin/pip install -e .; \ fi @$(MAKE) _symlink-myclaude + @$(MAKE) _install-completions _symlink-myclaude: @test -x "$(VENV_MYCLAUDE)" || { echo "error: missing $(VENV_MYCLAUDE)"; exit 1; } @@ -26,5 +29,21 @@ _symlink-myclaude: @ln -sf "$(VENV_MYCLAUDE)" "$(USER_LOCAL_MYCLAUDE)" @echo "Linked $(USER_LOCAL_MYCLAUDE) -> $(VENV_MYCLAUDE)" -uninstall: +_install-completions: + @mkdir -p "$(COMP_DIR)" +ifeq ($(SHELL_NAME),zsh) + @_MYCLAUDE_COMPLETE=zsh_source myclaude > "$(COMP_DIR)/_myclaude" 2>/dev/null && \ + echo "Installed zsh completion: $(COMP_DIR)/_myclaude" || \ + echo "Warning: failed to generate zsh completion" +else ifeq ($(SHELL_NAME),bash) + @_MYCLAUDE_COMPLETE=bash_source myclaude > "$(COMP_DIR)/myclaude.bash" 2>/dev/null && \ + echo "Installed bash completion: $(COMP_DIR)/myclaude.bash" || \ + echo "Warning: failed to generate bash completion" +endif + +uninstall: _uninstall-completions @ROOT_DIR="$(ROOT_DIR)" python3 "$(ROOT_DIR)/scripts/rm_user_local_myclaude.py" + +_uninstall-completions: + @rm -f "$(COMP_DIR)/_myclaude" "$(COMP_DIR)/myclaude.bash" + @echo "Removed completions"