2

У меня есть машина для разработки под управлением Mercurial 1.6.3. Завершение табуляции в bash отлично подходит для завершения команд, тегов и имен веток. Я настроил новую машину с той же версией Mercurial (обе работают на Python 2.6), но когда я пытаюсь использовать завершение табуляции, я получаю только команды и теги hg для отображения - без имени ветки. Есть ли что-то, что мне нужно настроить, чтобы включить имена филиалов? Благодарю.

1 ответ1

2

У меня была такая же проблема на OSX El Capitan и Ubuntu 16.04.

В Ubuntu я изначально вручную пропатчил /usr/share/zsh/functions/Completion/Unix/_hg . Но поскольку системные файлы были защищены в OSX, я установил oh-my-zsh, что, вероятно, является лучшим решением, чем касаться системных файлов zsh. Вы можете внести эти изменения прямо в файл _hg если не хотите использовать zsh.

После установки oh-my-zsh я скопировал /usr/share/zsh/functions/Completion/Unix/_hg в ~/.oh-my-zsh/custom/plugins/hg/_hg .

Затем изменил файл _hg заменив функцию _hg_tags()

_hg_tags() {
  local expl
  typeset -a hglabels
  hglabels=( ${(f)"$(_hg_cmd debugnamecomplete -q 2>/dev/null)"} )
  _wanted labels expl 'labels' compadd -a - hglabels
}

Чтобы загрузить zsh, измените ~/.zshrc и добавьте hg в раздел plugins=(... hg) .

Вы можете изменить другие функции для использования _hg_tags. Я нашел после того, как использовать его немного _hg_cmd_merge необходимо обновить , чтобы использовать _hg_tags

_hg_cmd_merge() {
  _arguments -s -w : $_hg_global_opts \
  '(--force -f)'{-f,--force}'[force a merge with outstanding changes]' \
  '(--rev -r 1)'{-r,--rev}'[revision to merge]:revision:_hg_tags' \
  '(--preview -P)'{-P,--preview}'[review revisions to merge (no merge is performed)]' \
  ':revision:_hg_tags'
}

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