Existe uma maneira de definir um comando bash readline? [fechadas]

5

Não consigo encontrar uma maneira de fazer isso em bash . Então existe uma maneira de definir um atalho readline bash que irá inserir uma string gerada dinamicamente na posição do cursor?

Por exemplo, quero inserir a data:

bind '"\C-xx": my-dynamical-date'

aaa  bbb
--------
    ^ cursor is here

# After pressing "\C-xx":

aaa Sun Apr 22 22:19:00 CST 2018 bbb
------------------------------------
                                ^ cursor is here

Então, como definir o comando readline my-dynamic-date?

    
por Big Shield 22.04.2018 / 15:35

2 respostas

7

Um pouco bobo, mas poderia ser algo assim:

bind '"\C-xx":"$(date) \e\C-e\ef\ef\ef\ef\ef"'

Primeiro, insere um literal $(date) e, em seguida, chama shell-expand-line e depois avança 5 palavras.

Para salvar a associação de teclas, adicione o seguinte a inputrc :

"\C-xx":"$(date) \e\C-e\ef\ef\ef\ef\ef"
    
por 22.04.2018 / 17:59
4

Você pode escrever uma função que edita as variáveis readline READLINE_POINT e READLINE_LINE . Por exemplo, defina em .bashrc :

_myinsert() { # add date at point
    local TOADD=$(date)
    READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}${TOADD}${READLINE_LINE:$READLINE_POINT}"
    READLINE_POINT=$(($READLINE_POINT + ${#TOADD}))
}
# cannot put this in ~/.inputrc
bind -x '"\C-xx":_myinsert'

Isso usa a opção -x de bind para chamar sua função. Eu não sei de qualquer maneira de colocar o equivalente em um arquivo ~/.inputrc . (Você certamente não pode simplesmente começar a linha com -x , por exemplo).

    
por 22.04.2018 / 20:00

Tags