사람이 읽을 수 있는 형식으로 키보드 단축키를 인쇄하는 방법은 무엇입니까?

사람이 읽을 수 있는 형식으로 키보드 단축키를 인쇄하는 방법은 무엇입니까?

현재 정의된 키보드 단축키에 대한 개요를 볼 수 있는 사용자 친화적인 방법이 있으면 매우 유용할 것입니다. 즉, 다음 /etc/inputrc줄이 주어지면

"\e[A": history-search-backward
"\e[11~": backward-word

그리고 ~/.inputrc라인

"\e[A": kill-word
"\e\eOD": backward-word

재정의된 파일을 확인하기 위해 두 파일을 모두 검토할 필요는 없습니다. \e[A에 대한 대체 단축키가 두 개 있습니다. backward-word\e\eOD, ... 그것이 의미하는 바가 무엇이든 kill-word실제로는 현재 파일의 끝까지 삭제한다는 의미입니다(또는 다음) 한마디. 이상적인 솔루션은 다음과 같이 인쇄됩니다.

Delete until next word boundary: Meta-A
Go to the previous word boundary: F1; Ctrl-Left
Search history backwards: Meta-Up

(이스케이프 시퀀스를 더 잘 이해하는 사람이 바로가기를 수정할 수 있기를 바랍니다.)

이것을 인쇄할 수 있는 Linux 프로그램이 있습니까?

나는 그러한 프로그램이 OS, 커널 또는 심지어 키보드에 의존적일 수 있다고 추측하고 있으므로 광범위한 구성이 필요할 수 있습니다( 예를 들어 실제로 전송되는 이스케이프 시퀀스를 설정하기 위해 기타 키를 누르 showkey거나 사용자를 폴링하는 프로그램). xev), 그러나 터미널 단축키를 효율적으로 사용하는 방법을 마침내 이해하는 데는 허용되는 가격이 될 것입니다.

답변1

짧은 대답은 '아니오'입니다. 그러한 프로그램은 존재하지 않는다고 확신합니다.

원칙적으로 하나를 만들 수 있습니다. readline 구성과 터미널 에뮬레이터를 살펴봐야 합니다(커널과 하드웨어는 관련되지 않음).

bind -P | grep 'can be found'Bash에는 키 바인딩이 나열되어 있습니다.

abort can be found on "\C-g", "\C-x\C-g", "\e\C-g".
accept-line can be found on "\C-j", "\C-m".

명령에 대해 더 설명적인 이름을 가지려면 bash 또는 readline 문서를 구문 분석해야 합니다.

키 시퀀스와 키 간의 대응은 터미널(일반적으로 터미널 에뮬레이터)에 의해 결정됩니다. 쉽게 구할 수 없는 경우가 많으며, 획득 방법은 전적으로 단말기에 따라 다릅니다.

Emacs에서는 가까이 다가갈 수 있습니다. emacs -q -nw터미널에서 시작하고 Ctrl+ H, C( describe-key-briefly명령)을 누른 다음 키 시퀀스( \eis Escape)를 누르십시오. 이는 재구성된 기능 키(있는 경우)와 해당 키가 Emacs에서 수행하는 작업을 보여줍니다. Readline의 기본 바인딩은 Emacs에서 크게 영감을 받았기 때문에 Emacs의 기능은 readline의 기능과 비슷하지만 항상 그런 것은 아닙니다. 예:

Ctrl+H C ESC [ A
<up> runs the command previous-line

답변2

bind특히 옵션이 제공될 때 Bash 내장 명령 의 여러 페이지 출력을 소화할 수 없는 동일한 문제가 있었습니다 -p.

.bashrc따라서 나는 내 파일 에 정의한 다음 두 가지 함수를 생각해 냈습니다 .

alias def=function
alias val="declare -r"
alias var=declare
alias final="readonly -f"

def keyfunctions {
  if (( "$#" )); then
    var a
    OPTIND=1
    getopts ":auI:E:" a
  else
    var a=E
    OPTIND=1
    OPTARG='self-insert$|digit-argument$|do-lowercase-version$'
  fi
  case "$a" in
    a)
      bind -p |\
        sort |\
        pr -l1 -W"$COLUMNS" -"$(($COLUMNS/30))"
    ;;
    I)
      bind -p |\
        grep -E "$OPTARG" |\
        sort |\
        pr -l1 -W"$COLUMNS" -"$(($COLUMNS/30))"
    ;;
    E)
      bind -p |\
        grep -Ev '(^$)|^#|'"$OPTARG" |\
        sort |\
        pr -l1 -W"$COLUMNS" -"$(($COLUMNS/30))"
    ;;
    u|*)
      echo >&2 "$FUNCNAME: Usage: $FUNCNAME [-a|-i <eregex>|-e <eregex>]"
      echo >&2 "$FUNCNAME: Invoking $FUNCNAME without arguments assumes -E'self-insert$|digit-argument$|do-lowercase-version$'."
      val -i b="$((OPTIND-1))"
      if [[ "$OPTARG" == : ]]; then
        echo >&2 "$FUNCNAME: Error: Invalid argument \"$OPTARG\" at position $b."
      elif [[ "$OPTARG" == ? ]]; then
        echo >&2 "$FUNCNAME: Error: Invalid option \"$OPTARG\" at position $b."
      fi
    ;;
  esac
}
final keyfunctions

def keymacros {
  bind -s |\
    sort |\
    pr -l1 -W"$COLUMNS" -"$(($COLUMNS/40))"
}
final keyfunctions

sort위의 두 정의를 실행하고 정렬된( ) 출력과 표( pr -t) 출력이 마음에 드는지 결정하세요 . 열의 수 width는 고정되어 있으며 열의 수는 의 비율과 관련됩니다 $(($COLUMNS/$width)).

관련 정보