diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-04-04 19:22:04 +0300 |
|---|---|---|
| committer | Can Celik <ogulcancelik@gmail.com> | 2026-04-05 01:23:06 +0300 |
| commit | 41dd733ca7123c9ac4bfc6c781697a660e95b052 (patch) | |
| tree | 3fc91815ca139ef2e0b281bba0abda4ef15175f4 /vendor/libghostty-vt/src/shell-integration/README.md | |
| parent | 55c138263e190a1e79d4b997bfb9397306c0ec1f (diff) | |
feat: finish ghostty pane backend integration
Diffstat (limited to 'vendor/libghostty-vt/src/shell-integration/README.md')
| -rw-r--r-- | vendor/libghostty-vt/src/shell-integration/README.md | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/vendor/libghostty-vt/src/shell-integration/README.md b/vendor/libghostty-vt/src/shell-integration/README.md new file mode 100644 index 00000000..590632da --- /dev/null +++ b/vendor/libghostty-vt/src/shell-integration/README.md @@ -0,0 +1,117 @@ +# Shell Integration Code + +This is the shell-specific shell-integration code that is +used for the shell-integration feature set that Ghostty +supports. + +This README is meant as developer documentation and not as +user documentation. For user documentation, see the main +README or [ghostty.org](https://ghostty.org/docs) + +## Implementation Details + +### Bash + +Automatic [Bash](https://www.gnu.org/software/bash/) shell integration works by +starting Bash in POSIX mode and using the `ENV` environment variable to load +our integration script (`bash/ghostty.bash`). This prevents Bash from loading +its normal startup files, which becomes our script's responsibility (along with +disabling POSIX mode). + +Bash shell integration can also be sourced manually from `bash/ghostty.bash`. +This also works for older versions of Bash. + +```bash +# Ghostty shell integration for Bash. This must be at the top of your bashrc! +if [ -n "${GHOSTTY_RESOURCES_DIR}" ]; then + builtin source "${GHOSTTY_RESOURCES_DIR}/shell-integration/bash/ghostty.bash" +fi +``` + +> [!NOTE] +> +> The version of Bash distributed with macOS (`/bin/bash`) does not support +> automatic shell integration. You'll need to manually source the shell +> integration script (as shown above). You can also install a standard +> version of Bash from Homebrew or elsewhere and set it as your shell. + +### Elvish + +For [Elvish](https://elv.sh), `$GHOSTTY_RESOURCES_DIR/src/shell-integration` +contains an `./elvish/lib/ghostty-integration.elv` file. + +Elvish, on startup, searches for paths defined in `XDG_DATA_DIRS` +variable for `./elvish/lib/*.elv` files and imports them. They are thus +made available for use as modules by way of `use <filename>`. + +Ghostty launches Elvish, passing the environment with `XDG_DATA_DIRS` prepended +with `$GHOSTTY_RESOURCES_DIR/src/shell-integration`. It contains +`./elvish/lib/ghostty-integration.elv`. The user can then import it +by `use ghostty-integration` every time after shell startup or +autostart integration in `$XDG_CONFIG_HOME/elvish/rc.elv`, +which will run the integration routines. + +If you decide to autostart `ghostty-integration` with `rc.elv`, you should +detect whether the terminal is Ghostty or not. To do this, add this to the end +of your `rc.elv` file: + +```elvish +if (eq $E:TERM "xterm-ghostty") { + try { use ghostty-integration } catch { } +} +``` + +The [Elvish](https://elv.sh) shell integration is supported by +the community and is not officially supported by Ghostty. We distribute +it for ease of access and use but do not provide support for it. +If you experience issues with the Elvish shell integration, I welcome +any contributions to fix them. Thank you! + +### Fish + +For [Fish](https://fishshell.com/), Ghostty prepends to the +`XDG_DATA_DIRS` directory. Fish automatically loads configuration +files in `<XDG_DATA_DIR>/fish/vendor_conf.d/*.fish` on startup, +allowing us to automatically integrate with the shell. For details +on the Fish startup process, see the +[Fish documentation](https://fishshell.com/docs/current/language.html). + +### Nushell + +For [Nushell](https://www.nushell.sh/), Ghostty prepends to the +`XDG_DATA_DIRS` directory, making the `ghostty` module available through +Nushell's vendor autoload mechanism. Ghostty then automatically imports +the module using the `-e "use ghostty *"` flag when starting Nushell. + +Nushell provides many shell features itself, such as `title` and `cursor`, +so our integration focuses on Ghostty-specific features like `sudo`, +`ssh-env`, and `ssh-terminfo`. + +The shell integration is automatically enabled when running Nushell in Ghostty, +but you can also load it manually is shell integration is disabled: + +```nushell +source $GHOSTTY_RESOURCES_DIR/shell-integration/nushell/vendor/autoload/ghostty.nu +use ghostty * +``` + +### Zsh + +Automatic [Zsh](https://www.zsh.org/) integration works by temporarily setting +`ZDOTDIR` to our `zsh` directory. An existing `ZDOTDIR` environment variable +value will be retained and restored after our shell integration scripts are +run. + +However, if `ZDOTDIR` is set in a system-wide file like `/etc/zshenv`, it will +override Ghostty's `ZDOTDIR` value, preventing the shell integration from being +loaded. In this case, the shell integration needs to be loaded manually. + +To load the Zsh shell integration manually: + +```zsh +if [[ -n $GHOSTTY_RESOURCES_DIR ]]; then + source "$GHOSTTY_RESOURCES_DIR"/shell-integration/zsh/ghostty-integration +fi +``` + +Shell integration requires Zsh 5.1+. |
