Я написал простую функцию завершения, которая делает то, что я хочу, с одним исключением. Его дополнения не раскрываются, когда я набираю M- * («вставки-дополнения») так, как это делается в файлах.

Это неотъемлемое ограничение или что-то, что я могу включить?

Я только что попробовал это на другом компьютере (с немного другой версией BASH), и это работало там.

  • Работает: 3.2.25(1)-релиз (Linux, CentOS 5.5)
  • No-Go: 3.2.48 (1)-релиз (MacOS X 10.6.7)

Обновление: я ищу гипотезу, которая могла бы объяснить несоответствие между этими двумя системами.

1 ответ1

0

Я просто добавил следующий код с этой веб-страницы в мой .bash_profile:

_foo() 
{
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts="--help --verbose --version"

    if [[ ${cur} == -* ]] ; then
        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
        return 0
    fi
}
complete -F _foo foo

foo -- расширяется до foo --help --verbose --version при нажатии Meta-* в Terminal.app.

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
Copyright (C) 2007 Free Software Foundation, Inc.

Итак: я не могу воспроизвести с той же версией bash на Mac OS X 10.6.7. Изменили ли вы свою среду после установки, например, установку сторонних Unix-материалов через Macports/Fink/Homebrew? Попробуйте использовать новую конфигурацию терминала, создав новую учетную запись пользователя.

Убедитесь, что вы действительно нажимаете Meta - это настраивается в терминале. Если вы не установите эту опцию, нет Meta:

Работают ли другие ярлыки Meta из readline ?


Если это не сработает: поскольку 10.7.0 Lion еще не доступен в продаже, я предлагаю вам ожидать, что в предварительном выпуске программного обеспечения будут ошибки и сообщать о них на соответствующий сайт.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .