paverでタスクリストの補完ができるようにする(汎用的じゃないです)

paver

依存関係を調査しないrubyのrakeのようなもの。Rakefileにあたるファイルはpavement.py。以下のように書く。

from paver.easy import *

@task
def hello(options):
    print "hello"

@task
def list_tasks():
    task_list = environment.get_tasks()
    for task in task_list:
        print task.shortname 

これでhelloタスクが使えるようになる(list_tasksも使える)

% paver hello
# hello

paverには利用できるタスクを表示するオプションがない。

元のコードに手を加えて、オプションを付け足しても良いけれど、とりあえずはlist_tasksを定義することでしのぐ。
タスクのリストはひょうじできるようになった。

補完がしたい

シェルから呼び出すときにタスクの候補が補完できないとちょっと辛い。zshの補完用のファイルを書く。

list_tasksに依存しているので汎用的ではないけれど、これで補完できるようになった。*1

pavement.pyにlist_tasksを自動で定義する。

emacsで開いたときに自動で挿入するようにしてあげれば良い。 

;; ~/.emacs.d/insert/がauto-insertのdirectory
  (auto-insert-mode 1)
  (setq auto-insert-query nil)
  (setq auto-insert-directory "~/.emacs.d/insert/"))

  (add-to-list 'auto-insert-alist '("pavement.py" . "pavement"))

.emacs.d/insert/pavementを作成。単なるテンプレート。文字の置換もない。

from paver.easy import *

@task
def list_tasks():
    task_list = environment.get_tasks()
    for task in task_list:
        print task.shortname

これでそれなりに快適。

*1:まだまだ、色々手直しする部分があるのですが