Branch names not showing in Mercurial's tab completion

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

1 ответ

У меня была такая же проблема на 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'
}
Другие вопросы по тегам