Llamar a funciones desde bashrc en inputrc

Llamar a funciones desde bashrc en inputrc

Estoy en Arch Linux (4.13.11) y en mi .bashrc, hay una función personalizada que encuentra un archivo usandofzfy luego abre ese archivo con el editor predeterminado:

# 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
}

He configurado mi .inputrc, para usar combinaciones de teclas similares a Vim para el shell:

set editing-mode vi

Preferiblemente, podría presionar Ctrl+ ocuando esté en modo comando para llamar a mi función fzf_then_open_in_editor.

Lo intenté

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

pero eso no funcionó.

En .inputrc, ¿cómo puedo crear combinaciones de teclas para funciones definidas en .bashrc?

Respuesta1

El formulario key: functionsolo acepta funciones integradas de readline. Como descubriste, para ingresar texto necesitas lo que se llama una macro que debe estar entre comillas: key: "my macro\r". No veo por qué necesita comenzar con un comando de inserción, ya que normalmente ya está en modo de inserción en el símbolo del sistema.

Si desea llamar a una función, use un enlace de comando de shell con la opción -x. No conozco ninguna forma de poner este enlace en un ~/.inputrc, pero puedes poner el siguiente comando en tu .bashrc:

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

Respuesta2

Obtuve lo que quería agregando esto 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"

¿Dónde \015está el código clave para Enter.

Esto funciona, pero tengo curiosidad por saber si existen soluciones más elegantes.

información relacionada