URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 20410
[ Назад ]

Исходное сообщение
"как в bash сделать bind на клавишу 'стрелка вверх'?"

Отправлено gp , 04-Сен-02 20:06 
Притветствую!
Суть проблемы: в csh(FreeBSD) мне очень удобно пользоваться след. приёмом: набираются начальные буквы команды, а потом нажимается "стрелка вверх" и оставшаяся часть дополняется из предыдущей history. Делается это так:
                bindkey -k up history-search-backward
                bindkey -k down history-search-forward
В Линуксе у меня bash и я никак не могу найти в мане обозначение стрелок курсора (функция history-search-* там вроде идентична). В общем хочется так:
                *стрелка-вверх*: history-search-backward
                *стрелка-вниз*: history-search-forward
Помогите! (поставить csh в Линуксе не предлагать)

Содержание

Сообщения в этом обсуждении
"RE: как в bash сделать bind на клавишу "
Отправлено gp , 05-Сен-02 22:15 
Не дождался я помощи, да и отвечаю себе сам:

1. В ~/.bash_profile добавляем:
      INPUTRC=~/.initrc
      export INPUTRC
2. В ~/.inputrc добавляем:
      $include /etc/inputrc   #чтобы читался system-wide inputrc
      "\e[A": history-search-backward
      "\e[B": history-search-forward
PS: А правильного способа определения значений кодов клавиш я так и не нашёл. В итоге методом перебора делал следующее:
   >bind -p| grep forward-char (показывает все функции REDLINE и их привязки)
      "\C-f": forward-char
      "\eOC": forward-char
      "\e[C": forward-char
Т.е. варианта три - либо "стрелка влево" это "\eOC", или "\e[C", или два кода сразу. Перебор сказал что "\e[C". Т.о. стрелки курсора в стиле emacs - это:
      
\e[А - "вверх"
\e[B - "вниз"
\e[C - "влево"
\e[D - "вправо"

PPS: Странно но у меня не получилось сделать bind на текущий bash (bind "\e[A": history-search-backward не только приводит к необъяснимым последствиям типа пропадания символов "b" и "c", но и не выполняет привязку вообще...)


"RE: как в bash сделать bind на клавишу "
Отправлено gp , 26-Сен-02 19:54 
В общем, я разобрался в проблеме ещё немного...
1. INPUTRC необходимо определять, если только требуется ипользовать
   файл не ~/.inputrc, а другой. ~/.inputrc используется по-умолчанию
   без всяких переменных.
2. И САМОЕ ВАЖНОЕ, то из-за чего у меня были глюки - файлы инициализации
READLINE не понимают НИЧЕГО кроме комментариев, пустых строк,$-условных
операторов и определения переменных, всё остальное они воспринимают как
определения привязок клавиш! А я в них кучу команд засунул, которые
READLINЕ и принял за привязки клавиш.
3. Есть такая штука: `cat -v` - можно нажимать на спец. клавиши и видеть
их escape-последовательности!