FedoraからUbuntuへ新たなる道のり。

FedoraからUbuntuへ4月ってだけでOSを以降。
ついでに、デスクトップをMac風に以降。
これで、僕も今日からエセマカーだ。エセかよ!!

そんなわけで、何したか忘れないように備忘録。
これからもOSを入れ替えるであろうときに役立てよう。
とか、なんとか言いながら、gnomeが壊れて勢いで消そうとしたら、
X windows消滅。。。ショッキング OTL

インストールした環境をここに示す。
必要になった、アプリやDLして保存しておいた方がよいと思ったものは。
book.macer@gmail アカウントでDropBoxに保管しておく。
DropBox超便利。

研究室開発環境必須アプリ
intel fortran compiler(ifort)
libstdc++.so.5が必要。apt-getでインストールできないのでDLして、
#cp libstdc++.so.5 /usr/lib を実行

geany(Fortran開発環境)
http://www.geany.org/より、ソースコードをDLする。
解凍後、そのディレクトリへ移動して、
$./configure を実行
必要なGTK+-2.0をインストールするため
#apt-get install gtk2.0-dev を実行
再度、
$./configure を実行
$make
#make install を続けて実行してインストール完了。

開発環境は以上で設定完了。
次に、便利に使おうということで、Zsh、Screenをインストール

Zsh

#apt-get install zsh
余裕で完了
次に、.bashrc、.zshrcにそれぞれ追記。
.bashrc
PATH="$PATH":/usr/local/bin/
if [ -n "$SSH_CONNECTION" -a -z "$SSH_TTY" ]; then
       NOZSH="nozsh"
fi
if [ -z "$NOZSH" -a -x `which zsh` ]; then
       #exec screen -l -U
       exec zsh -l
else
       echo 'no zsh'
       #source ~/.bash_specified
fi

.zshrc

#### キーバインド
bindkey -e  # Emacs風キーバインド

bindkey '^P' history-beginning-search-backward # 先頭マッチのヒストリサーチ
bindkey '^N' history-beginning-search-forward  # 先頭マッチのヒストリサーチ

#### autoload

# 色付け
autoload -U colors
colors

# 補完
autoload -U compinit
compinit
#source ~/.zsh/cdd

# predict
#autoload -U predict-on
#predict-on

#### zstyle

# 補完侯補をEmacsのキーバインドで動き回る
zstyle ':completion:*:default' menu select=1

# 補完の時に大文字小文字を区別しない
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

# 補完候補一覧をカラー表示する
zstyle ':completion:*' list-colors ''

#### history
HISTFILE="$HOME/.zhistory"      # 履歴ファイル
HISTSIZE=10000                  # メモリ上に保存される $HISTFILE の最大サイズ?
SAVEHIST=10000                  # 保存される最大履歴数

### エイリアス
case `uname` in
    Linux)
        alias ls='ls --color=auto'
        ;;
    Darwin|FreeBSD)
        alias ls='ls -GvF'
        ;;
esac
#alias -g L="| $PAGER"
#alias -g G="| grep"


#### オプション設定

## based on http://hatena.g.hatena.ne.jp/hatenatech/20060517

# 複数の zsh を同時に使う時など history ファイルに上書きせず追加する
setopt append_history

# 指定したコマンド名がなく、ディレクトリ名と一致した場合 cd する
setopt auto_cd

# 補完候補が複数ある時に、一覧表示する
setopt auto_list

# 補完キー(Tab, Ctrl+I) を連打するだけで順に補完候補を自動で補完する
setopt auto_menu

# カッコの対応などを自動的に補完する
setopt auto_param_keys

# ディレクトリ名の補完で末尾の / を自動的に付加し、次の補完に備える
setopt auto_param_slash

# 最後がディレクトリ名で終わっている場合末尾の / を自動的に取り除く
#setopt auto_remove_slash

# サスペンド中のプロセスと同じコマンド名を実行した場合はリジュームする
setopt auto_resume

# ビープ音を鳴らさないようにする
setopt NO_beep

# {a-c} を a b c に展開する機能を使えるようにする
setopt brace_ccl

# 内部コマンドの echo を BSD 互換にする
#setopt bsd_echo

