Sequências de controle XTerm para exclusão de palavras para trás/para frente?

Sequências de controle XTerm para exclusão de palavras para trás/para frente?

Eu acreditoEste artigodeve me ajudar a encontrar a sequência de controle para exclusão de palavras para trás/para frente.

Meu entendimento é que a sequência de controle começaria, \u001b[já que é"o introdutor da sequência de controle"(eu peguei isso deesta outra resposta), mas não sei realmente qual deveria ser a string completa.

Contexto (de acordo com a outra pergunta do SO): Meu objetivo é emitir a sequência de controle para excluir palavras no terminal VSCode a partir de um atalho de teclado (atalho de teclas)

Responder1

Não existe tal coisa, você pode ver octlseqdocumento não contém nenhuma menção aopalavrapalavra. Há também a questão de qual cor de fundo usar para apagar e se deve ou não deslocar o que está à direita da palavra para a esquerda. Talvez você precise considerar palavras agrupadas na margem direita do terminal.

Algumas de suas opções são:

  • envie tantos caracteres BS quantas células houver na palavra que você deseja apagar, seguido por tantos SPC (cuidado, ele usa a cor de fundo atual) seguido por tantos caracteres BS novamente (para mover o cursor de volta):

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

    que se deve trabalhar em praticamente todos os terminais.

  • o mesmo, mas use tput cub x(onde xestá o número de células) para mover o cursor para trás naquele valor, em vez de usar uma sequência de BS. E você pode usar tput ech xpara apagar essas células (com a cor de fundo atual ou não dependendo do terminal)

    $ printf 'foo bar'; tput cub 3; tput ech 3; printf '+\n'
    foo +
    
  • em vez de tput ech x, você pode usar tput elpara apagar até o final da linha ou tput dch xparaexcluirx células (e desloque o que vem depois para a esquerda).

( tputaqui está a interface shell para o banco de dados terminfo, a idéia é evitar sequências de escape de codificação rígida, use o equivalente para o seu idioma).

Olhando para os backward-kill-wordwidgets de alguns shells (usando, scriptpor exemplo, para registrar sua saída), vejo readlineque usa BS para movimento e dchexclusão, enquanto zshusa uma combinação de BS e cubreescrita. tcshparece estar fazendo algum posicionamento absoluto da coluna ( hba) e usado dchpara excluir, ksh93 envia um CR e reescreve a linha inteira.

Responder2

Nunca vi tal sequência. Se você pensar bem, excluir uma palavra é bastante complexo, mais complexo do que outras operações, e não acho que qualquer outra operação se importe de alguma forma com o que está na tela. Por exemplo, o que termina uma palavra? '_'? '-'? '.'?

informação relacionada