feat: Improve --install-shortcut to handle existing keybindings

Enhanced install-shortcut to:
- Detect if 'bind a' is already used in tmux config
- Show existing binding and ask user for action
- Allow replacing existing binding or choosing different key
- Support custom keys (e.g., Ctrl+A+B, Ctrl+A+C, etc.)

This prevents conflicts with user's existing tmux configuration.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-16 06:58:44 +00:00
co-authored by Claude Haiku 4.5
parent 4f846929c6
commit ed4d8500b9
+39 -3
View File
@@ -462,11 +462,42 @@ class ClaudeCLI:
content = tmux_conf.read_text()
# Check if already configured
# Check if already configured for autoclaude
if 'autoclaude-toggle' in content:
self.print_info("Shortcut already configured in ~/.tmux.conf")
return
# Check if 'bind a' is already used by something else
import re
if re.search(r'^\s*bind\s+a\s+', content, re.MULTILINE):
self.print_warning("The key 'a' is already bound in your tmux config")
self.print_info("Current binding:")
for line in content.split('\n'):
if re.search(r'^\s*bind\s+a\s+', line):
print(f" {line.strip()}")
print()
self.print_info("Options:")
print(" 1. Replace the existing binding")
print(" 2. Use a different key")
print(" 3. Cancel installation")
choice = input(f"\n{Colors.BOLD}Choose option (1-3): {Colors.ENDC}")
if choice == '1':
# Remove existing 'bind a' line
lines = content.split('\n')
lines = [l for l in lines if not re.search(r'^\s*bind\s+a\s+', l)]
content = '\n'.join(lines)
elif choice == '2':
key = input(f"{Colors.BOLD}Enter key to use (e.g., 'b', 'c'): {Colors.ENDC}")
if len(key) != 1 or not key.isalpha():
self.print_error("Invalid key. Must be a single letter.")
return
# Continue with the custom key
return self._add_shortcut_binding(tmux_conf, content, key)
else:
self.print_info("Installation cancelled")
return
# Get the full path to autoclaude-toggle script
script_path = Path(__file__).parent.parent.parent / '.local' / 'bin' / 'autoclaude-toggle'
if not script_path.exists():
@@ -476,11 +507,16 @@ class ClaudeCLI:
self.print_error(f"autoclaude-toggle script not found")
return
self._add_shortcut_binding(tmux_conf, content, 'a')
def _add_shortcut_binding(self, tmux_conf: Path, content: str, key: str):
script_path = Path.home() / '.local' / 'bin' / 'autoclaude-toggle'
# Add the keybinding to tmux config
binding = f'\n# Toggle autoclaude automation for active pane and show status\nbind a run-shell "{script_path}"\n'
binding = f'\n# Toggle autoclaude automation for active pane and show status\nbind {key} run-shell "{script_path}"\n'
tmux_conf.write_text(content + binding)
self.print_success(f"Added Ctrl+A+A shortcut to ~/.tmux.conf")
self.print_success(f"Added Ctrl+A+{key.upper()} shortcut to ~/.tmux.conf")
self.print_info("Reload tmux config with: tmux source-file ~/.tmux.conf")
self.print_info("Or restart your tmux session")