Как я могу повторно привязать stty lnext к ^ q?

Вот функция shell, которая должна сделать этот трюк

appendFile(){
  local iFile oFile;
  [ ! -f "$1" ] || [ -z "$2" ] && {
    while [ ! -f "$iFile" ]; do read -p "Input file: " -i "$1" iFile; done;
    read -i "$2" -p "Output file: " oFile;
  };
  cat "${iFile-$1}" >> "${oFile-$2}";
  cat "${oFile-$2}";
}
3
20.09.2016, 15:55
1 ответ

stty lnext влияет только на внутренний редактор дисциплины линии терминального устройства (самый ограниченный, который вы получаете при запуске таких приложений, как cat , которые не имеют собственного редактора строк). Для редактора zsh вам нужно использовать bindkey ( zle не похож на readline (строковый редактор bash ), который запрашивает настройку tty LD, чтобы сделать то же самое в собственном редакторе).

stty lnext '^Q' start '' -ixon # for tty LD editor
bindkey '^Q' quoted-insert     # for zle

Обратите внимание, что вам нужно выполнить часть stty для каждого терминала и делать это снова каждый раз, когда настройки tty LD возвращаются к значениям по умолчанию, например, после stty sane .

Некоторые системы позволяют изменять настройки tty по умолчанию, например HPUX, с помощью stty lnext '^ Q' .

И для ^ V , чтобы вставить содержимое выделения X11 CLIPBOARD в курсор в редакторе строки zsh:

get-clipboard() {
  local clip
  clip=$(xclip -sel c -o 2> /dev/null && echo .) || return
  LBUFFER+=${clip%.}
}
zle -N get-clipboard
bindkey '^V' get-clipboard
5
27.01.2020, 21:22

Теги

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