| # Git integration action handlers | |
| # Action handler: Directly commit changes with AI-generated message | |
| # Usage: :commit [additional context] | |
| # Note: This action clears the buffer after execution | |
| function _forge_action_commit() { | |
| local additional_context="$1" | |
| local commit_message | |
| # Generate AI commit message | |
| echo | |
| # Force color output even when not connected to TTY | |
| # FORCE_COLOR: for indicatif spinner colors | |
| # CLICOLOR_FORCE: for colored crate text colors | |
| # Build commit command with optional additional context | |
| if [[ -n "$additional_context" ]]; then | |
| commit_message=$(FORCE_COLOR=true CLICOLOR_FORCE=1 $_FORGE_BIN commit --max-diff "$_FORGE_MAX_COMMIT_DIFF" $additional_context) | |
| else | |
| commit_message=$(FORCE_COLOR=true CLICOLOR_FORCE=1 $_FORGE_BIN commit --max-diff "$_FORGE_MAX_COMMIT_DIFF") | |
| fi | |
| _forge_reset | |
| } | |
| # Action handler: Previews AI-generated commit message | |
| # Usage: :commit-preview [additional context] | |
| function _forge_action_commit_preview() { | |
| local additional_context="$1" | |
| local commit_message | |
| # Generate AI commit message | |
| echo | |
| # Force color output even when not connected to TTY | |
| # FORCE_COLOR: for indicatif spinner colors | |
| # CLICOLOR_FORCE: for colored crate text colors | |
| # Build commit command with optional additional context | |
| if [[ -n "$additional_context" ]]; then | |
| commit_message=$(FORCE_COLOR=true CLICOLOR_FORCE=1 $_FORGE_BIN commit --preview --max-diff "$_FORGE_MAX_COMMIT_DIFF" $additional_context) | |
| else | |
| commit_message=$(FORCE_COLOR=true CLICOLOR_FORCE=1 $_FORGE_BIN commit --preview --max-diff "$_FORGE_MAX_COMMIT_DIFF") | |
| fi | |
| # Proceed only if command succeeded | |
| if [[ -n "$commit_message" ]]; then | |
| # Check if there are staged changes to determine commit strategy | |
| if git diff --staged --quiet; then | |
| # No staged changes: commit all tracked changes with -a flag | |
| BUFFER="git commit -am ${(qq)commit_message}" | |
| else | |
| # Staged changes exist: commit only what's staged | |
| BUFFER="git commit -m ${(qq)commit_message}" | |
| fi | |
| # Move cursor to end of buffer for immediate execution | |
| CURSOR=${#BUFFER} | |
| # Refresh display to show the new command | |
| zle reset-prompt | |
| else | |
| _forge_reset | |
| fi | |
| } | |