だるろぐ

だるいぶろぐです

autojump入れた

  • autojump最新版はpython2.6を要する
  • prefix変えて2.6入れたけど、tagsに2.4対応版があったのでそっち使った
    • ただし大分古い。機能の違いは知らん


2.4しか入っていない状態(2.6が$PATHに無い)でinstall.shを叩くと以下のように言われるのでv12を入手。

Alternatively, you can download v12 that supports Python v2.4+ from:
https://github.com/joelthelion/autojump/tags

git submoduleにしようと思ったけど、install.zshを見て少々書き換えたくなったので直にzip持ってきて俺dotfilesに配置。
どこに置こうか悩んだ挙句 dotfiles/.opt/autojump_v12 とかいうパスに。ubuntuが確か /opt にoptionalなパッケージ入れるんだっけとか思って。
vundleみたいにそもそも ~/.vim のようにパッケージが属するのに適したディレクトリが無い(多分)ので、まあここでいいかと。


zshを使うと $fpath という環境変数が作られる。基本的にsudoが不要な場所にzshを入れて使っているけどそうじゃない環境もある。
fpathは /usr/local/share/zsh/site-functions みたいな場所。install.zshの中でここに_jをcpしているがさすがにsudoが要る。
自分一人だけの環境しか使わないならまだしも、そうはいかない場合も多々あるので、極力自分にしか影響が及ばないようにしたい。


さて。
まずはインストールのためのスクリプトを作る。setup_autojump.zshと名前を付ける。

cd .opt/autojump_v12/
_fpath=`echo $fpath | cut -d " " -f 1`
sudo cp _j $_fpath
mkdir -p ~/.autojump/share/man/man1
$SHELL ./install.zsh --prefix ~/.autojump

こんなのを /path/to/my/zsh ./setup_autojump.zsh で実行する。shだと $fpath が定義されない。
cdするのは後でそうしといたほうがいいため。
mkdirは後々使う。そして実行時に $SHELL がzshであることを期待する。さすがにそんくらい期待していいと思われる。
あと俺の場合は$HOMEにbinディレクトリが有る前提なので作ってないけど、無いなら作る。


んでinstall.zshを書き換える。fpathが絡むところ以外はsudoを除外する。

% diff org/install.zsh /path/to/my_dotfiles/.opt/autojump_v12/install.zsh
42,46c42,48
< sudo mkdir -p ${prefix}/share/autojump/
< sudo cp icon.png ${prefix}/share/autojump/
< sudo cp jumpapplet ${prefix}/bin/
< sudo cp autojump ${prefix}/bin/
< sudo cp autojump.1 ${prefix}/share/man/man1/
---
> mkdir -p ${prefix}/share/autojump/
> cp icon.png   ${prefix}/share/autojump/
> cp autojump.1 ${prefix}/share/man/man1/
>
> _pwd=`pwd`
> ln -s "${_pwd}/jumpapplet" $HOME/bin/
> ln -s "${_pwd}/autojump"   $HOME/bin/
<
< if [ -d "/etc/profile.d" ]; then
<     sudo cp autojump.zsh /etc/profile.d/
<     sudo cp autojump.sh /etc/profile.d/
<     echo "Remember to add the line"
<     echo "    source /etc/profile.d/autojump.zsh"
<     echo "or"
<     echo "    source /etc/profile"
<     echo "to your ~/.zshrc if it's not there already"
< else
<     echo "Your distribution does not have a /etc/profile.d directory, the default that we install one of the scripts to. Would you like us to copy it into your ~/.zshrc fil  to make it work? (If you have done this once before, delete the old version before doing it again.) [y/n]"
<     read ans
<     if [ ${#ans} -gt 0 ]; then
<       if [ $ans = "y" -o $ans = "Y" -o $ans = "yes" -o $ans = "Yes" ]; then
<           echo "" >> ~/.zshrc
<           echo "#autojump" >> ~/.zshrc
<           cat autojump.zsh >> ~/.zshrc
<       else
<           echo "Then you need to put autojump.zsh, or the code from it, somewhere where it will get read. Good luck!"
<       fi
<     else
<           echo "Then you need to put autojump.zsh, or the code from it, somewhere where it will get read. Good luck!"
<     fi
< fi

jumpstatとautojumpの2つのファイルをパスが通ったところに置こうとするので、symlinkで我慢していただく。
オリジナルのinstall.zshが、

  1. /etc/profile.d/ にファイルを置こうとする
  2. 置けるならよし。置けないなら「.zshrcでsourceしてね」という

となっている。/etc/とかにもの置いてほしくないので、.zshrcに "$HOME/.opt/autojump_v12/autojump.zsh" が存在すればそれをsourceする、ように書く。

load_if_exists () {
    if [ -e $1 ]; then
        source $1
    fi
}

load_if_exists "$HOME/.opt/autojump_v12/autojump.zsh"

あとは ln -s .opt ~/ などとする。


さてこれで j が使えるようになったわけだけど正直そんな便利だとまだ感じていなかったりする。
ああそれにしても人が見ても意味分からんなこれ。むしろ自分も分からん。
ソース見つつ書き換えつつ色々やるのはいいんだけど後からそれをまとめる能力が欠けている。
人に上手に説明できる人凄いよねー


まあ分からんくなっても https://github.com/hirafoo/dotfiles をcloneするだけで済むし俺は困らんので別にいい。
そして一通りsetupしたところでautojumpよりz.shのほうがPythonなしで動いて良いよ | この先生きのこるにはとか見つけて何ともいえなくなる。何使えばええんや。