Atajos de teclado Ch, Cm en bash

Atajos de teclado Ch, Cm en bash

IntentousosLínea de lectura GNU. Readline proporciona una colección de atajos de teclado. Sin embargo, hay algunos atajos que funcionan en bash.yque no están documentados en Readlinereferencia. Algunos ejemplos son:

  • C-h- Igual que Retroceso
  • C-m- Igual que Enter (CR, supongo)

Entonces, ¿por qué funcionan estos atajos? Supongo que esto puede tener algo que ver conASCIIpero no estoy seguro de qué componente proporciona la interpretación de estas secuencias de control como el comportamiento que he indicado.

¿Es la biblioteca Readline? ¿O es el propio bash? ¿Es mi emulador de terminal? ¿Es el núcleo? Etc...

¿Qué componente hace que estas secuencias de control se comporten de esta manera?

Editar: Mi .inputrcarchivo:

# To the extent possible under law, the author(s) have dedicated all 
# copyright and related and neighboring rights to this software to the 
# public domain worldwide. This software is distributed without any warranty. 
# You should have received a copy of the CC0 Public Domain Dedication along 
# with this software. 
# If not, see <http://creativecommons.org/publicdomain/zero/1.0/>. 

# base-files version 4.2-4

# ~/.inputrc: readline initialization file.

# The latest version as installed by the Cygwin Setup program can
# always be found at /etc/defaults/etc/skel/.inputrc

# Modifying /etc/skel/.inputrc directly will prevent
# setup from updating it.

# The copy in your home directory (~/.inputrc) is yours, please
# feel free to customise it to create a shell
# environment to your liking.  If you feel a change
# would be benifitial to all, please feel free to send
# a patch to the cygwin mailing list.

# the following line is actually
# equivalent to "\C-?": delete-char
"\e[3~": delete-char

# VT
"\e[1~": beginning-of-line
"\e[4~": end-of-line

# kvt
"\e[H": beginning-of-line
"\e[F": end-of-line

# rxvt and konsole (i.e. the KDE-app...)
"\e[7~": beginning-of-line
"\e[8~": end-of-line

# VT220
"\eOH": beginning-of-line
"\eOF": end-of-line

# Allow 8-bit input/output
#set meta-flag on
#set convert-meta off
#set input-meta on
#set output-meta on
#$if Bash
  # Don't ring bell on completion
  #set bell-style none

  # or, don't beep at me - show me
  #set bell-style visible

  # Filename completion/expansion
  #set completion-ignore-case on
  #set show-all-if-ambiguous on

  # Expand homedir name
  #set expand-tilde on

  # Append "/" to all dirnames
  #set mark-directories on
  #set mark-symlinked-directories on

  # Match all files
  #set match-hidden-files on

  # 'Magic Space'
  # Insert a space character then performs
  # a history expansion in the line
  #Space: magic-space
#$endif

Respuesta1

Los enlaces (ya sea que aparezcan en el manual o no) aparecen cuando escribes

bind -p

Por ejemplo (listado parcial):

"\C-g": abort
"\C-x\C-g": abort
"\e\C-g": abort
"\C-j": accept-line
"\C-m": accept-line
# alias-expand-line (not bound)
# arrow-key-prefix (not bound)
# backward-byte (not bound)
"\C-b": backward-char
# backward-byte (not bound)
"\C-b": backward-char
"\eOD": backward-char
"\e[D": backward-char
"\C-h": backward-delete-char
"\e[3;5~": backward-delete-char
"\C-?": backward-delete-char
"\C-x\C-?": backward-kill-line
"\e\C-h": backward-kill-word
"\e\C-?": backward-kill-word
"\eb": backward-word
"\e<": beginning-of-history

El manual documenta la -popción:

Elbind -ppantallas de comandoLínea de lecturanombres de funciones y enlaces en un formato que se puede colocar directamente en un archivo de inicialización. VerFunciones integradas de Bash.

Los enlaces (lectura del código fuente) dependen del mapa de teclas. Los que cité son delmapa de teclas de emacs, que se inicializa desde una tabla integrada antes de aplicar los scripts. Existe un archivo correspondiente con tablas para elmapa de teclas vi.

Todo eso es parte deLínea de lectura(que viene incluido con bash). Cuando bashse inicia, define los enlaces utilizando estas tablas. Dependiendo de los otros archivos que lea /etc/inputrc, ~/.inputrcpuede agregar, modificar o eliminar algunos de estos enlaces integrados.

Respuesta2

Como se señala en la sección "1.3 Archivo de inicio Readline" del manual al que hace referencia, la biblioteca readline es configurable. Las combinaciones de teclas se pueden definir en /etc/inputrc, o en su local ~/.inputrc.

información relacionada