Capitulo 6: Shell Integration

Por: SiempreListo
ghosttyterminalshellbashzshfishintegracion

Capitulo 6: Shell Integration

La shell integration es una de las funcionalidades mas potentes de Ghostty. Permite que la terminal entienda la estructura de tu shell: donde esta el prompt, que comandos se ejecutan y cual es el directorio actual.

Anterior: Temas y apariencia | Siguiente: Tips avanzados

Como funciona

Ghostty inyecta automaticamente scripts de integracion cuando detecta un shell compatible. Estos scripts usan secuencias de escape OSC para comunicar informacion del shell a la terminal.

Shells soportados

Deteccion automatica

Por defecto, Ghostty detecta tu shell y carga la integracion:

shell-integration = detect

Valores posibles:

ValorComportamiento
detectDetecta automaticamente el shell
bashFuerza integracion con bash
zshFuerza integracion con zsh
fishFuerza integracion con fish
noneDesactiva la integracion

Verificar que funciona

En los logs de Ghostty, busca el mensaje:

shell integration automatically injected shell=zsh

Configuracion manual

La integracion automatica solo funciona para el shell inicial. Si cambias de shell dentro de Ghostty, necesitas configuracion manual.

Bash

Agrega al inicio de ~/.bashrc:

if [ -n "${GHOSTTY_RESOURCES_DIR}" ]; then
    builtin source "${GHOSTTY_RESOURCES_DIR}/shell-integration/bash/ghostty.bash"
fi

Nota importante: El /bin/bash incluido en macOS (version 3.2) no soporta la integracion automatica. Instala una version moderna con Homebrew:

brew install bash

Zsh

Agrega al inicio de ~/.zshrc:

if [[ -n "${GHOSTTY_RESOURCES_DIR}" ]]; then
    source "${GHOSTTY_RESOURCES_DIR}/shell-integration/zsh/ghostty-integration"
fi

Fish

Agrega a ~/.config/fish/config.fish:

if set -q GHOSTTY_RESOURCES_DIR
    source "$GHOSTTY_RESOURCES_DIR/shell-integration/fish/vendor_conf.d/ghostty-shell-integration.fish"
end

Funcionalidades de la shell integration

Jump-to-prompt

Permite saltar entre prompts en el historial de la terminal. Solo funciona con la shell integration activa.

Atajos por defecto:

# macOS
Cmd + Up       # Prompt anterior
Cmd + Down     # Prompt siguiente

Configuracion personalizada:

keybind = ctrl+shift+up=jump_to_prompt:-1
keybind = ctrl+shift+down=jump_to_prompt:1

El valor negativo salta hacia arriba (prompts anteriores) y el positivo hacia abajo.

Directorio de trabajo

La shell integration reporta el directorio actual a Ghostty. Esto permite:

Cursor dinamico

El cursor cambia de forma segun el contexto:

Esta funcionalidad se controla con:

shell-integration-features = cursor

Confirmacion inteligente al cerrar

Si el cursor esta en el prompt (sin proceso ejecutandose), Ghostty cierra el split sin pedir confirmacion. Si hay un proceso activo, muestra un dialogo de confirmacion.

Seleccion de salida de comandos

Con Ctrl+Click (o Cmd+Click en macOS) sobre un comando, puedes seleccionar toda su salida.

Click para mover cursor

Con Alt+Click (u Option+Click en macOS) en el prompt, el cursor se mueve a esa posicion. Util para editar comandos largos.

Features configurables

La opcion shell-integration-features permite activar o desactivar funcionalidades individuales:

shell-integration-features = cursor,sudo,title

Opciones disponibles

FeatureDescripcion
cursorCursor dinamico segun contexto
sudoWrapper de sudo para preservar TERMINFO
titleActualiza el titulo de la ventana
ssh-envPreserva variables de entorno en SSH
ssh-terminfoInstala terminfo en servidores SSH

Desactivar una feature especifica

Usa el prefijo no-:

shell-integration-features = cursor,no-sudo,title

Sudo wrapping

Cuando ejecutas sudo, el wrapper de Ghostty preserva la variable TERMINFO para que las secuencias de escape funcionen correctamente dentro de sesiones sudo.

# Sin wrapper: puede haber problemas de renderizado
sudo htop

# Con wrapper de Ghostty: funciona correctamente
# (automatico si shell-integration-features incluye sudo)

El wrapper detecta cuando usas sudoedit o sudo -e y omite la preservacion de TERMINFO en esos casos.

SSH integration

Ghostty puede configurar automaticamente las sesiones SSH para una mejor experiencia:

ssh-env

Preserva variables de entorno relevantes durante conexiones SSH:

shell-integration-features = ssh-env

ssh-terminfo

Instala automaticamente el terminfo de Ghostty en servidores remotos para una correcta renderizacion:

shell-integration-features = ssh-terminfo

Esto evita el comun problema de unknown terminal type al conectarse por SSH a servidores que no conocen Ghostty.

Solucion de problemas

La integracion no se activa

  1. Verifica que shell-integration no este en none
  2. Revisa los logs de Ghostty para mensajes de error
  3. Si usas un framework como oh-my-zsh o Starship, asegura que la integracion se cargue antes

Conflicto con Starship/oh-my-zsh

Algunos frameworks de shell pueden interferir con la integracion. Si tienes problemas:

# Carga la integracion de Ghostty primero en .zshrc
if [[ -n "${GHOSTTY_RESOURCES_DIR}" ]]; then
    source "${GHOSTTY_RESOURCES_DIR}/shell-integration/zsh/ghostty-integration"
fi

# Luego carga oh-my-zsh u otros frameworks
source $ZSH/oh-my-zsh.sh

Bash de macOS

El bash de fabrica de macOS (3.2) no soporta la integracion. Solucion:

brew install bash
# Agregar /opt/homebrew/bin/bash a /etc/shells
# Cambiar shell por defecto
chsh -s /opt/homebrew/bin/bash

Anterior: Temas y apariencia | Siguiente: Tips avanzados