The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
как в 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, 22:15 , 05-Сен-02 (1)
    Не дождался я помощи, да и отвечаю себе сам:

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



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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