Linenoise: Faça ctrl esquerda e direita

Criado em 24 nov. 2016  ·  8Comentários  ·  Fonte: antirez/linenoise

Esses atalhos de teclado são super úteis ao navegar rapidamente em uma linha já existente. Existe algum motivo para não serem implementados?

Todos 8 comentários

R: Este não é um comando de movimento típico em POSIX/UNIX. Linenoise é 100% POSIX.

No entanto, seria fácil adicionar isso à sua própria cópia do linenoise. Muitas pessoas que usam linenoise o cortam por um motivo ou outro. É muito fácil de entender e mod.

Aqui está um gráfico que compara o uso da chave de controle no Win/Unix/Emacs: https://en.wikipedia.org/wiki/Control_key


O que fazer?

na linha #41 em linenoise.c você encontrará uma discussão sobre como o cursor é controlado.

Na linha nº 768 você encontrará
static int linenoiseEdit(int stdin_fd, int stdout_fd, char *buf, size_t buflen, const char *prompt)

Se você fosse alterar a funcionalidade de edição, estaria aqui nesta função.

Lembre-se também de que a edição de várias linhas deve ser ativada com a chamada da API:

linenoiseSetMultiLine(1);

Espero ter ajudado e Feliz Dia de Ação de Graças! (Não importa onde você está :-)

Isso está se referindo à mesma ideia de #64 e #92, ou algo mais?

Eu não acho que o linenoise se restringe aos recursos de edição de linha definidos pelo POSIX (e eu não consegui nem encontrar uma fonte de sequências de escape específicas que o POSIX define, embora eu tenha encontrado muitas informações no vi/emacs/readline back-word e seqüências de palavras diretas). Você pode estar pensando no fato de que o ruído de linha depende de um ambiente POSIX, mas isso significa apenas que ele precisa ficar longe de chamadas específicas do sistema operacional.

Talvez eu não tenha ficado claro - estou ciente de que control+left não corresponde a um caractere de controle (da mesma forma que ctrl+a corresponde a \01, etc.). Muitos emuladores de terminal produzem uma sequência de escape diferente para isso (como \033[1;5D ou \033f ), que algumas bibliotecas de edição de linha vinculam por padrão para navegar para frente/para trás por uma palavra. Pelo menos, suponho que é isso que esta questão está sugerindo.

Se você encontrou algo que lista quais sequências de escape de edição de linha o POSIX define (e não) ou algo que afirma que o ruído de linha não implementará nenhum que não faça parte do padrão POSIX, por favor me avise, como Não consegui encontrá-lo.

Edit: se você está se referindo à tabela que vinculou acima, embora isso não esteja se referindo ao POSIX, acho que entendi seu ponto. Não estou argumentando a favor de ctrl+left/right especificamente, mas não acho que alguma sequência seja uma má ideia. Além disso, essa não é uma lista completa de combinações de teclas ou ligações de readline - acredito que readline liga esc-b/f (e possivelmente outras sequências de escape mais longas) a back/forward-word por padrão, que não está listado lá.

Eu acho que o recurso que o JelteF quer envolve estender as sequências de escape de entrada manipuladores de ruído de linha ( aqui , por exemplo, as sequências geradas pressionando as teclas de seta ou delete), e você está se referindo a sequências de escape de saída (por exemplo, sequências enviadas para saída para realmente mover o cursor) . Concordo que lidar com termcap está além do escopo do ruído de linha, e aprecio o fato de que o ruído de linha é implementado com poucos comandos.

Talvez @JelteF possa esclarecer o que exatamente essa solicitação de recurso está pedindo. Eu pensei que era sobre lidar com duas sequências extras em linenoiseEdit(), mas posso estar errado.

Apenas para informação, se se trata de mover uma palavra para a esquerda/direita quando ctrl-left ou ctrl-right é pressionado (com as sequências de escape longas correspondentes \033[5;D e C respectivamente, Eu tenho um patch para isso nas ligações OCaml: https://github.com/fxfactorial/ocaml-linenoise/commit/c3d130cd62419ed3e77203bea392b12830c3e593

@c-cube está certo que é isso que eu quis dizer. Desculpe por não responder antes.

haha, só faz um ano e meio, isso não é nada em tempo de internet. E ali mesmo em linenoiseEdit() também. Obrigado @c-cube :+1:

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

fatcerberus picture fatcerberus  ·  5Comentários

ghost picture ghost  ·  4Comentários

krux02 picture krux02  ·  8Comentários

ozancaglayan picture ozancaglayan  ·  21Comentários

denisvm picture denisvm  ·  9Comentários