ひよっこ。

I want to…

Posts Tagged ‘bash-completion’

bzr2.5に更新したら、bash-completionがエラーになっちまった

Posted by hikaruworld : 2012 5月 3

bzrのバージョンを2.5にupdateしたところ、bash_completion
エラーになってしまってちょっと困ってました。
導入した経緯は、ここを参照。

出力されるエラーはこんな感じです。

bash-3.2$ bzr stbzr: ERROR: exceptions.AttributeError: 'module' object has no attribute 'shlex_split_unicode'

Traceback (most recent call last):
  File "/usr/local/Cellar/bazaar/2.5.0/libexec/bzrlib/commands.py", line 920, in exception_to_return_code
    return the_callable(*args, **kwargs)
  File "/usr/local/Cellar/bazaar/2.5.0/libexec/bzrlib/commands.py", line 1131, in run_bzr
    ret = run(*run_argv)
  File "/usr/local/Cellar/bazaar/2.5.0/libexec/bzrlib/commands.py", line 673, in run_argv_aliases
    return self.run(**all_cmd_args)
  File "/usr/local/Cellar/bazaar/2.5.0/libexec/bzrlib/commands.py", line 695, in run
    return self._operation.run_simple(*args, **kwargs)
  File "/usr/local/Cellar/bazaar/2.5.0/libexec/bzrlib/cleanup.py", line 136, in run_simple
    self.cleanups, self.func, *args, **kwargs)
  File "/usr/local/Cellar/bazaar/2.5.0/libexec/bzrlib/cleanup.py", line 166, in _do_with_cleanups
    result = func(*args, **kwargs)
  File "/Users/hoge/.bazaar/plugins/bash_completion/__init__.py", line 62, in run
    bash_completion_function(sys.stdout, **kwargs)
  File "/Users/hoge/.bazaar/plugins/bash_completion/bashcomp.py", line 401, in bash_completion_function
    data = dc.collect()
  File "/Users/hoge/.bazaar/plugins/bash_completion/bashcomp.py", line 303, in collect
    self.aliases()
  File "/Users/hoge/.bazaar/plugins/bash_completion/bashcomp.py", line 317, in aliases
    for token in commands.shlex_split_unicode(expansion):
AttributeError: 'module' object has no attribute 'shlex_split_unicode'

bzr 2.5.0 on python 2.7.3 (Darwin-10.8.0-i386-64bit)
arguments: ['/usr/local/bin/bzr', 'bash-completion']
plugins: bash_completion[1.2.1dev], bzrtools[2.4.1], cd[unknown],
    changelog_merge[2.5.0], colo[0.3.1dev], difftools[0.91.0],
    extmerge[unknown], hello_world[1.2.3dev4], launchpad[2.5.0],
    netrc_credential_store[2.5.0], news_merge[2.5.0], po_merge[2.5.0],
    qbzr[0.21.0dev2], rewrite_interactive[unknown], vimdiff[unknown],
    weave_fmt[2.5.0], xmloutput[0.8.8]
encoding: 'utf-8', fsenc: 'utf-8', lang: 'ja_JP.UTF-8'

shlex_split_unicodeがないって言われているみたいなんだけど、bzrのソースコードを覗いたところ、
確かになくなってしまっています。
log見たけど、2.2辺りで非推奨になってrev6030で消えてしまったみたいです。

ただ、対象の関数が行っている処理自体は大した事なくて、cmdlineモジュールに委譲しているだけでした。

def shlex_split_unicode(unsplit):
    return cmdline.split(unsplit)

という訳で、以下の用にbash_completionを修正。

=== modified file 'bashcomp.py'
--- bashcomp.py	2010-05-29 08:42:48 +0000
+++ bashcomp.py	2012-05-03 12:51:03 +0000
@@ -24,6 +24,7 @@
     help_topics,
     option,
     plugin,
+    cmdline,
 )
 import bzrlib
 import re
@@ -314,7 +315,7 @@
 
     def aliases(self):
         for alias, expansion in config.GlobalConfig().get_aliases().iteritems():
-            for token in commands.shlex_split_unicode(expansion):
+            for token in cmdline.split(expansion):
                 if not token.startswith("-"):
                     self.user_aliases.setdefault(token, set()).add(alias)
                     break

これでOKでした。
以上です。

Posted in program | タグ: , | Leave a Comment »

npm completionがあると聞いて

Posted by hikaruworld : 2011 12月 27

npmについてまとめてみるというブログのエントリーをを見ていて、
npm completionという便利なコマンドがあると知ったので設定してみた。

自分の環境ではnave経由なので、
こんな感じに~/.bashrcに書いてみました。気持ちはpythonのvirtualenv風味。
起動時に$NAVEが設定されていた場合対象バージョンのinstalledディレクトリのpostactivateが存在した場合に読み込みます。

# read nave postactivate script
if [ -n $NAVE ]; then
    echo $NAVE_ROOT/$NAVEVERSION/postactivate
    if [ -f $NAVE_ROOT/$NAVEVERSION/postactivate ]; then
        . $NAVE_ROOT/$NAVEVERSION/postactivate
    fi
fi

postactivateはこんな感じ。
node有効にしたときの処理を色々書けていいかも。

#!/bin/bash

# read npm completion
. <(npm completion)

快適になった♪

naveのやつはないのかな。
あと、postactivateするとpostinstalledとか作って必要なnpmパッケージをインストールしたくなりますね。
nave.sh的のソース見てたんですが、サブシェルの起動まわりをちゃんと理解してなかったのでまた気が向いたときにでも。

以上です。

Posted in program | タグ: , , , | Leave a Comment »

MacOSXでbzrのbash-completionを利用する

Posted by hikaruworld : 2011 12月 23

MacのTerminalをbash環境で利用している場合に、bzrのbash-completionが欲しくなります。
bash-completionとは何かはこの辺りが参考になるかと。

bash-completionをhomebrewで

自分はbash-completionをhomebrewでインストールしたので、こんな感じ。

$ brew install bash-completion

で言われるがままに、~/.bashrcにこれを追記するとコード補完が有効になります。

if [ -f `brew --prefix`/etc/bash_completion ]; then
    . `brew --prefix`/etc/bash_completion
fi

bazaarのbash-completionを有効に

残念ながらそのままではgitやsvnは補完してくれますが、
bazaarは補完してくれません(Macの場合)。
bazaarを補完してもらうためには、bzr bash-completionをインストールします。

通常のプラグインと同じように、~/.bazaar/plugins以下にbranchを取得します。

bzr branch lp:bzr-bash-completion bash-completion

有効化するためにREADMEにあるように、~/.bashrcに以下を追記。

# read bash_completion for bzr
if [ -f $HOME/.bazaar/plugins/bash_completion/lazy.sh ]; then
    . $HOME/.bazaar/plugins/bash_completion/lazy.sh
fi

eval “`bzr bash-completion`”でもよいようですが、遅延初期化の方が無駄な待ちがないので。

これで、bzr sとか入れてTABを押すとこんな感じで補完されます。

bash-3.2$ bzr s
s-c              server           shelve           st
selftest         shelf1           shelve1          stat
send             shell            sign-my-commits  status
serve            shell-complete   split            switch

これで、変なタイポを減らせます。
# なぜかuncommitのコマンドばかり間違える私もこれでさよなら。

Posted in program | タグ: , , | Leave a Comment »