Terminal
El panel del terminal (`Ctrl+``) ejecuta tu shell dentro del editor, con las pestañas y divisiones que esperarías y unas cuantas cosas que solo un editor puede hacer.
Divisiones y pestañas
Una pestaña contiene uno o varios terminales uno al lado del otro. Ctrl+\`` abre el panel, el+` de su
cabecera abre otra pestaña, y los comandos de división (Dividir en vertical, Dividir a la izquierda,
Dividir a la derecha, Intercambiar divisiones) dividen la pestaña en la que estás. Cada terminal tiene su propia
shell, su propio historial de desplazamiento y su propia barra de búsqueda.
Hacer clic en lo que imprimió una herramienta
Cmd/Ctrl y un clic sobre una ruta abre el fichero, en la línea y la columna si la herramienta
las imprimió. Se entienden los formatos de cargo, clang, go, eslint (src/main.rs:12:5), tsc y
msbuild (src/a.ts(3,5)), las trazas de Python (File "app.py", line 12), las URL file:// y
las rutas sueltas; las direcciones web se abren en el navegador. Una ruta solo es un enlace si
el fichero existe de verdad, resuelto respecto a la carpeta del terminal y después respecto al
proyecto.
Buscar en el historial
Cmd/Ctrl+F con el foco en el terminal abre una barra de búsqueda encima. Busca en todo lo que
el terminal ha imprimido, no solo en lo que hay en pantalla: cada coincidencia se resalta, la
actual se distingue, y Enter / Shift+Enter las recorren, desplazando la cuadrícula hasta cada
una y dando la vuelta en cualquiera de los extremos. Esc cierra la barra. Lo que esté seleccionado en el
terminal al abrirla es lo que busca, y la búsqueda no distingue mayúsculas salvo que
la consulta lleve alguna. Es texto, no una expresión regular: a.rs:12 encuentra eso mismo.
Integración con la shell
Un terminal solo ve bytes, así que no puede distinguir un prompt de la salida. Las shells pueden decirlo, y GraphoOS imprime el script que les enseña a hacerlo:
# ~/.zshrc
eval "$(graphoos shell-integration zsh)"
# ~/.bashrc
eval "$(graphoos shell-integration bash)"
# ~/.config/fish/config.fish
graphoos shell-integration fish | source
Envía las marcas de la convención OSC 133 (dónde empieza el prompt, qué se escribió, dónde empieza la salida y el código de salida) y OSC 7 (la carpeta en la que está la shell). No imprimen nada, y una shell sin ellas se comporta exactamente igual que antes.
Con ella puesta, el editor sabe:
- Dónde está la shell. Una ruta impresa por un programa que se ejecuta en otra carpeta se resuelve respecto a esa carpeta, así que sus enlaces funcionan.
- Qué se ejecutó y cómo acabó. Terminal: repetir un comando reciente lista los comandos del terminal activo, del más reciente al más antiguo, con el código de salida de los que fallaron, y ejecuta el que elijas.
Aspecto
terminal.font-family, terminal.font-size y terminal.line-height
toman por defecto los del editor. terminal.letter-spacing añade píxeles
entre las letras, terminal.cursor-blinking hace parpadear el cursor
mientras la terminal tiene el foco y terminal.font-ligatures deja que una
fuente con ligaduras una =>, != o -> (apagado por defecto, porque
cambia cómo se ven las letras).
Una fuente no tiene por qué estar instalada en el sistema: ponla en la
carpeta fonts de la carpeta de datos (junto a settings.toml) y estará
la próxima vez que arranque el editor, solo para este editor.
La pestaña enseña una campana unos segundos cuando un programa la hace
sonar, y cuánto lleva un programa cuando lo dice con la secuencia de
progreso (OSC 9;4, como winget y systemd): 42 %, ✕ si falló, ⏸ en
pausa, … si no se sabe cuánto falta. Se quita al terminar el comando.
Lo que los programas le pueden pedir
Lo que un programa escribe en la terminal y lo que la terminal hace con ello
(comprobado en la app: tools/terminal_mouse_smoke.py,
tools/terminal_bell_progress_smoke.py, tools/terminal_osc52_smoke.py,
tools/terminal_flood_measure.py, los estilos en tools/terminal_styles_look.py).
| Secuencia | Qué pide | Qué pasa |
|---|---|---|
CSI 3 m, 4 m (y 4:2–4:5), 9 m, 8 m |
cursiva, subrayado (simple, doble, ondulado, punteado, discontinuo), tachado, oculto | se pinta |
CSI ? 1000/1002/1003 h con 1006 h o sin él |
el ratón: clics, arrastre, cualquier movimiento; forma SGR o la antigua | se le envía al programa (vim, htop, less, tmux); con Mayús seleccionas tú |
CSI ? 1007 h (desplazamiento alternativo) |
la rueda como flechas en programas a pantalla completa | less y man se desplazan con la rueda |
CSI ? 1004 h |
entrar y salir del foco | se envía ESC [I / ESC [O |
CSI n SP q |
la forma del cursor (bloque, barra, subrayado) | se pinta como pide (vim: barra al insertar) |
BEL |
la campana | 🔔 en la pestaña unos segundos |
OSC 0 / OSC 2 |
el título | el título de la pestaña (gana el nombre que le hayas dado) |
OSC 7 |
el directorio | las divisiones y enlaces nuevos empiezan ahí |
OSC 8 |
un enlace | Cmd+clic (Ctrl+clic) lo abre: solo ficheros, web y correo |
OSC 9;4 |
progreso | 42 %, ✕, ⏸ o … junto al nombre de la pestaña |
OSC 52 |
copiar al portapapeles | se copia; leer el portapapeles no se contesta |
OSC 133 / OSC 633 |
las marcas de la shell | marcas verde/roja, Cmd+↑/↓ de comando en comando, la línea exacta del comando |
salida sin fin (yes 10 s, cat de 100 MB, 3 M de líneas) |
— | el editor sigue respondiendo en 0,02–0,03 s; 100 MB en 1,2 s |
Perfiles
[terminal.profiles] en los ajustes nombra las shells que se ofrecen, y
[terminal.default-profile] elige una por sistema operativo. Open a New Terminal con un
perfil está en la paleta, en Terminal Profile.
Fuente: docs/es/terminal.md