Как распечатать сочетания клавиш в человекочитаемой форме?

Существует grsecurity patchset (включенный в SELinux, но не имеет ужасно сложной системы разрешения MAC последнего) для ядра Linux, которое предлагает опцию разрешения только владельца (и корень) для наблюдения его процессов. Это также предлагает другим положительным героям, не будучи столь же навязчивым как SELinux.

Подобная опция находится там на Солярисе, или таким образом, я слышал.

5
19.03.2012, 20:44
2 ответа

Короткий ответ не, я вполне уверен, никакая такая программа не существует.

Вы могли в принципе создать тот; это должно было бы посмотреть на 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".

Чтобы иметь более описательное имя для команды, необходимо было бы проанализировать удар или readline документацию.

Корреспонденция между сочетаниями клавиш и ключами определяется терминалом (обычно, эмулятор терминала). Это часто не легко доступно, и когда это - метод для получения его, совершенно характерно для терминала.

Можно приблизиться в Emacs: запустить emacs -q -nw в терминале, и нажимают Ctrl+H, C ( describe-key-briefly команда) затем сочетание клавиш (\e Escape). Это показывает Вам восстановленную функциональную клавишу, если таковые имеются, и что ключ делает в Emacs. Привязка Readline по умолчанию сильно вдохновлена Emacs, таким образом, часто функция в Emacs подобна функции в readline, но не всегда. Пример:

Ctrl+H C ESC [ A
<up> runs the command previous-line
3
27.01.2020, 20:41

У меня была та же самая проблемная неспособность переварить несколько страниц вывода от 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)).

0
27.01.2020, 20:41
  • 1
    1 Это просто печатает сведенную в таблицу версию bind вывод, с усеченными именами функций. "Человекочитаемая" часть вопроса была о преобразовании, например, "\e[A": kill-word во что-то как Delete until next word boundary: Meta-A (частичная реализация). Кроме того, это было бы более просто читать, если бы Вы не переопределяли стандартный синтаксис Bash. –  l0b0 17.11.2012, 22:29

Теги

Похожие вопросы