Chamar funções do bashrc no inputrc

Chamar funções do bashrc no inputrc

Estou no Arch Linux (4.13.11) e no meu .bashrc, há uma função personalizada que encontra um arquivo usandofzfe então abre esse arquivo com o editor padrão:

# Search a file with fzf inside a Tmux pane and then open the file in an editor
fzf_then_open_in_editor() {
  local file=$(fzf-tmux)
  # Open the file if it exists
  if [ -n "$file" ]; then
    # Use the default editor if it's defined, otherwise Vim
    ${EDITOR:-vim} "$file"
  fi
}

Eu configurei meu .inputrc, para usar atalhos de teclado do tipo Vim para o shell:

set editing-mode vi

De preferência, eu poderia pressionar Ctrl+ oquando estiver no modo de comando para chamar minha função fzf_then_open_in_editor.

tentei

set keymap vi-command
"\C-o": fzf_then_open_in_editor

mas isso não funcionou.

Em .inputrc, como posso criar atalhos de teclado para funções definidas em .bashrc?

Responder1

O formulário key: functionaceita apenas funções integradas readline. Como você descobriu, para inserir texto você precisa do que chamamos de macro que deve estar entre aspas: key: "my macro\r". Não vejo por que você precisa começar com um comando de inserção, pois normalmente você já está no modo de inserção no prompt de comando.

Se você quiser chamar uma função, use uma ligação de comando shell com option -x. Não conheço nenhuma forma de colocar esse bind em um ~/.inputrc, mas você pode colocar o seguinte comando no seu .bashrc:

bind -x '"\C-o": fzf_then_open_in_editor'

Responder2

Consegui o que queria adicionando isto a .inputrc:

set keymap vi-command
# Go to insert mode with i, write the function's name, then hit enter
"\C-o": "ifzf_then_open_in_editor\015"

Onde \015está o código-chave para Enter.

Isso funciona, mas estou curioso para saber se existem soluções mais elegantes.

informação relacionada