root/lang/zsh/cdd/cdd @ 6735

Revision 6735, 2.5 kB (checked in by cho45, 5 years ago)

lang/zsh/cdd/cdd:

screen かどうかの判定方法をかえてみました ($TERM は安定しないので、$STY (現在の screen ソケット) をみるように)

Line 
1#
2# * cdd
3#  $ cdd WINDOW番号 でその screen の WINDOW 番号へ移動
4# するための zsh function
5# 他にも cdadd でショートカットの作成、cddel でショートカットの削除とか
6#
7# * 使い方
8# 1.
9# .zshrc でなにはともあれ
10#  autoload -U compinit
11#  compinit
12#  source ~/path/cdd  # (cdd はこのファイル) する
13# を書く
14#
15# 2.
16# .zshrc などで chpwd フックで _reg_pwd_screennum を呼び出す
17#  # 例
18#  function chpwd() {
19#    _reg_pwd_screennum
20#  }
21# 3.
22# enjoy!
23#
24# * Q&A
25# - なんで cdd という名前?
26# -- cd からの type が楽だから。 
27#
28# * FIXME/TODO: 誰か直して
29# - OSX で動かない。たぶん sed の挙動
30# - cdadd/cddel ってださい! cdd add, cdd del でやりたい
31# - compctl という一世代前のコマンドで補完してる。かっこいい補完にしたい。
32# - その他リファクタリング
33#
34# * author
35# - Yuichi Tateno
36#
37
38export CDD_PWD_FILE=$HOME/.zsh/cdd_pwd_list
39
40function _reg_pwd_screennum() {
41  if [ "$STY" != "" ]; then
42    if [ ! -f "$CDD_PWD_FILE" ]; then
43      echo "\n" >> "$CDD_PWD_FILE"
44    fi
45    _reg_cdd_pwd "$WINDOW" "$PWD"
46  fi
47}
48
49function _reg_cdd_pwd() {
50  if [ ! -f "$CDD_PWD_FILE" ]; then
51    echo "\n" >> "$CDD_PWD_FILE"
52    if [ $? = 1 ]; then
53      echo "Error: Don't wrote $CDD_PWD_FILE."
54      return 1
55    fi
56  fi
57  sed -i -e "/^$1:/d" "$CDD_PWD_FILE"
58  sed -i -e "1i $1:$2" "$CDD_PWD_FILE"
59}
60
61function cdd() {
62  local -A arg
63  #arg=`echo $1|awk -F':' '{print \$1}'`
64  arg=`echo $1|cut -d':' -f1`
65  #grep "^$arg:" "$CDD_PWD_FILE" > /dev/null 2>&1
66  if grep "^$arg:" "$CDD_PWD_FILE" > /dev/null 2>&1 ;then
67    local -A res
68    res=`grep "^$arg:" "$CDD_PWD_FILE"|sed -e "s/^$arg://;"|tr -d "\n"`
69    echo "$res"
70    cd "$res"
71  else
72    sed -e '/^$/d' "$CDD_PWD_FILE"
73  fi
74}
75
76
77function cdadd {
78  if [ -z "$1" ] || [ -z "$2" ]; then
79    echo "Usage: cdadd name path"
80    echo "Example: cdadd w ~/myworkspace"
81    return 1
82  fi
83
84  local -A real_path
85  if which realpath >/dev/null 2>&1;then
86    real_path=`realpath $2`
87  else
88    if which ruby >/dev/null 2>&1;then
89      real_path=`ruby -rpathname -e "puts Pathname.new('$2').realpath"`
90    else
91      echo "cdadd require realpath or ruby"
92    fi
93  fi
94  echo "add $1:$real_path"
95  _reg_cdd_pwd "$1" "$real_path"
96}
97
98function cddel() {
99  if [ -z "$1" ]; then
100    echo "Usage: cddel name"
101    return 1
102  fi
103  sed -i -e "/^$1:/d" "$CDD_PWD_FILE"
104}
105
106
107compctl -K _cdd cdd
108functions _cdd() {
109  reply=(`grep -v "^$WINDOW:" "$CDD_PWD_FILE"`)
110}
111
Note: See TracBrowser for help on using the browser.