Man console_codes (4): escape de la consola Linux y secuencias de escape
La consola Linux tiene un gran conjunto de controles para terminales VT102 y ECMA-48/ISO 6429/ANSI X364, así como una serie de secuencias individuales para cambiar paleta de color, conversiones de juegos de caracteres, etc. Las tablas a continuación (segunda columna) indican el código mnemotécnico ECMA-48 o DEC (si este último está asignado a DEC) para esta función. Las secuencias sin un código mnemotécnico no pertenecen ni a ECMA-48 ni a VT102.El primer proceso que se ejecuta después del trabajo. proceso normal para generar información y enviar un flujo de caracteres de la consola al conductor (para su Salida real), es la traducción de códigos utilizados durante el funcionamiento normal en códigos utilizados para imprimir.
Si la consola se ejecuta en modo UTF-8, los bytes entrantes se organizan primero en Unicode de 16 bits. De lo contrario, cada byte se convierte según la tabla de búsqueda actual (que convierte los datos a Unicode). Mira la sección Conjuntos de caracteres abajo).
Normalmente, los valores Unicode se convierten en un índice de fuente, que se almacena en la memoria de vídeo de manera que la imagen correspondiente (que se encuentra en la ROM del vídeo) aparece en la pantalla. Tenga en cuenta que trabajar con Unicode (y el hardware informático actual) solo permite utilizar 512 imágenes diferentes simultáneamente.
Si el valor Unicode actual es un carácter de control, o si actualmente se está procesando una secuencia de escape, el valor se tratará de manera diferente. En lugar de convertir el valor en una fuente y mostrarlo como una imagen, se realizará una acción específica (como mover el cursor) u otra función de control. Ver la sección a continuación Gestión de consola Linux.
Es incorrecto especificar explícitamente secuencias de hardware de control de terminal en los programas. Linux admite la base de funcionalidad del terminal información terminológica(5). En lugar de ingresar secuencias de escape manualmente, probablemente querrás usar una biblioteca que use terminfo u otras utilidades para hacer el trabajo, como maldiciones(3), poner(1) o reiniciar(1).
Gestión de consola Linux
Esta sección describe todos los personajes de control y secuencias de escape que realizan equipos especiales(es decir, cualquier cosa que no sea simplemente imprimir un carácter en la posición actual del cursor) Consola de Linux.personajes de control
Un carácter se considera carácter de control si (antes de la conversión según la tabla de conversión) contiene uno de los 14 códigos: 00 (NUL), 07 (BEL), 08 (BS), 09 (HT), 0a (LF), 0b. (VT), 0c (FF), 0d (CR), 0e (SO), 0f (SI), 18 (CAN), 1a (SUB), 1b (ESC), 7f (DEL). Puede configurar el modo "mostrar caracteres de control" (ver más abajo), en cuyo caso los caracteres 07, 09, 0b, 18, 1a, 7f se mostrarán en la pantalla como imágenes. Por otro lado, en el modo UTF-8, todos los códigos del 00 al 1f se tratan como caracteres de control, independientemente del modo "mostrar caracteres de control".
Si se encuentra un carácter de control, se tiene en cuenta inmediatamente y no tiene ningún efecto adicional (incluso si estaba en medio de la secuencia de escape), y la secuencia de control continúa desde el siguiente carácter. Sin embargo, el carácter ESC que inicia una nueva secuencia de escape probablemente cancelará una secuencia anterior incompleta, y los caracteres CAN y SUB definitivamente finalizarán cualquier secuencia de escape. Los caracteres de control reconocidos son: BEL, BS, HT, LF, VT, FF, CR, SO, SI, CAN, SUB, ESC, DEL, CSI. Realizan acciones estándar para ellos:
BEL(0x07, ^G) emite un pitido; BS(0x08, ^H) elimina el carácter anterior (se desplaza una columna a la izquierda, pero no más allá del principio de la línea); HT(0x09, ^yo) pasa a la siguiente tabulación o al final de la línea si no se han establecido tabulaciones antes; LF (0x0A, ^J), TV (0x0B, ^K) y FF (0x0C, ^L) establece un avance de línea y LF/NL (en modo de nueva línea) realiza un retorno de carro; CR(0x0D, ^M) especifica un retorno de carro; Entonces(0x0E, ^norte) activa el juego de caracteres G1; SI(0x0F, ^O) alimenta el conjunto de símbolos G0; PUEDE (0x18, ^X) y SUB (0x1A, ^Z) interrumpir la secuencia de detección; ESC (0x1B, ^[ ) comenzar la secuencia de detección; Se ignora DEL (0x7F); CSI (0x9B) es equivalente a ESC [.
Secuencias ESC pero no CSI.
CESc | RIS | Reiniciar. |
ESCD | INDIANA | Traducción de líneas. |
ESC E | NEL | Nueva línea. |
ESCH | HTS | Establezca la tabulación en la columna actual. |
ESCM | RHODE ISLAND. | Avance de línea inverso. |
CES Z | DECIDIR | Definición específica de DEC. El núcleo devuelve la cadena ESC [? 6 c, alegando que es VT102. |
ESC 7 | DESCSC | Guarde el estado actual (coordenadas del cursor, atributos, conjuntos de caracteres especificados por G0, G1). |
ESC 8 | DECRC | Restaura el último estado ESC 7 guardado. |
ESC [ | CSI | Inicio de la secuencia de control |
ESC % | Iniciar una secuencia con una selección de conjunto de caracteres |
|
ESC % @ | selección predeterminada (ISO 646/ISO 8859-1) |
|
ESC %G | seleccione UTF-8 |
|
CES % 8 | seleccione UTF-8 (obsoleto) |
|
ESC #8 | CALCOMANÍA | Prueba de alineación de pantalla DEC: llena la pantalla con caracteres E. |
ESC ( | Iniciar secuencia con selección de juego de caracteres G0 |
|
ESC (B | selección predeterminada (conversión ISO 8859-1) |
|
ESC (0 | selección de grabación gráfica VT100 |
|
ESC (U | sin recodificar --- directamente en la ROM de caracteres |
|
ESC (K | grabación de usuario --- mapa |
|
cargado por utilidad mapascrn(8). |
||
ESC) | Iniciar secuencia con selección de juego de caracteres G1 |
|
(seguido de uno de los símbolos B, 0, U, K, como en G0). |
||
ESC > | DECPNM | Establecer el modo de entrada de números para el teclado adicional |
ESC = | DECPAM | Establecer modo de control para teclado adicional |
ESC ] | O.S.C. | (Debe ser: comando Sistema operativo, OSC) ESC ]P nrrggbb: establece la paleta, el parámetro especifica 7 caracteres hexadecimales después de la última P:-(. Aquí norte establece el color (0-15), y en rrggbb Se indican los valores rojo/verde/azul (0-255). ESC ] R: Restablecer paleta |
Secuencias ECMA-48 CSI
CSI (o ESC[) va seguido de una secuencia de parámetros, que son números decimales separados por punto y coma (el mayor es NPAR(16)). Un parámetro vacío o faltante es igual a cero. La secuencia de parámetros puede comenzar con un único signo de interrogación.
Sin embargo, después de CSI [ (o ESC [ [), se lee un solo carácter y se ignora el resto de la secuencia. (El objetivo de esto es no mostrar tecla de función).
El resultado de una secuencia CSI está determinado por su carácter final.
@ | PCI | Inserte N caracteres vacíos. |
A | CUUU | Mueva el cursor hacia arriba N líneas. |
B | RUMIA | |
C | CUF | |
D | CACHORRO | Mueva el cursor a las N columnas de la izquierda. |
mi | CNL | Mueva el cursor hacia abajo N líneas hasta la columna 1. |
F | CPL | Mueva el cursor hacia arriba N líneas hasta la columna 1. |
GRAMO | CHA | |
h | TAZA | Mover el cursor a la línea especificada y columna (comienza en 1,1). |
j | DE | Borra la pantalla (por defecto desde el cursor hasta el final de la pantalla). |
ESC [ 1 J: Borrar desde el inicio hasta el cursor. |
||
ESC [ 2 J: borra toda la pantalla. |
||
ESC [ 3 J: borra toda la pantalla, incluido el búfer |
||
desplazamiento hacia atrás (desde Linux 3.0). |
||
k | EL | Borrar línea (predeterminado desde el cursor hasta el final de la línea). |
ESC [ 1 K: borrar desde el principio de la línea hasta el cursor. |
||
ESC [ 2 K: borra toda la línea. |
||
l | ILLINOIS | Insertar N lineas vacias. |
METRO | D.L. | Eliminar N filas. |
PAG | DCH | Eliminar N caracteres en línea actual. |
X | ECH | Borra N caracteres en la línea actual. |
a | HPR | Mueva el cursor a las N columnas de la derecha. |
C | DA | Respuesta ESC [? 6c: “Soy el terminal VT102”. |
d | AVA | Mueva el cursor a la fila especificada de la columna actual. |
mi | VPR | Mueva el cursor hacia abajo N líneas. |
F | VPH | Mueva el cursor a la fila y columna especificadas. |
gramo | por confirmar | Sin parámetro: borra la tabulación actual. |
ESC [ 3 g: elimina todas las tabulaciones. |
||
h | SM | Modo de instalación (ver más abajo). |
yo | R.M. | Modo de reinicio (ver más abajo). |
metro | SGR | Configuración de atributos (ver más abajo). |
norte | DSR | Informe de estado (ver más abajo). |
q | DECLARAR | Control de indicadores en el teclado. |
ESC [ 0 q: apaga todos los indicadores |
||
ESC [ 1 q: habilitar Bloqueo de desplazamiento |
||
ESC [ 2 q: habilitar Num lock |
||
ESC [ 3 q: habilitar Bloq Mayús |
||
r | DECSTBM | Establecer área de desplazamiento; los parámetros serán las líneas superior e inferior. |
s | ? | Guardar la ubicación del cursor. |
tu | ? | Restaurar la ubicación del cursor. |
` | HPA | Mover el cursor a columna especificada línea actual. |
Configuración de las opciones de gráficos ECMA-48
ECMA-48 SGR secuencia de caracteres de control ESC [ parámetros m establece los atributos de la pantalla. Se pueden especificar varios atributos en una secuencia. Un parámetro vacío (entre un punto y coma, una línea inicial o un carácter final) se trata como cero.
parámetro | resultado |
0 | restablecer todos los atributos a sus valores predeterminados |
1 | poner en negrita |
2 | configurado en más brillante (simulado por color en la pantalla a color) |
4 | establecer subrayado (simulado por color en la pantalla a color) (los colores utilizados para simular el oscurecimiento o el subrayado se configuran usando ESC]...) |
5 | activar el parpadeo |
7 | habilitar la inversión de vídeo |
10 | restablecer la grabación seleccionada, el indicador de control de pantalla y alternar el metaindicador (en ECMA-48 especificado como "fuente principal"). |
11 | seleccione recodificación nula, configure el indicador de control de pantalla, reinicie el interruptor de metamarca (en ECMA-48 se especifica como la "primera fuente alternativa"). |
12 | seleccione recodificación nula, configure el indicador de control de pantalla, configure el interruptor de metamarca (en ECMA-48 se especifica como una "segunda fuente alternativa"). Cambiar el metamarcador hace que el bit más significativo del byte cambie antes de que se recodifica de acuerdo con la tabla de traducción. |
21 | habilitar la intensidad normal (en ECMA-48 se especifica como "doble subrayado") |
22 | enciende la intensidad normal |
24 | desactivar el subrayado |
25 | apagar el parpadeo |
27 | desactivar video invertido |
30 | establecer el color del carácter en negro |
31 | establecer el color del símbolo en rojo |
32 | establecer el color del símbolo en verde |
33 | instalar color marrón caracteres |
34 | instalar Color azul caracteres |
35 | establecer el color del símbolo en lila |
36 | establecer el color del símbolo en azul |
37 | instalar el color blanco caracteres |
38 | habilitar el subrayado, establecer el color de carácter predeterminado |
39 | desactivar el subrayado, establecer el color de carácter predeterminado |
40 | establecer el color de fondo en negro |
41 | establecer color de fondo rojo |
42 | establecer el color de fondo en verde |
43 | establecer el color de fondo en marrón |
44 | establecer el color de fondo en azul |
45 | establecer el color de fondo en lila |
46 | establecer el color de fondo en azul |
47 | establecer el color de fondo en blanco |
49 | establecer el color de fondo predeterminado |
Interruptores de modo ECMA-48
ESC [ 3 h DECCRM (desactivado predeterminado): muestra caracteres de control. ESC [ 4 h DECIM (desactivado predeterminado): habilita el modo de inserción. ESC [20 h LF/NL (predeterminado desactivado): genera automáticamente el código CR después de LF, VT o FF.
Comandos de salida de estado ECMA-48
ESC [ 5 n Mensaje de estado del dispositivo (DSR): La respuesta es ESC [ 0 n (terminal OK). ESC [ 6 n Mensaje de posición del cursor (CPR): La respuesta es ESC [ y ; X R, donde x,y son las coordenadas del cursor.
Secuencias de modo especial DEC (DECSET/DECRST)
ESC [ ? 1 h DECCKM (desactivado predeterminado): cuando está habilitado, las teclas del cursor envían el prefijo ESC O en lugar de ESC [. ESC [ ? 3 h DECCOLM (predeterminado = 80 columnas): modo de cambio de número de 80/132 columnas. El código fuente del controlador indica que este comando por sí solo no es suficiente; algunas utilidades de usuario que utilizan modos no estándar, como cambiar tamaño(8), debe cambiar los registros de configuración de la tarjeta de video de la consola. ESC [ ? 5 h DECSCNM (desactivado predeterminado): habilita el modo de vídeo invertido. ESC [ ? 6 h DECOM (desactivado predeterminado): si está habilitado, las coordenadas del cursor se consideran relativas a la esquina superior izquierda del área de desplazamiento. ESC [ ? 7 h DECAWM (habilitado de forma predeterminada): habilita el modo de transferencia automática. En este modo, un carácter gráfico ingresado después de la columna 80 (o 132, si DECCOLM está habilitado) se mueve al principio de la siguiente línea. ESC [ ? 8 h DECARM (habilitado de forma predeterminada): habilita el modo de repetición automática al ingresar desde el teclado. ESC [ ? 9 h X10 Informe del estado del mouse (desactivado predeterminado): establezca el modo de informe del estado del mouse en 1 (o restablezca a 0), consulte a continuación. ESC [ ? 25 h DECTECM (habilitado por defecto): Hace visible el cursor. ESC [ ? 1000 h X11 Informe del estado del mouse (desactivado predeterminado): establezca el modo de informe del estado del mouse en 2 (o restablezca a 0), consulte a continuación.
Secuencias CSI específicas de la consola Linux
Las siguientes secuencias no son ECMA-48 ni VT102. Sólo están disponibles en el controlador de la consola de Linux. Colores en parámetros SGR: 0 = negro, 1 = rojo, 2 = verde, 3 = marrón, 4 = azul, 5 = lila, 6 = celeste, 7 = blanco.
ESC[1; norte ] | Establecer color norte como color de subrayado |
ESC[2; norte ] | Establecer color norte a medida que el color se desvanece |
ESC [8] | Establezca el par de colores actual como atributos predeterminados. |
ESC[9; norte ] | Apague la pantalla después norte minutos. |
ESC [ 10 ; norte ] | Establecer frecuencia señal de sonido(en hercios). |
ESC[11; norte ] | Establezca la duración de la señal de sonido (en milisegundos). |
ESC[12; norte ] | Mueva la consola especificada delante de las demás. |
ESC [13] | Enciende la pantalla. |
ESC[14; norte ] | Configure el intervalo de apagado VESA (en minutos). |
ESC [15] | Mueve la consola anterior antes que las demás (desde Linux 2.6.0). |
ESC[16; norte ] | Establezca el intervalo de parpadeo del cursor en milisegundos (desde Linux 4.2) |
Conjuntos de caracteres
El kernel tiene información sobre 4 tipos de traducción de bytes a caracteres de la consola de pantalla. Estas cuatro tablas son: a) Latin1 -> PC, b) Gráficos VT100 -> PC, c) PC -> PC, d) definida por el usuario.Hay dos juegos de caracteres en el sistema, llamados G0 y G1, y uno de ellos es el juego de caracteres actual del sistema (originalmente G0). Ingresar ^norte hace que el conjunto G1 se vuelva actual, ^O hace que el conjunto G0 sea actual.
Estas variables G0 y G1 apuntan a la tabla de traducción y el usuario puede cambiarlas. Inicialmente señalan las tablas a) yb) respectivamente. Las secuencias ESC(B, ESC(0, ESC(U y ESC(K) hacen que G0 haga referencia a las tablas de traducción a), b), c) yd), respectivamente. Las secuencias ESC) B, ESC) 0, ESC) U y ESC) K hacen que G1 haga referencia a la tabla de traducción a), b), c) yd), respectivamente.
La secuencia ESC c reinicia el terminal, que es lo que le gustaría hacer cuando hay basura en la pantalla. La recomendación dada después de "echo ^V^O" solo hará que G0 sea el conjunto actual, pero no hay garantía de que G0 apunte a la tabla a). Algunas distribuciones tienen un programa. reiniciar(1), que simplemente ejecuta el comando “echo ^. El mapa de bits correspondiente a s se busca en la ROM de símbolos y se puede cambiar usando fuente(8).
Seguimiento del mouse
Para rastrear la actividad del mouse, se supone que el sistema debe emitir xterm(1) señales de estado del mouse compatibles. Debido a que el controlador de la consola no reconoce un dispositivo como un mouse (o un tipo similar), estas señales se envían al flujo de entrada de la consola solo cuando el controlador del terminal virtual recibe una señal ioctl para actualizar el estado del mouse. Estas señales ioctl deben ser generadas por aplicaciones de usuario habilitadas con mouse, como el servicio gpm(8).Parámetro para todos los creados. xterm(1) las secuencias de escape (señales del mouse) serán de un carácter, cuyo código es igual a significado+040. Por ejemplo, "!" corresponde a uno. El informe del sistema de coordenadas de la pantalla comienza en 1.
En el modo de compatibilidad X10, al presionar un botón se envían secuencias de escape que codifican tanto la ubicación del mouse como la información sobre el botón presionado. El modo se activa cuando ESC [? 9 h y se apaga cuando ESC [ ? 9 litros. Cuando presionas el botón xterm(1) envía ESC [M bxy(6 caracteres), donde b es el botón 1 y xey son las coordenadas xey cuando se presiona el botón. Estos son los mismos códigos que genera y emite el kernel.
EN modo normal Las secuencias de escape de seguimiento del mouse (que no se implementaron en Linux 2.0.24) se envían cuando se presiona y suelta el botón del mouse. También se envía información sobre el modificador. El modo se activa cuando ESC [? 1000 h y se apaga cuando se emite ESC [ 1000 l. Cuando presionas o sueltas un botón xterm(1) emite ESC [ M bxy. Dos bits menos significativos b contienen información sobre los botones: 0=MB1 presionado, 1=MB2 presionado, 2=MB3 presionado, 3=soltado. Los bits más importantes contienen información sobre qué modificadores se presionaron cuando se presionó el botón. Esta información se agrega al presionar: 4=Shift, 8=Meta, 16=Control. De nuevo: X Y y son las coordenadas xey del mouse cuando se procesa el evento. Las coordenadas de la esquina superior izquierda se consideran como (1,1).
Comparación con otros terminales
Muchos otros tipos de terminales se describen, como la consola Linux, como compatibles con VT100. A continuación discutiremos las diferencias entre la consola Linux y los otros dos tipos principales: DEC VT102 y xterm(1).Manejo de personajes de control
El tipo VT102 también reconoce los siguientes caracteres de control:
Se ignora NUL (0x00); ENQ (0x05) desencadena un mensaje de respuesta de devolución; DC1(0x11, ^Q, XON) reanuda la transmisión; DC3 (0x13, ^S, XOFF) hace que el VT100 ignore (y deje de transmitir) todos los códigos excepto XOFF y XON.
El procesamiento DC1/DC3 similar a VT100 se puede habilitar en el controlador del terminal.
ESC ] 0 ; TXT CALLE | Establecer el nombre del icono y el título de la ventana en TXT. |
ESC ] 1 ; TXT CALLE | Establecer el nombre del icono para que sea igual TXT. |
ESC ] 2 ; TXT CALLE | Establecer título de ventana en TXT. |
ESC ] 4 ; número; TXT CALLE | Establecer color ANSI número igual TXT. |
ESC ] 10 ; TXT CALLE | Establecer color de texto dinámico en TXT. |
ESC ] 4 6 ; nombre CALLE | Cambiar el archivo de registro a nombre(generalmente discapacitado |
en opciones de compilación) |
|
ESC ] 5 0 ; fn CALLE | Instalar fuente fn. |
Reconocido siguientes parámetros con un valor ligeramente modificado (el estado se conserva mejor, el comportamiento se acerca más al VT100/VT220):
ESC 7 DECSC | Guardar cursor | |
ESC 8 DICIEMBRE | Restaurar cursor |
También reconocido
También reconoce ESC% y proporciona una implementación UTF-8 más completa que la consola Linux.
secuencias CSI
versiones antiguas xterm(1), por ejemplo de X11R5, percibe el parpadeo de SGR como gordura de SGR. Las versiones más nuevas que implementan colores ANSI, como XFree86 3.1.2A de 1995, muestran el atributo de parpadeo en color. En las versiones modernas de xterm, el parpadeo de SGR se implementa como texto parpadeante, que también se puede convertir en color como alternativa a mostrar SGR. Las versiones originales de X11R6 no reconocían la configuración de color SGR hasta la versión X11R6.8, que incluía XFree86 xterm. También se entienden todas las secuencias ECMA-48 CSI CSI comprendidas por Linux. xterm, sin embargo en xterm(1) Hay varias secuencias de control ECMA-48 y DEC implementadas que Linux no comprende.
Programa xterm(1) reconoce todas las secuencias del modo especial DEC descritas anteriormente, pero ninguna de las secuencias del modo especial de Linux. Acerca de tus propios modos especiales xterm(1) se puede leer en el documento Secuencias de escape de Xterm, escrito por Edward Moy, Stephen Gildea y Thomas E. Dickey y disponible en la distribución X. Este documento, aunque abreviado, sigue siendo mucho más grande que esta página de manual. Resumen cronológico en
describe los cambios en xterm.
Programa vttest
demuestra muchas de estas secuencias de control. En la distribución original xterm(1) también contiene scripts de ejemplo que le enseñan cómo trabajar con otras propiedades.
NOTAS
La secuencia ESC 8 (DECRC) no puede restaurar el juego de caracteres modificado por ESC %.DEFECTOS
En la versión 2.0.23, el conjunto de CSI es incorrecto e ineficaz; los NUL no se ignoran en las secuencias de escape.Algunas versiones anteriores del kernel (posteriores a la 2.0) analizan secuencias de escape de 8 bits. Estos ("códigos de control C1") utilizan los códigos 128 a 159 para reemplazar ESC [, ESC] y secuencias de control iniciales similares de dos bytes. Existen parcialmente en núcleos modernos(o no están reconocidos o no funcionan debido al soporte UTF-8), no están completamente implementados y deben considerarse poco confiables.
Las secuencias de "modo especial" de Linux no respetan las reglas ECMA-48 para secuencias de escape en modo especial. En particular, terminan en ] y no utilizan el terminador estándar. Secuencia OSC (Establecer paleta) --- grande problema porque xterm(1) lo trata como una secuencia de escape que requiere un final de línea (ST). A diferencia de las secuencias fijador(1) que se ignorarán (ya que no son secuencias de escape válidas), la secuencia de paleta provocará un bloqueo xterm(1) (aunque presionar la tecla de retorno solucionará este problema). Para dar cabida a aplicaciones que tienen secuencias de escape de Linux codificadas, instale el recurso xterm(1) rotoLinuxOSC igual a verdadero.
EN versión antigua de este documento Se suponía que Linux reconocería la secuencia de escape ECMA-48 para la invisibilidad del texto. Ella es ignorada.
NOMBRE
console_codes - secuencias de control y ESC
consolas linux
DESCRIPCIÓN
La consola de Linux tiene un gran conjunto de herramientas de gestión.
Terminales VT102 y ECMA-48/ISO 6429/ANSI X3.64, así como
cierto número de secuencias privadas para
cambios en la paleta de colores, distribuciones de personajes
marcación, etc En las tablas siguientes (en el segundo
columna), se indica el código nemotécnico ECMA-48 o DEC
(si este último está asignado a DEC) de esta función.
Las secuencias sin un código mnemotécnico no pertenecen
ni a ECMA-48 ni a VT102.
El primer proceso que se ejecuta después del trabajo.
el proceso habitual de generar información y enviarla a
controlador de flujo de caracteres de la consola (para su real
salida), es la traducción de los códigos utilizados en condiciones normales.
trabajo, en códigos utilizados para imprimir.
Si la consola se ejecuta en modo UTF-8, los bytes entrantes
se organizan primero en Unicode de 16 bits. De lo contrario
cada byte se convierte según la tabla actual
distribución que convierte datos a Unicode. (Mirar
CONJUNTOS DE CARACTERES (sección siguiente).
Normalmente, los valores Unicode se convierten en un índice de fuente,
que se almacena en la memoria de vídeo de tal manera que
Aparece el glifo correspondiente (que se encuentra en la ROM del vídeo).
en la pantalla. Tenga en cuenta que trabajar con Unicode (y los actuales
hardware de computadora) le permite simultáneamente
Utilice sólo 512 glifos.
Si el valor Unicode actual es un carácter de control
o si en este momento procesada
Secuencia ESC, el valor será procesado
de manera especial. En lugar de convertir el valor
en la fuente y se muestra como un glifo, realizará
ciertas acciones (por ejemplo, mover el cursor) o
realizar cualquier otra función de gestión.
Consulte la sección ADMINISTRACIÓN DE LA CONSOLA LINUX a continuación.
Es incorrecto asignar estrictamente el control a los programas.
Terminal. Linux admite trabajar con la base de datos.
capacidades terminales. terminfo(5). Prefiriendo no
ingresar las secuencias de control ESC manualmente, usted
probablemente querrás usarlo para este trabajo
biblioteca de información de pantalla compatible con terminfo u otros
utilidades como: ncurses(3), tput(1) o reset(1).
GESTIÓN DE LA CONSOLA LINUX
Esta sección describe todos los personajes de control y
Secuencias ESC que realizan funciones especiales.
comandos (es decir, cualquier cosa que no sea una simple salida
carácter a la posición actual del cursor) en la consola Linux.
personajes de control
Un símbolo se considera un símbolo de control si (antes de la conversión
según la tabla de conversión) contiene uno de 14
códigos: 00 (NUL), 07 (BEL), 08 (BS), 09 (HT), 0a (LF), 0b
(VT), 0c (FF), 0d (CR), 0e (SO), 0f (SI), 18 (CAN), 1a
(SUB), 1b (ESC), 7f (DEL). Puedes configurar el modo
`mostrar caracteres de control" (ver más abajo), mientras que
Los caracteres 07, 09, 0b, 18, 1a, 7f se mostrarán en la pantalla.
como glifos. Por otro lado, en modo UTF-8 todos los códigos son con 00
1f son tratados como personajes de control (independientemente
desde el modo `mostrar caracteres de control').
Si se encuentra un carácter de control, se inmediatamente
está indicado, pero no se tiene en cuenta de ninguna manera en el futuro (incluso
si estaba en medio de la secuencia ESC), y
la secuencia de control continúa desde el siguiente
símbolo. Sin embargo, el carácter ESC que inicia un nuevo control
la secuencia probablemente cancelará lo inacabado
la secuencia anterior, y los comandos CAN y SUB son exactamente
completará la secuencia de control. Reconocible
Los caracteres de control son: BEL, BS, HT, LF, VT, FF,
CR, SO, SI, CAN, SUB, ESC, DEL, CSI. Ellos realizan
acciones estándar para ellos:
BEL(0x07, ^G) emite un pitido;
BS(0x08, ^H) elimina el carácter anterior (desplazado a la izquierda)
una columna, pero no más allá del principio
instrumentos de cuerda);
HT(0x09, ^I) pasa a la siguiente tabulación
o al final de la línea, si no había ninguna antes
se establecen tabulaciones;
LF (0x0A, ^J), VT (0x0B, ^K) y FF (0x0C, ^L) configurados
traducción de líneas;
CR (0x0D, ^M) especifica retorno de carro;
SO(0x0E, ^N) alimenta el juego de caracteres G1 y
si LF/NL (modo de nueva línea) está habilitado, entonces establece
un retorno de carro;
SI (0x0F, ^O) alimenta el juego de caracteres G0;
Interrupción CAN (0x18, ^X) y SUB (0x1A, ^Z)
secuencia ESC;
ESC (0x1B, ^[) comienza la secuencia ESC;
Se ignora DEL (0x7F);
CSI (0x9B) es equivalente a ESC [.
Secuencias ESC pero no CSI.
ESC con reinicio RIS.
ESC D IND Saltar línea.
ESC E NEL Nueva línea.
ESC H HTS Establece la tabulación en la columna actual.
ESC M RI Línea de retorno (salto hacia atrás).
ESC Z DECID Definición particular de DEC. Sistema
devuelve las líneas ESC [? 6 c, reclamando VT102.
ESC 7 DECSC Guardar el estado actual (coordenadas del cursor,
atributos, juegos de caracteres especificados por G0, G1).
ESC 8 DECRC Restaura el último estado ESC 7 guardado.
ESC [Entrada de secuencia de control CSI
ESC % Iniciar secuencia con selección de juego de caracteres
ESC % @ seleccione predeterminado (ISO 646 / ISO 8859-1)
ESC %G seleccione UTF-8
ESC %8 seleccione UTF-8 (obsoleto)
ESC #8 DECALN DEC Prueba de alineación de pantalla: Llena la pantalla con caracteres E.
ESC (Iniciar secuencia con selección de juego de caracteres G0
ESC (B seleccione predeterminado (distribución ISO 8859-1)
ESC (0 seleccionar distribución gráfica vt100
ESC (U selecciona asignación nula: directo a ROM de caracteres
ESC (K seleccionar distribución de usuario: descargable
utilidad mapscrn(8).
ESC) Iniciar secuencia con selección del juego de caracteres G1
(incluidos los símbolos: B, 0, U, K, - como en el ejemplo anterior).
ESC > DECPNM Usar teclado adicional como teclado numérico
ESC = DECPAM Usar teclado adicional como control
ESC ] OSC (Abreviatura de "comandos del sistema operativo")
ESC ] P nrrggbb: configura la paleta con parámetros,
especificado en 7 dígitos hexadecimales después de la última P:-(.
Aquí n es el color 0-16 y rrggbb indica
para usar rojo/verde/azul (0-255).
ESC ] R: Restablecer paleta
Secuencias ECMA-48 CSI
CSI (o ESC [) seguido de la secuencia
parámetros, que son números decimales separados
punto y coma (el más grande es NPAR(16)).
Un parámetro "vacío" (o su ausencia) equivale a
cero. La secuencia de parámetros puede comenzar
un signo de interrogación. Sin embargo, después de CSI [ (o ESC
[ [) lee un solo carácter y el resto
Se ignoran las secuencias. (El significado de esto es
para ignorar la tecla de función mostrada).
El resultado de especificar una secuencia CSI está determinado por su
personaje final.
@ICH Inserta N caracteres en blanco.
A CUU Mueve el cursor hacia arriba N filas.
B CUD Mueve el cursor hacia abajo N filas.
C CUF Mueve el cursor a las N columnas de la derecha.
D CUB Mueva el cursor a las N columnas de la izquierda.
E CNL Mueva el cursor hacia abajo N filas, hasta la columna #1.
F CPL Mueva el cursor hacia arriba N filas, a la columna #1.
G CHA Mueve el cursor a la columna especificada de la fila actual.
H COPA Mueva el cursor a la fila y columna especificadas (comience en 1,1).
J ED "Borrar" la pantalla (por defecto desde el cursor hasta el final de la pantalla).
ESC [ 1 J: "borrar" desde el principio de la columna hasta el cursor.
ESC [ 2 J: "borrar" toda la pantalla.
K EL "Borrar" la línea (por defecto desde el cursor hasta su final).
ESC [ 1 K: "borrar" desde el principio de la línea hasta el cursor.
ESC [ 2 K: "borrar" toda la línea.
L IL Insertar N líneas vacías.
M DL Eliminar N líneas.
P DCH Eliminar (con desplazamiento de línea) N caracteres en la línea actual.
X ECH "Borrar" (sin desplazamiento de línea) N caracteres en la línea actual.
a HPR Mueva el cursor a las N columnas de la derecha.
c DA Responder ESC [ ? 6c: `Soy VT102'.
d VPA Mueve el cursor a la fila especificada de la columna actual.
e VPR Mueva el cursor hacia abajo N filas.
f HVP Mueva el cursor a la fila y columna especificadas.
g TBC Sin parámetros: "borrar" la tabulación actual.
ESC [ 3 g: elimina todas las tabulaciones.
h Modo de instalación SM (ver más abajo).
l Modo de reinicio RM (ver más abajo).
m SGR Establecer atributos (ver más abajo).
n Informe de estado de DSR (ver más abajo).
q DECLL Establece los modos de funcionamiento de los indicadores del teclado.
ESC [ 0 q: apaga todos los indicadores
ESC [ 1 q: enciende el indicador "Bloqueo de desplazamiento"
ESC [ 2 q: enciende el indicador "Bloq Num"
ESC [ 3 q: enciende el indicador "Bloq Mayús"
r DECSTBM Establece el área de desplazamiento; los parámetros serán las filas superior e inferior.
¿s? Guardar la ubicación del cursor.
¿tú? Restaurar la ubicación del cursor.
` HPA Mueve el cursor a la columna especificada de la fila actual.
ECMA-48 Configuración de opciones de gráficos
ECMA-48 SGR secuencia de caracteres de control ESC [
m establece los atributos de la pantalla. Alguno
Los atributos se pueden especificar en una secuencia.
Parámetro. resultado
0 restablecer todos los atributos a sus valores predeterminados
1 instalación negrita
2 juegos más brillantes (color simulado en pantalla a color)
4 conjuntos de subrayado (simulado por color en una pantalla a color);
Se establecen los colores utilizados para simular el oscurecimiento o el resaltado.
usando ESC]...
5 enciende el parpadeo
7 habilitar el modo de video invertido
10 restablecer distribución seleccionada, banderas de control de pantalla
y cambiar la meta bandera
11 seleccione distribución nula, establezca el indicador de control de pantalla,
restablecer el interruptor de metamarca.
12 seleccione distribución nula, establezca el indicador de control de pantalla,
habilite el interruptor de metamarca. Cambiando la meta bandera
especifica la conmutación del bit más significativo en un byte
antes de su transformación según la tabla de distribución.
21 habilita el modo de intensidad normal (no compatible con ECMA-48)
22 apagar el modo de intensidad normal
24 desactivar el subrayado
25 apagar el parpadeo
27 desactivar video invertido
Juego de 30 caracteres de color negro.
31 conjuntos de color de caracteres rojo
32 instalar color verde caracteres
33 juegos de color de caracteres marrón
34 conjuntos de color de caracteres azul
35 juegos de personajes de color lila
36 conjuntos de color de caracteres azul
37 establecer el color del carácter en blanco
38 habilitar el subrayado, establecer el color de carácter predeterminado
39 desactivar el subrayado, establecer el color de carácter predeterminado
40 establecer el color de fondo en negro
41 establecer color de fondo rojo
42 establecer color de fondo verde
43 establecer el color de fondo en marrón
44 establecer color de fondo azul
45 establecer el color de fondo en lila
46 establecer color de fondo azul
47 establecer el color de fondo en blanco
49 establecer color de fondo predeterminado
Cambio de modo ECMA-48
CES [ 3 h
DECCRM (desactivado por defecto): Mostrar
personajes de control.
CES [ 4 horas
DECIM (desactivado por defecto): modo de configuración
inserciones/reemplazos.
CES [ 20 h
LF/NL (desactivado predeterminado): Automático
muestra el código CR después de los códigos: LF, VT o FF.
Comandos de informe de estado ECMA-48
ESC [ 5 norte
Mensaje de estado del dispositivo (DSR): Responder
es ESC [ 0 n (Terminal OK).
ESC [ 6 norte
Mensaje de posición del cursor (CPR): La respuesta es
ESC[y; x R, donde x,y son las coordenadas
cursor.
Secuencias DEC en modo privado (DECSET/DECRST)
No cubierto en ECMA-48. Se enumerarán los siguientes
secuencias de instalación de modos; en secuencia
Para restablecer los modos, el último carácter "h" se reemplaza por "l".
ESC [ ? 1 hora
DECCKM (deshabilitado por defecto): si está habilitado, entonces
Las teclas de cursor producen una señal que comienza con ESC.
Oh, no con ESC [.
ESC [ ? 3 horas
DECCOLM (predeterminado desactivado = 80 columnas):
modo para cambiar el número de columnas a 80 o
132.V versiones originales Se especifica que el conductor
este comando no es suficiente; alguno
utilidades de usuario que utilizan
modos no estándar, como resizecons(8),
debe cambiar los registros de configuración de la consola
tarjetas de video.
ESC [ ? 5 horas
DECSCNM (deshabilitado por defecto): Habilitar
Modo de vídeo invertido.
ESC [ ? 6 horas
DECOM (deshabilitado por defecto): si está habilitado, entonces
Las coordenadas del cursor se consideran relativas a
esquina superior izquierda en el área de desplazamiento.
ESC [ ? 7 horas
DECAWM (habilitado de forma predeterminada): modo habilitado
transferencia automática. En este modo, el símbolo gráfico
ingresado después de la columna #80 (o #132 si es DEC-
COLM habilitado), pasa al principio de la siguiente
líneas.
ESC [ ? 8 horas
DECARM (habilitado por defecto): Modo habilitado
caracteres de repetición automática al presionar una tecla
teclados.
ESC [ ? 9:00
Informe de estado del mouse X10 (predeterminado
ratones, igual a uno o cero (restablecer), ver más abajo.
ESC [ ? 25 horas
DECCM (habilitado de forma predeterminada): hacer cursor
visible.
ESC [ ? 1000 horas
Informe de estado del mouse X11 (predeterminado
off): Establecer el modo de informe de estado
mouse igual a 2 o cero (restablecer), ver más abajo.
Secuencias CSI privadas de la consola Linux
Las siguientes secuencias no son ECMA-48- ni
Secuencias VT102. Son "nativos" de
Controladores de consola Linux. Colores en parámetros SGR: 0 =
negro, 1=rojo, 2=verde, 3=marrón, 4=
azul, 5 = lila, 6 = azul claro, 7 = blanco.
ESC[1; n] Establecer color n como color de subrayado
ESC[2; n] Establecer el color n como color de desvanecimiento
ESC [ 8 ] Establece el par de colores actual con los atributos predeterminados.
ESC[9; n ] Configure la pantalla para que comience a “limpiar” después de n minutos.
ESC [ 10 ; n ] Establezca la frecuencia de la señal de sonido (en hercios).
ESC[11; n ] Establezca la duración de la señal de sonido en (milisegundos).
ESC[12; n ] Mueva la consola especificada delante de las demás.
ESC [ 13 ] Restaura la pantalla después de la "limpieza".
ESC[14; n ] Configure el intervalo de apagado VESA (en minutos).
CONJUNTOS DE CARACTERES
El kernel tiene información sobre 4 tipos de traducción de bytes.
Símbolos de la consola de pantalla. Estas cuatro tablas son
transformando: a) Latin1 -> PC, b) gráficos VT100 ->
PC, c) PC -> PC, d) definido por el usuario. en el sistema
generalmente hay dos conjuntos de caracteres llamados G0 y G1,
y uno de ellos es el sistema actual configurado (originalmente
este es G0). Al ingresar ^N, el conjunto G1 se vuelve actual, ^O
hace que el conjunto G0 sea actual. Las variables G0 y G1 indican
tablas de símbolos y pueden ser modificadas por el usuario.
Inicialmente señalan las tablas a) y b)
respectivamente. Secuencias ESC (B y ESC (0 y
ESC(U y ESC(K) hacen que G0 haga referencia a tablas
traducciones a), b), c) y d) respectivamente.
Secuencias ESC) B y ESC) 0 y ESC) U y ESC) K
hacer que G1 haga referencia a las tablas de traducción a), b), c) y
d) en consecuencia. La secuencia ESC c da como resultado
resetear el terminal, es decir, a lo que necesitas cuando
presencia de "basura" en la pantalla. Recomendación enumerada después
"echo ^V^O" sólo hará que G0 sea el conjunto actual, pero no
no hay garantía de que G0 apunte a la tabla a). EN
algunas versiones tienen un reinicio del programa(1), que sólo
solo ejecuta el comando "echo ^" bit a bit.
se busca la imagen correspondiente a s en la ROM de símbolos y
se puede cambiar usando setfont(8).
USANDO EL RATÓN
El sistema para rastrear la actividad del mouse implica emitir
Señales de estado del mouse compatibles con xterm. Desde el conductor
La consola no reconoce un dispositivo como un mouse (o sus
tipo), luego estas señales se envían al flujo de entrada
consola, sólo cuando el controlador de terminal virtual
recibe una señal ioctl para actualizar el estado del mouse. Estos
Las señales ioctls deben ser generadas por el usuario.
Aplicaciones habilitadas para mouse (como
demonio gpm(8)). Parámetro para todos los xterm creados
Secuencias ESC (señales de movimiento del ratón)
habrá un carácter cuyo código sea el valor+040. Por ejemplo,
`!" corresponde a uno. El sistema de coordenadas de la pantalla cuando
El seguimiento del mouse se basa en el signo de la unidad. EN
Modo de compatibilidad X10 al presionar botones
Se envían secuencias ESC en las que el
estado del mouse e información sobre el botón presionado. Modo
se ejecuta cuando ESC [? 9 h y se apaga a las
emitiendo ESC [? 9 litros. Cuando presionas un botón xterm envía
ESC [ M bxy (6 caracteres), donde b es el botón-1 y xey
igual a las coordenadas xey cuando se presiona este botón. Este
los mismos códigos que generan y generan el núcleo del sistema. EN
modo de seguimiento normal del ratón (que no estaba
implementado en Linux 2.0.24) Secuencias ESC
enviado cuando presiona y suelta un botón del mouse.
También se envía información sobre el modificador. Empieza
modo al emitir ESC [? 1000 h y se apaga al dispensar
ESC [1000l. Al presionar y soltar el botón xterm
emite ESC [ M bxy. Los dos bits inferiores de b contienen información.
acerca de los botones: 0=MB1 presionado, 1=MB2 presionado, 2=MB3 presionado,
3=liberado. Los bits más significativos contienen información sobre qué
Los modificadores se desactivaron cuando se presionó el botón. Este
La información se agrega cuando se presiona: 4=Shift, 8=Meta,
16=Controlar. Una vez más: xey son coordenadas xey
ratón al procesar el evento. Coordenadas superior izquierda
Los ángulos se consideran como (1,1).
COMPARACIÓN CON OTROS TERMINALES
Muchos otros tipos de terminales se describen como
Consolas Linux (como `compatibles con VT100'). A continuación discutiremos.
diferencia entre consola linux y otros dos importantes
tipos, DEC VT102 y xterm(1).
Manejo de personajes de control
El tipo vt102 también reconoce los siguientes caracteres de control:
Se ignoró NUL (0x00);
ENQ (0x05) se inició el mensaje de respuesta inversa;
DC1 (0x11, ^Q, XON) continúa la transmisión;
DC3 (0x13, ^S, XOFF) indica que se necesita vt100
ignorar y detener la transmisión de todos los códigos para
excluyendo XOFF y XON
Se puede iniciar el procesamiento DC1/DC3 similar al VT100
conductor tty.
El programa xterm (en modo vt100) reconoce el control
los siguientes símbolos: BEL, BS, HT, LF, VT, FF, CR, SO, SI,
ESC.
secuencias ESC
Secuencias de consola VT100 no implementadas en
Consolas Linux:
ESC N SS2 Cambio de 2. (Seleccione el juego de caracteres G2 sólo para el siguiente
personaje.)
ESC O SS3 Cambio en 3. (Seleccione el juego de caracteres G3 solo para el siguiente
personaje.)
ESC P DCS Línea de control del dispositivo (termina en ESC\)
ESC X SOS Inicio de línea.
ESC ^ PM Mensaje privado (termina en ESC\)
ESC\ST Terminando 0 líneas
ESC * ... Definir juego de caracteres G2
ESC +... Definir juego de caracteres G3
El programa xterm (en modo vt100) reconoce: ESC c, ESC #
8, ESC >, ESC =, ESC D, ESC E, ESC H, ESC M, ESC N, ESC O,
ESC P... ESC ESC Z (produce las secuencias ESC [
? 1; Respuesta 2c: `Soy vt100 con mejora
parámetros de vídeo") y ESC ^ ... ESC con los mismos valores,
los cuales se indican arriba. Aceptado: ESC (, ESC), ESC *,
ESC +,- seguido de 0, A, B para caracteres especiales
Modos DEC y dibujo lineal, UK y USASCII respectivamente.
ESC ] se aceptan para fijar el funcionamiento de dichos recursos,
Cómo:
ESC ] 0 ; txt BEL Establece el nombre del icono y el título de la ventana en modo txt.
ESC ] 1 ; txt BEL Establece el nombre del icono en modo txt.
ESC ] 2 ; txt BEL Establece el título de la ventana en modo txt.
ESC ] 4 6 ; nombre BEL Cambie el archivo de registro por nombre (normalmente deshabilitado)
opciones de compilación)
ESC ] 5 0 ; fn BEL Establecer fuente fn.
Los siguientes parámetros se reconocen con ligeras modificaciones.
significado:
ESC F Cursor a la esquina inferior izquierda de la pantalla (si está habilitado)
recurso hpLowerleftBugCompat)
ESC l Bloqueo de memoria (para terminales HP).
Bloquea la memoria encima del cursor.
ESC m Desbloquea la memoria (para terminales HP).
ESC n LS2 Introduzca el juego de caracteres G2.
ESC o LS3 Introduzca el juego de caracteres G3.
ESC | LS3R Introduzca el conjunto de caracteres G3 como GR.
ESC ) LS2R Introduzca el conjunto de caracteres G2 como GR.
No tiene ningún efecto visible en xterm.
ESC ~ LS1R Introduzca el carácter G1 configurado como GR.
No tiene ningún efecto visible en xterm.
ESC % no reconocido...
secuencias CSI
El programa xterm (según XFree86 3.1.2G) no reconoce
SGR en modo parpadeante o sigiloso. Las versiones X11R6 no son
reconocer la configuración de color SGR. Todos los demás ECMA-48
Las secuencias CSI reconocidas por Linux también son
son reconocidos por xterm y viceversa. El programa xterm
reconocer todas las secuencias del modo privado DEC,
enumerados anteriormente, pero no reconocerá ninguno de los
Secuencias en modo privado en Linux. Para
discusión de secuencias en modo privado para xterm
consulte el documento XtermControlSequences creado por
Edward Moy y Stephen Gildea y acompañados
Distribución del sistema X Window.
ERRORES ENCONTRADOS
En la versión 2.0.23, el conjunto de CSI es incorrecto y
no válido, NUL no se ignora internamente
Secuencias ESC.
Las operaciones son combinaciones especiales símbolos que especifican acciones para transformar varias cantidades. El compilador interpreta cada una de estas combinaciones como una unidad independiente llamada token.
La Tabla 2-3 proporciona una lista de operaciones. Las operaciones se deben utilizar exactamente como se presentan en la tabla, sin espacios en blanco entre caracteres en aquellas operaciones que están representadas por varios caracteres.
El tamaño de la operación no está incluido en esta tabla. Ella más bien representa palabra clave que un símbolo.
Operación |
Nombre |
NO lógico |
|
complemento de bits |
|
Suma |
|
Resta, negación aritmética. |
|
Multiplicación |
|
Desplazamiento a la izquierda |
|
Desplazamiento a la derecha |
|
menor o igual |
|
Más o igual |
|
Bit a bit Y, dirección de |
|
O inclusivo bit a bit |
|
O exclusivo bit a bit |
|
Y lógico |
|
O lógico |
|
Ejecución secuencial (coma) |
|
Operación expresión condicional |
|
Incremento |
|
Decremento |
|
tarea sencilla |
|
Suma con asignación |
|
Resta con tarea |
|
Multiplicación con asignación |
|
División con asignación |
|
Resto con asignación |
|
Desplazamiento a la derecha con asignación |
|
Desplazamiento a la izquierda con asignación |
|
Bit a bit Y con asignación |
|
Bit a bit inclusivo O con asignación |
|
O exclusivo bit a bit con asignación |
Tabla 2‑3 Operaciones
Comentario: ¿Operador de expresión condicional?: es un operador ternario, no un operador de dos caracteres. El formato de expresión condicional es el siguiente:
Constantes
Una constante es un número, carácter o cadena de caracteres. Las constantes se utilizan en un programa como valores inmutables. En el lenguaje C, existen cuatro tipos de constantes: constantes enteras, constantes de punto flotante, constantes de caracteres y literales de cadena.
Constantes enteras
Una constante entera es un número decimal, octal o hexadecimal que representa un valor entero. Una constante decimal tiene el siguiente formato:
Dónde
Una constante octal tiene el siguiente formato:
0
Dónde
Una constante hexadecimal tiene uno de los siguientes formatos de representación:
0x
0X
Dónde
Un dígito hexadecimal puede ser un número del 0 al 9 o una letra (mayúscula o minúscula) de la A a la F. Se permite una "mezcla" de letras mayúsculas y minúsculas en representación constante. Es necesario escribir un cero a la izquierda seguido de una x o una X.
No se permiten espacios en blanco entre los dígitos de una constante entera. La tabla 2-4 ilustra ejemplos de constantes enteras.
Tabla 2‑4 Ejemplos de constantes
Las constantes enteras siempre especifican valores positivos. Si se requieren valores negativos, entonces es necesario formar una expresión constante a partir del signo menos y la constante que le sigue. El signo menos se trata como una operación aritmética.
Cada constante entera se especifica mediante un tipo que determina su representación en memoria y su rango de valores. Las constantes decimales pueden ser de tipo int o long.
Las constantes octales y hexadecimales pueden ser de tipo int, unsigned int, long o unsigned long, según su tamaño. Si una constante se puede representar como un int, se especifica como tipo int. Si su valor es mayor que el valor positivo máximo que se puede representar mediante el tipo int, pero menor que el valor que se puede representar en el mismo número de bits que int, se especifica como int sin signo. Finalmente, a una constante cuyo valor es mayor que el valor máximo representado por un int sin signo se le asigna un tipo largo o sin signo, si es necesario. La Tabla 2-5 muestra los rangos de valores para las constantes octales y hexadecimales representadas por los tipos correspondientes en la máquina, donde tipo entero tiene una longitud de 16 bits.
rangos hexagonales |
rangos octales | |
0x8000 – 0xFFFF |
0100000 - 017777777777 | |
0x80000000 - 0xFFFFFFFF |
020000000000 - 030000000000 |
Tabla 2‑5 Rangos de valores para constantes octales y hexadecimales
La importancia de las reglas discutidas anteriormente es que las constantes octales y hexadecimales no contienen extensiones "firmadas" cuando se convierten a tipos más largos (para la conversión de tipos, consulte la Sección 5, "Expresiones y asignaciones").
El programador puede definir para cualquier constante entera. tipo largo, agregando la letra "l" o "L" al final de la constante. La tabla 2-6 muestra ejemplos de constantes enteras.
Constantes decimales |
Constantes octales |
Constantes hexadecimales |
Tabla 2‑6 Ejemplos de constantes enteras largas
Las secuencias ESC son combinaciones de caracteres especiales que
presente caracteres de espacio en blanco y caracteres no gráficos en cadenas y símbolos
constantes.
Su uso típico asociado a la especificación de acciones tales como
retornos de carro y tabulaciones, y para especificar representaciones literales
caracteres, como la comilla doble ("). La secuencia de escape consta de
a partir de una barra invertida (\) seguida de una letra, signos
puntuación "comilla simple" (), " doble comillas" (""), "barra invertida
barra" (\) o una combinación de números.
Si una barra invertida precede a un carácter no incluido en este
lista, la barra invertida se ignora y el carácter se representa como
literal. Por ejemplo, la imagen "\c" representa el carácter "c" en el literal
constante de cadena o carácter.
Las secuencias "\ddd" y "\xdd" le permiten especificar cualquier carácter en ASCII
(Americano código estándar interfaz de información) como una secuencia
tres dígitos octales o dos dígitos hexadecimales. Por ejemplo, el carácter de espacio.
se puede especificar como \010 o \x08. El código ASCII cero se puede especificar como \0 o
\x0. La secuencia octal ESC puede utilizar de uno a
Tres dígitos octales. Por ejemplo, el carácter de espacio se puede especificar como \10. Exactamente
también en secuencia ESC hexadecimal se puede utilizar desde
uno a dos dígitos hexadecimales. Entonces, la secuencia hexadecimal
para el carácter de espacio se puede especificar como \x08 o \x8.
Cabe señalar que cuando se utiliza octal o hexadecimal
Secuencia ESC en líneas, luego debe especificar completamente todos los números
Secuencias ESC (tres dígitos para octal y dos dígitos para
secuencias ESC hexadecimales). De lo contrario, si el símbolo está directamente
seguir la secuencia ESC accidentalmente resultará ser octal o
dígito hexadecimal, se interpretará como parte
secuencias. Por ejemplo, la línea \x7Be11 cuando se imprima será
se parece a ell porque \x7B se interpretará como un carácter rizado izquierdo
soportes (). La cadena \x07Be11 sería la representación correcta del carácter campana con
seguido de la palabra Bell.
Las secuencias ESC le permiten enviar caracteres de control no gráficos
A dispositivos externos. Por ejemplo, la secuencia ESC \033 se utiliza a menudo
como primer carácter de los comandos de control de terminal e impresora. No gráfico
Los caracteres siempre deben representarse como secuencias ESC porque
Se evitará el uso directo de símbolos no gráficos en programas C.
tener un resultado impredecible.
El carácter de barra invertida (\) además de definir secuencias ESC
También se utiliza como carácter de continuación de línea en definiciones de preprocesador.
Si el personaje " nueva línea" sigue al carácter de barra invertida (\),
entonces la nueva línea se ignora y Proxima linea considerado como parte
línea anterior.
| 2 | | | |
- Tutorial
Cuando printf es muy poco y ncurses es demasiado
Cuando hay demasiados datos, no hay suficientes salida estándar printf en un programa de consola. Especialmente si hay muchos eventos diferentes y diferentes datos se convierten en una lista loca. Estos datos pueden provenir del controlador a través de UART y no es necesario pensar en algún tipo de programa GUI. También puede haber un script bash normal al que desee adjuntar algún tipo de interfaz pseudográfica.
Diré de inmediato que al principio esto puede parecer como reinventar la rueda, porque hay una excelente biblioteca de ncurses. No menosprecio sus méritos en absoluto, pero a menudo sus capacidades son demasiado redundantes. Además, es poco portátil para los controladores y ciertamente es redundante allí. Pero usted mismo puede esbozar un par de macros y funciones para trabajar con pseudográficos.
Formulación del problema
Quienes han estado programando controladores suelen utilizar una consola como UART o UART en ruso para mostrar información durante la depuración. Anteriormente di una descripción. de esta interfaz en sus publicaciones en Habré. Con una cantidad suficientemente grande de información variada, resulta completamente imposible captarla. Resulta ser un registro de varias páginas, especialmente si hay datos continuos de algunos sensores analógicos, además es necesario monitorear el estado de los puertos, etc. Como resultado, la gente empieza a escribir sus propios controladores en el lado de la computadora y la solución se vuelve completamente imposible de transportar y, lo más importante, se pierde mucho tiempo. Pero, de hecho, puede colocar toda la información del controlador en una ventana de terminal y usarla cómodamente, sin escribir software de terceros. Como resultado, nuestra solución se vuelve portátil (se necesita cualquier terminal) y se ahorran muchas horas de programación en la depuración.Ejemplo metodológico
Este ejemplo será más educativo y metodológico, pero puedes adaptarlo fácilmente a tus necesidades. dispositivo real en cualquier controlador. Además, por analogía, todo esto funcionará en bash, pyton, etc.Supongamos que tenemos un controlador donde los sensores de contacto están conectados a un puerto de 8 bits que puede aceptar estados ON y OFF, hay un sensor analógico de tres ejes y debemos mostrar su estado, además el controlador tiene hora, fecha y desea controlar la visualización de la hora correcta; y finalmente, puede ocurrir algún evento (por ejemplo, un corte de energía), donde debamos informar urgentemente al operador. Resumamos:
- Estado de 8 pines del puerto (on/off)
- Sensor de tres ejes (x, y, z): salida separada para cada eje
- fecha y hora
- Mensaje de error al operador
Copié los marcos estúpidamente de mc. Aquellos que quieran belleza pueden mirar qué marcos hay en Unicode. Los números en la parte superior están escritos específicamente para las coordenadas.
Parece que la idea está clara, pero ¿cómo implementar esto en la terminal? ¡Aquí es donde comienza la verdadera magia! " ¡Y ahora definitivamente debes volar! ¡Si no soplas, no sucederá ningún milagro!" Hmayak Akobyan
Secuencias de escape
Inicialmente, planeé presentar una conferencia sobre control de terminales usando secuencias ESC en este capítulo. Pero entonces el artículo simplemente crecería hasta alcanzar proporciones indecentes, por lo que daré solo algunos conceptos y el resto se puede encontrar en Internet o en manuales.Un terminal es un dispositivo de entrada/salida que permite ingresar y mostrar datos. Anteriormente, el terminal era un monitor y un teclado conectados a través de un puerto COM a una computadora, pero en tiempos más recientes versiones anteriores Incluso un teletipo.
Teletipo Modelo 33 (imagen de Wikipedia)
Hoy en día, una terminal es un programa que puede ser una terminal virtual, como en Linux, o una terminal que funciona con un puerto COM. Todos estos terminales, incluso el clásico HyperTerminal, cumplen con ciertos estándares. Como se puede imaginar, estos terminales deben gestionarse. Los hay regulares caracteres ASCII, que se muestran en la pantalla, y hay secuencias especiales de caracteres que le permiten configurar las coordenadas del cursor, borrar la pantalla, configurar el color, etc. En mis artículos sobre Habré y Giktimes ya he tocado repetidamente el tema de las secuencias ESC. Los usamos en el control de visualización (descripción en un spoiler que nadie leyó) y en un artículo sobre que también está controlado por secuencias ESC.
Si alguno de ustedes estuvo en la época de BBS, entonces recordará lo “hermosos” que eran estos tableros: de colores, que tenían ciertos campos para entrada/salida de información, etc. Toda esta alegría se mostró con la ayuda de dichos Símbolos de Control. Un carácter se considera carácter de control si (antes de la conversión según la tabla de conversión) contiene uno de los 14 códigos: 00 (NUL), 0x07 (BEL), 0x08 (BS), 0x09 (HT), 0x0a (LF), 0x0b. (VT), 0x0c (FF), 0x0d (CR), 0x0e (SO), 0x0f (SI), 0x18 (CAN), 0x1a (SUB), 0x1b (ESC), 0x7f (DEL). Nos interesa principalmente el símbolo ESC=0x1b, "\033" o "\e". Puede leer más sobre estas secuencias en los manuales de man console_codes o en Internet en ruso.
Además de controlar el cursor, también puedes colorear el terminal en Colores diferentes(si es de color, claro). Puedes comprobar los colores de tu terminal con un sencillo script BASH:
Para fgbg en 38 48 ; haga #Foreground/Background para el color en (0..256); do #Colors #Muestra el color echo -en "\e[$(fgbg);5;$(color)m $(color)\t\e ; luego echo #Nueva línea fi hecha echo #Nueva línea hecha salida 0
El resultado de la ejecución será algo como esto:
Puede leer con más detalle sobre los colores y fuentes en la consola (y en cualquier terminal) con ejemplos.
Ahora ya lo tienes Información necesaria para hacer huevos de Pascua divertidos en scripts BASH, como la imagen en el título de la publicación.
Puedes leer con más detalle cómo hice un huevo de Pascua en bash en mi LiveJournal.
Formatearemos todo en si.
Doy este ejemplo en mis clases magistrales de programación y lo daré aquí. Hagamos macros para configurar atributos de texto, limpiar la pantalla, mover el cursor a esquina superior y moviendo el cursor a una posición determinada:#definir inicio() printf(ESC ")