# シンボリックリンクは実体を追うようになる
#setopt chase_links

# 既存のファイルを上書きしないようにする
#setopt clobber

# コマンドのスペルチェックをする
setopt correct

# コマンドライン全てのスペルチェックをする
#setopt correct_all

# =command を command のパス名に展開する
setopt equals

# ファイル名で #, ~, ^ の 3 文字を正規表現として扱う
setopt extended_glob

# zsh の開始・終了時刻をヒストリファイルに書き込む
#setopt extended_history

# Ctrl+S/Ctrl+Q によるフロー制御を使わないようにする
setopt NO_flow_control

# 各コマンドが実行されるときにパスをハッシュに入れる
#setopt hash_cmds

# 直前と同じコマンドラインはヒストリに追加しない
setopt hist_ignore_dups

# コマンドラインの先頭がスペースで始まる場合ヒストリに追加しない
setopt hist_ignore_space

# ヒストリを呼び出してから実行する間に一旦編集できる状態になる
setopt hist_verify

# シェルが終了しても裏ジョブに HUP シグナルを送らないようにする
setopt NO_hup

# Ctrl+D では終了しないようになる(exit, logout などを使う)
setopt ignore_eof

# コマンドラインでも # 以降をコメントと見なす
setopt interactive_comments

# auto_list の補完候補一覧で、ls -F のようにファイルの種別をマーク表示
setopt list_types

# 内部コマンド jobs の出力をデフォルトで jobs -l にする
setopt long_list_jobs

# コマンドラインの引数で --prefix=/usr などの = 以降でも補完できる
setopt magic_equal_subst

# メールスプール $MAIL が読まれていたらワーニングを表示する
#setopt mail_warning

# ファイル名の展開でディレクトリにマッチした場合末尾に / を付加する
setopt mark_dirs

# 補完候補が複数ある時、一覧表示 (auto_list) せず、すぐに最初の候補を補完する
setopt menu_complete

# 複数のリダイレクトやパイプなど、必要に応じて tee や cat の機能が使われる
setopt multios

# ファイル名の展開で、辞書順ではなく数値的にソートされるようになる
setopt numeric_glob_sort

# コマンド名に / が含まれているとき PATH 中のサブディレクトリを探す
#setopt path_dirs

# 8 ビット目を通すようになり、日本語のファイル名などを見れるようになる
setopt print_eightbit

# 戻り値が 0 以外の場合終了コードを表示する
# setopt print_exit_value

# ディレクトリスタックに同じディレクトリを追加しないようになる
#setopt pushd_ignore_dups

# pushd を引数なしで実行した場合 pushd $HOME と見なされる
#setopt pushd_to_home

# rm * などの際、本当に全てのファイルを消して良いかの確認しないようになる
#setopt rm_star_silent

# rm_star_silent の逆で、10 秒間反応しなくなり、頭を冷ます時間が与えられる
setopt rm_star_wait

# for, repeat, select, if, function などで簡略文法が使えるようになる
setopt short_loops

# デフォルトの複数行コマンドライン編集ではなく、1行編集モードになる
#setopt single_line_zle

# コマンドラインがどのように展開され実行されたかを表示するようになる
#setopt xtrace

# 色を使う
setopt prompt_subst

# シェルのプロセスごとに履歴を共有
setopt share_history

# history (fc -l) コマンドをヒストリリストから取り除く。
setopt hist_no_store

# 文字列末尾に改行コードが無い場合でも表示する
unsetopt promptcr

#コピペの時rpromptを非表示する
#setopt transient_rprompt

# cd -[tab] でpushd
#setopt autopushd

# alias を展開して補完
setopt complete_aliases

# magics http://www.jukie.net/~bart/blog/20071219221358
typeset -ga preexec_functions
typeset -ga precmd_functions
typeset -ga chpwd_functions


#### git

export __CURRENT_GIT_BRANCH=""
parse_git_branch() {
    git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}

preexec_functions+='zsh_preexec_update_git_vars'
zsh_preexec_update_git_vars() { # FIXME 1コマンド分遅れる
    local hist
    local histcmd
    histcmd=`expr $HISTCMD - 1` 
    hist="$(history $histcmd)"
    case $hist in 
        *git*)
        echo $hist >> /tmp/git-hist
        export __CURRENT_GIT_BRANCH="$(parse_git_branch)"
        ;;
    esac
}

