Comportamento inesperado do comando bind do Readline

7

Eu ainda não havia pesquisado se o modo de colar entre colchetes é suportado pela versão do Bash / Readline no meu sistema Ubuntu 16.04 (não é) e, por curiosidade, executei o seguinte comando apresentado neste Pergunte ao Ubuntu .

bind 'set-enable-bracketed-paste off'

Se a configuração set-enable-bracketed-paste não existisse, eu esperaria bind para reclamar sobre sintaxe ruim ou para não fazer nada. Em vez disso, desassociado o minúsculo p , ou seja, o caractere desaparece em um buraco negro quando digitado.

Parece que esse uso do comando bind desvincula o caractere que segue imediatamente o último hífen antes do primeiro caractere de espaço (se houver algum espaço na string). Por exemplo, eu executei os seguintes comandos:

Isso resulta no caráter r não acoplado:

bind '__-r anymorecharacters'

Isso desassocia o caractere, 2 :

bind 'xxxx-1-2xxx'

Os caracteres ainda podem ser digitados Ctrl - V antes de entrar no personagem, permitindo assim que eles sejam recolocados:

bind 'r: self-insert'
bind '2: self-insert'

Para mim, esse comportamento é inesperado e surpreendente e eu considero isso um bug. No entanto, não estou muito familiarizado com o Readline, por isso pensei em perguntar aqui se há uma explicação razoável para esse comportamento.

    
por Anthony Geoghegan 07.04.2017 / 00:32

1 resposta

4

O analisador do arquivo de configuração do Readline possui uma verificação de erros insatisfatória.

set-enable-bracketed-paste é analisado da maneira que, digamos, control-DEL ou meta-q seria analisado. Readline pega a parte final menos delimitada e tenta entendê-la como um nome de chave, e pega o resto e tenta entendê-la como uma sequência de modificadores.

O código que reconhece a chave retrocede alegremente ao olhar para o primeiro caractere se nenhum nome em sua tabela de nomes de chaves corresponder. Então, paste é usado para denotar a chave p .

O código que procura por modificadores não se importa se houver outros modificador de coisas na string e não espera que modificadores sejam menos terminados. Então, set-enable-bracketed- é simplesmente tratado como nenhum modificador.

Isso não "desassocie a p key". Ele re - vincula a chave p à função chamada " off ". O código que faz isso não gera um erro se nenhuma função chamada " off "pode ser encontrado na tabela de funções. A tabela de funções padrão não tem essa função.

    
por 24.10.2018 / 14:33

Tags