2014-12-19 3 views
4

Django bash completion позволяет выполнять заглавные команды django-admin.py и manage.py в bash.Можно ли использовать заполнение Django bash в zsh

Существуют сценарии автозаполнения для zsh для django, но они не работают с пользовательскими командами. Один из них находится в проекте oh-my-zsh.

Я также в курсе bashcompinit но это не похоже на работу с Джанго-администратора, производя следующее сообщение об ошибке:

./manage.py Traceback (most recent call last): 
    File "./manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line 
    utility.execute() 
    File "lib/python2.7/site-packages/django/core/management/__init__.py", line 356, in execute 
    self.autocomplete() 
    File "lib/python2.7/site-packages/django/core/management/__init__.py", line 266, in autocomplete 
    cwords = os.environ['COMP_WORDS'].split()[1:] 
    File "bin/../lib/python2.7/UserDict.py", line 23, in __getitem__ 
    raise KeyError(key) 
KeyError: 'COMP_WORDS' 

Можно ли иметь завершение оргии Django работает с Zsh? Или есть еще одна альтернатива, которая позволила бы использовать пользовательские команды администратора django.

ответ

2

Вы можете пропатчить django_bash_completion что-то, как показано ниже:

--- django_bash_completion.old 2014-12-23 10:41:35.589103686 +0900 
+++ django_bash_completion 2014-12-23 10:43:27.224848105 +0900 
@@ -33,7 +33,7 @@ 

_django_completion() 
{ 
- COMPREPLY=($(COMP_WORDS="${COMP_WORDS[*]}" \ 
+ COMPREPLY=($(env COMP_WORDS="${COMP_WORDS[*]}" \ 
        COMP_CWORD=$COMP_CWORD \ 
        DJANGO_AUTO_COMPLETE=1 $1)) 
} 

На Zsh (ЗШ-5.0.7 здесь), он прекрасно работает с явным использованием env(1). Выше патча не болит bash (я тестировал на bash-4.3.30 (1) -release).

+0

Кажется, что 'emulate' с обработкой подоболочки путают zsh. Например: '() {A = (a b c); эмулировать -L sh; (A = "$ {A [*]}" printenv A)} 'ничего не печатает, и в этом конкретном случае он вызывает KeyError:" COMP_WORDS ". Но '() {A = (a b c); эмулировать -L zsh; (A = "$ {A [*]}" printenv A)} 'prints 'a b c'. Из-за этого поведения на zsh я использую 'env (1) 'для автоматического экспорта' COMP_WORDS' на мой ответ. – hchbaw

+0

Спасибо, это работает – bmihelac

+1

Эта ошибка zsh была рассмотрена недавно, поэтому нам не нужна эта работа для предстоящих новых выпусков zsh (может быть, 5.0.8?). – hchbaw

Смежные вопросы