chpwd_functions+='zsh_chpwd_update_git_vars'
zsh_chpwd_update_git_vars() {
    export __CURRENT_GIT_BRANCH="$(parse_git_branch)"
}

get_git_prompt_info() {
    if [ -n "$__CURRENT_GIT_BRANCH" ]; then
        echo " ($__CURRENT_GIT_BRANCH)"
    fi
}

#### screen

chpwd_functions+='zsh_chpwd_for_screen'
zsh_chpwd_for_screen () { 
    if [ "$TERM" = "screen" ]; then
        echo -n "e_`dirs`e\\" 
        _reg_pwd_screennum
    fi
}

## screenのWindowの名前を最後に実行したコマンド名にする
# this is from  http://nijino.homelinux.net/diary/200206.shtml#200206140
preexec_functions+='zsh_preexec_for_screen'
zsh_preexec_for_screen() {
    if [ "$TERM" = "screen" ]; then
        # see [zsh-workers:13180]
        # http://www.zsh.org/mla/workers/2000/msg03993.html
        emulate -L zsh
        local -a cmd; cmd=(${(z)2})
        case $cmd[1] in
            fg)
                if (( $#cmd == 1 )); then
                    cmd=(builtin jobs -l %+)
                else
                    cmd=(builtin jobs -l $cmd[2])
                fi
                ;;
            %*) 
                cmd=(builtin jobs -l $cmd[1])
                ;;
            cd|ssh)
                if (( $#cmd >= 2)); then
                    cmd[1]=$cmd[2]
                fi
                ;&
            *)
                echo -n "ek$cmd[1]:te\\"
                return
                ;;
        esac

        local -A jt; jt=(${(kv)jobtexts})

        $cmd >>(read num rest
            cmd=(${(z)${(e):-\$jt$num}})
            echo -n "ek$cmd[1]:te\\") 2>/dev/null
    fi
}

#### プロンプト
unsetopt promptcr
setopt prompt_subst
#PROMPT='${WINDOW:+"$WINDOW:"}%{$fg[green]%}%n@%m%{$reset_color%}%{$fg[cyan]%}[%!]%{$reset_color%}%(!.#.$) '
#RPROMPT='%{$fg[yellow]%}[%~]%{$reset_color%}'
#PROMPT=$'${WINDOW:+"$WINDOW:"}%{$fg[green]%}%n@%m%{$reset_color%} %{$fg[cyan]%}(%!)%{$reset_color%} %{$fg[yellow]%}[%~]%{$reset_color%} \n%(!.#.$) '
#PROMPT='YUKI.N> '
#PROMPT='%m%(!.#.$) '
#RPROMPT="[%m - %T]"
#PROMPT=$'%{$fg[green]%}[%m:%~]%{$reset_color%}''$(get_git_prompt_info)'$' %{$fg[yellow]%}%T%{$reset_color%}\n/ _ / X < '
PROMPT=$'%{$fg[cyan]%}[%m:%~]%{$reset_color%}''$(get_git_prompt_info)'$' %{$fg[yellow]%}%T%{$reset_color%}\n${WINDOW:+"$WINDOW:"}%{$fg[green]%}%n%{$reset_color%}%{$fg[yellow]%}[%!]%{$reset_color%}%(!.#.$) '

# sshの接続先をscreenのWindowタイトルにする
#function ssh_screen(){
#    eval server=\${$#}
#    screen -t $server ssh "$@"
#}
#if [ x$TERM = xscreen ]; then
#    alias ssh=ssh_screen
#fi

#### keychainでagentをロードする
#if [ -x `which keychain` ]; then
#    keychain --quiet --agents ssh ~/.ssh/id_dsa
#    for i in ~/.keychain/${HOST}-sh*
#    do
#        source $i
#    done
#fi


#### 個人用設定ファイルがあればそれを読み込む
if [ -e ~/.zshrc_private ]; then
    source ~/.zshrc_private
fi

#### エイリアスファイルがあれば読み込む
if [ -e ~/.alias ]; then
    source ~/.alias
fi