¿Secuencias de control XTerm para eliminación de palabras hacia adelante y hacia atrás?

¿Secuencias de control XTerm para eliminación de palabras hacia adelante y hacia atrás?

Yo creoEste artículodebería ayudarme a encontrar la secuencia de control para la eliminación de palabras hacia adelante y hacia atrás.

Tengo entendido que la secuencia de control comenzaría con \u001b[ya que eso es"el introductor de secuencia de control"(obtuve esto deesta otra respuesta), pero realmente no sé cuál debería ser la cadena completa.

Contexto (según la otra pregunta SO): Mi objetivo es emitir la secuencia de control para eliminar palabras en el terminal VSCode desde un método abreviado de teclado (combinación de teclas)

Respuesta1

No existe tal cosa, puedes ver elctlseqEl documento no tiene ninguna mención única delpalabrapalabra. También está la cuestión de qué color de fondo usar para borrar y si desplazar lo que está a la derecha de la palabra hacia la izquierda o no. Es posible que tengas que considerar las palabras que están envueltas en el margen derecho del terminal.

Algunas de tus opciones son:

  • envíe tantos caracteres BS como celdas haya en la palabra que desea borrar, seguidos de tantos SPC (tenga cuidado, usa el color de fondo actual) seguidos de tantos caracteres BS nuevamente (para mover el cursor nuevamente):

    $ printf 'foo bar\b\b\b   \b\b\b+\n'
    foo +
    

    ese debería funcionar en prácticamente todos los terminales.

  • Lo mismo pero use tput cub x(dónde xestá el número de celdas) para mover el cursor hacia atrás esa cantidad en lugar de usar una secuencia de BS. Y puedes usar tput ech xpara borrar esas celdas (con el color de fondo actual o no dependiendo del terminal)

    $ printf 'foo bar'; tput cub 3; tput ech 3; printf '+\n'
    foo +
    
  • en lugar de tput ech x, puede utilizar tput elpara borrar hasta el final de la línea o tput dch xparaborrarx celdas (y desplazar lo que sigue a la izquierda).

( tputaquí está la interfaz de shell para la base de datos terminfo, la idea es evitar secuencias de escape codificadas, use el equivalente para su idioma).

Al observar los backward-kill-wordwidgets de algunos shells (usados, scriptpor ejemplo, para registrar su salida), veo readlineque usa BS para movimiento y dchpara eliminar, mientras que zshusa una combinación de BS cuby reescritura. tcshParece estar haciendo un posicionamiento absoluto de la columna ( hba) y lo usa dchpara eliminar, ksh93 envía un CR y reescribe toda la línea.

Respuesta2

Nunca había visto una secuencia así. Si lo piensas bien, borrar una palabra es bastante complejo, más complejo que otras operaciones, y no creo que a ninguna otra operación le importe lo que hay en la pantalla de ninguna manera. Por ejemplo, ¿qué termina una palabra? ¿'_'? '-'? '.'?

información relacionada