Hatena::ブログ(Diary)

cooldaemonの備忘録 RSSフィード

2007-05-17

コマンド一発で、screen を起動して Catalyst の各種ディレクトリに移動

Catalyst Teamwork with Screen and VIM

この記事を見て、便利そうだと思ったので、即興ですが、こんなん作ってみました。

http://labs.miu.vc/svn/cooldaemon/env/bin/start_working_with_catalyst.pl

ちゃんと動作確認してませんが、手元の環境では問題なさげ・・・。

このコマンドを、Catalyst のディレクトリ名を引数にして実行すると screen を起動し、下記ディレクトリを開きます。

/path/to/MyApp-Web/

/path/to/MyApp-Web/lib/MyApp/Schema

/path/to/MyApp-Web/root

/path/to/MyApp-Web/lib/MyApp/Web/Controller

.screenrc を読んで、.screenrc に必要な内容を追加して、.screenrc.tmp に吐き出し、screen -c .screenrc.tmp を実行してます。

各 window にタイトルを付ける場合は、screenrc.tmp 吐き出しの際の screen の行を、screen -t [好きな名前] とかにします。

bind key にも対応しました。

例えば・・・ <C-a><C-c>c で Controller のディレクトリに移動します。

参考URI

アキレス亀日記 - 2004/05c Diary

2006-11-13

status line の title 切り替えを修正

# GNU screen title
if [ "$TERM" = "screen" ]; then
  preexec() {
    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])
        ;;
      ls)
        return
        ;; 
      cd)
        if (( $#cmd == 2)); then
          cmd[1]=$cmd[2]:t
        else
          cmd[1]="~"
        fi
        change_status_title $cmd[1]
        return
        ;;
      vim|vi|gvim)
        if (( $#cmd == 2)); then
          cmd[1]="v:$cmd[2]:t"
        fi
        change_status_title $cmd[1]
        return
        ;;
      *)
        change_status_title $cmd[1]:t
        return
        ;;
    esac

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

    $cmd >>(
      read num rest
      cmd=(${(z)${(e):-?$jt$num}})
      echo -n "^[k$cmd[1]:t^[??"
    ) 2>/dev/null
  }

  change_status_title() {
    echo -n "^[k$1^[??"
  }
fi

新たに status line の title を簡単に変更できるように関数 change_status_title を定義し、vi を実行した際に 'v:ファイル名' となるよう修正した。

2006-03-31

環境ファイルとか、よく使うコマンドとか

最近の環境ファイル

.screeenrc

password XXXXXXX
startup_message off
defscrollback 5000
autodetach on
hardstatus alwayslastline "%w | %h"

bind w windowlist -b
bind r eval 'echo "Resize window"' 'command -c resize'
bind -c resize ^]  command
bind -c resize j eval 'resize +1' 'command -c resize'
bind -c resize k eval 'resize -1' 'command -c resize'

かなりシンプル。

password は「^a:password」で作成。

OSX で Terminal を使う際、defencoding を設定すると文字化けする・・・設定しないと文字化けしない・・・何故?orz

Windows を使う際は、キーボードの都合上「escape ^z^z」を設定している。

よく使うコマンド

下記は全て「^a」の後に入力するコマンド。

コマンド機能
c新しいウインドウの作成
ウインドウ番号指定したウインドウに移動
wウインドウの一覧を表示してから移動(GNUscreen 普及運動の時にのみ使用 w)
Sウインドウ分割(Web サーバのエラーログを「tail -f」で監視みたいな用途以外は使わない)
Qウインドウ分割解除
r分割ウインドウのリサイズ(上記の .screenrc の bind r を参照の事)
Aウインドウのタイトル変更(zsh を使えない環境の場合に使用。zsh との連携は id:cooldaemon:20060206 このエントリの .zshrc.screen 参照の事)
dデタッチ(終電間際に開発サーバ上でよく使う。翌日出勤した際は「screen -r」でレジューム。デタッチを忘れたけど自宅から使いたい時は「screen -x」)
[コピーモード開始(<ESC>でも良い。コピーモードでは vi ライクな hjkl で移動。一回目の<SPACE>でコピー開始位置指定。二回目の<SPACE>でコピー開始位置からの文字列をコピーバッファにコピーしてコピーモード終了。<SPACE>は<ENTER>でも良い)
]コピーバッファの文字列をペースト