The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"как в bash сделать bind на клавишу 'стрелка вверх'?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"как в bash сделать bind на клавишу 'стрелка вверх'?"
Сообщение от gp Искать по авторуВ закладки on 04-Сен-02, 20:06  (MSK)
Притветствую!
Суть проблемы: в 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 в Линуксе не предлагать)
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: как в bash сделать bind на клавишу "
Сообщение от gp emailИскать по авторуВ закладки on 05-Сен-02, 22:15  (MSK)
Не дождался я помощи, да и отвечаю себе сам:

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", но и не выполняет привязку вообще...)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

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


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру