Blame view

antigen.zsh 5.55 KB
e5dfac7ea   Shrikant Sharat   Initial commit. W...
1
2
3
4
  #!/bin/zsh
  
  # Each line in this string has the following entries separated by a space
  # character.
a12d3140a   Shrikant Sharat   Removed bundle-in...
5
  # <repo-url>, <plugin-location>, <bundle-type>
e5dfac7ea   Shrikant Sharat   Initial commit. W...
6
  # FIXME: Is not kept local by zsh!
9dc631003   Shrikant Sharat   Rename bundle rec...
7
  local _ANTIGEN_BUNDLE_RECORD=""
e5dfac7ea   Shrikant Sharat   Initial commit. W...
8
9
  
  # Syntaxes
280ec4481   Shrikant Sharat   name argument for...
10
  #   bundle <url> [<loc>=/]
e5dfac7ea   Shrikant Sharat   Initial commit. W...
11
12
13
14
15
  bundle () {
  
      # Bundle spec arguments' default values.
      local url="$ANTIGEN_DEFAULT_REPO_URL"
      local loc=/
d535ba468   Shrikant Sharat   Introduced a new ...
16
      local btype=plugin
e5dfac7ea   Shrikant Sharat   Initial commit. W...
17
18
  
      # Set spec values based on the positional arguments.
280ec4481   Shrikant Sharat   name argument for...
19
      local position_args='url loc'
e5dfac7ea   Shrikant Sharat   Initial commit. W...
20
21
      local i=1
      while ! [[ -z $1 || $1 == --*=* ]]; do
43bb2cef1   Shrikant Sharat   Variable declarat...
22
23
          local arg_name="$(echo "$position_args" | cut -d\  -f$i)"
          local arg_value="$1"
e5dfac7ea   Shrikant Sharat   Initial commit. W...
24
25
26
27
          eval "local $arg_name='$arg_value'"
          shift
          i=$(($i + 1))
      done
1abf1faf6   Shrikant Sharat   Plugins can be sp...
28
29
30
31
32
      # Check if url is just the plugin name. Super short syntax.
      if [[ "$url" != */* ]]; then
          loc="plugins/$url"
          url="$ANTIGEN_DEFAULT_REPO_URL"
      fi
e5dfac7ea   Shrikant Sharat   Initial commit. W...
33
34
35
      # Set spec values from keyword arguments, if any. The remaining arguments
      # are all assumed to be keyword arguments.
      while [[ $1 == --*=* ]]; do
43bb2cef1   Shrikant Sharat   Variable declarat...
36
37
          local arg_name="$(echo "$1" | cut -d= -f1 | sed 's/^--//')"
          local arg_value="$(echo "$1" | cut -d= -f2)"
e5dfac7ea   Shrikant Sharat   Initial commit. W...
38
39
40
41
42
43
          eval "local $arg_name='$arg_value'"
          shift
      done
  
      # Resolve the url.
      if [[ $url != git://* && $url != https://* ]]; then
bb140864c   Shrikant Sharat   The plugin name s...
44
          url="${url%.git}"
bb140864c   Shrikant Sharat   The plugin name s...
45
          url="https://github.com/$url.git"
e5dfac7ea   Shrikant Sharat   Initial commit. W...
46
      fi
e5dfac7ea   Shrikant Sharat   Initial commit. W...
47
      # Add it to the record.
a12d3140a   Shrikant Sharat   Removed bundle-in...
48
49
50
51
      _ANTIGEN_BUNDLE_RECORD="$_ANTIGEN_BUNDLE_RECORD
  $url $loc $btype"
  
      -antigen-ensure-repo "$url"
e5dfac7ea   Shrikant Sharat   Initial commit. W...
52

a12d3140a   Shrikant Sharat   Removed bundle-in...
53
      bundle-load "$url" "$loc" "$btype"
2ac7c0cb0   Shrikant Sharat   Bundles are insta...
54

a12d3140a   Shrikant Sharat   Removed bundle-in...
55
  }
2ac7c0cb0   Shrikant Sharat   Bundles are insta...
56

a12d3140a   Shrikant Sharat   Removed bundle-in...
57
58
59
60
61
62
63
64
65
  -antigen-get-clone-dir () {
      # Takes a repo url and gives out the path that this url needs to be cloned
      # to. Doesn't actually clone anything.
      # TODO: Memoize?
      echo -n $ADOTDIR/repos/
      echo "$1" | sed \
          -e 's/\.git$//' \
          -e 's./.-SLASH-.g' \
          -e 's.:.-COLON-.g'
2ac7c0cb0   Shrikant Sharat   Bundles are insta...
66
67
68
69
70
71
72
73
74
75
76
77
78
79
  }
  
  -antigen-ensure-repo () {
  
      local update=false
      if [[ $1 == --update ]]; then
          update=true
          shift
      fi
  
      local handled_repos=""
      local install_bundles=""
  
      local url="$1"
a12d3140a   Shrikant Sharat   Removed bundle-in...
80
      local clone_dir="$(-antigen-get-clone-dir $url)"
2ac7c0cb0   Shrikant Sharat   Bundles are insta...
81
82
83
84
85
86
87
88
89
90
91
  
      if ! echo "$handled_repos" | grep -Fqm1 "$url"; then
          if [[ ! -d $clone_dir ]]; then
              git clone "$url" "$clone_dir"
          elif $update; then
              git --git-dir "$clone_dir/.git" pull
          fi
  
          handled_repos="$handled_repos
  $url"
      fi
e5dfac7ea   Shrikant Sharat   Initial commit. W...
92
  }
d22fb4b90   Shrikant Sharat   bundle-cleanup co...
93
  bundle-cleanup () {
911cc8cb5   Shrikant Sharat   Use ADOTDIR as th...
94
95
      if [[ ! -d "$ADOTDIR/bundles" || \
          "$(ls "$ADOTDIR/bundles/" | wc -l)" == 0 ]]; then
9dd10834e   Shrikant Sharat   Fix cleanup givin...
96
97
98
          echo "You don't have any bundles."
          return 0
      fi
911cc8cb5   Shrikant Sharat   Use ADOTDIR as th...
99
      # Find directores in ADOTDIR/bundles, that are not in the bundles record.
d22fb4b90   Shrikant Sharat   bundle-cleanup co...
100
      local unidentified_bundles="$(comm -13 \
60d0dc571   Shrikant Sharat   Refactor to priva...
101
          <(-bundle-echo-record | awk '{print $1}' | sort) \
911cc8cb5   Shrikant Sharat   Use ADOTDIR as th...
102
          <(ls -1 "$ADOTDIR/bundles"))"
d22fb4b90   Shrikant Sharat   bundle-cleanup co...
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
  
      if [[ -z $unidentified_bundles ]]; then
          echo "You don't have any unidentified bundles."
          return 0
      fi
  
      echo The following bundles are not recorded:
      echo "$unidentified_bundles" | sed 's/^/  /'
  
      echo -n '
  Delete them all? [y/N] '
      if read -q; then
          echo
          echo
          echo "$unidentified_bundles" | while read name; do
              echo -n Deleting $name...
911cc8cb5   Shrikant Sharat   Use ADOTDIR as th...
119
              rm -rf "$ADOTDIR/bundles/$name"
d22fb4b90   Shrikant Sharat   bundle-cleanup co...
120
121
122
123
124
125
126
              echo ' done.'
          done
      else
          echo
          echo Nothing deleted.
      fi
  }
e5dfac7ea   Shrikant Sharat   Initial commit. W...
127
  bundle-load () {
e5dfac7ea   Shrikant Sharat   Initial commit. W...
128

a12d3140a   Shrikant Sharat   Removed bundle-in...
129
130
131
      local url="$1"
      local location="$(-antigen-get-clone-dir "$url")/$2"
      local btype="$3"
e5dfac7ea   Shrikant Sharat   Initial commit. W...
132

d535ba468   Shrikant Sharat   Introduced a new ...
133
      if [[ $btype == theme ]]; then
e5dfac7ea   Shrikant Sharat   Initial commit. W...
134

d535ba468   Shrikant Sharat   Introduced a new ...
135
136
137
          # Of course, if its a theme, the location would point to the script
          # file.
          source "$location"
e5dfac7ea   Shrikant Sharat   Initial commit. W...
138

d535ba468   Shrikant Sharat   Introduced a new ...
139
      else
e5dfac7ea   Shrikant Sharat   Initial commit. W...
140

d535ba468   Shrikant Sharat   Introduced a new ...
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
          # Source the plugin script
          # FIXME: I don't know. Looks very very ugly. Needs a better
          # implementation once tests are ready.
          local script_loc="$(ls "$location" | grep -m1 '.plugin.zsh$')"
          if [[ -f $script_loc ]]; then
              # If we have a `*.plugin.zsh`, source it.
              source "$script_loc"
          elif [[ ! -z "$(ls "$location" | grep -m1 '.zsh$')" ]]; then
              # If there is no `*.plugin.zsh` file, source *all* the `*.zsh`
              # files.
              for script ($location/*.zsh) source "$script"
          fi
  
          # Add to $fpath, for completion(s)
          fpath=($location $fpath)
  
      fi
e5dfac7ea   Shrikant Sharat   Initial commit. W...
158

e5dfac7ea   Shrikant Sharat   Initial commit. W...
159
160
161
  }
  
  bundle-lib () {
d535ba468   Shrikant Sharat   Introduced a new ...
162
      bundle --loc=lib
e5dfac7ea   Shrikant Sharat   Initial commit. W...
163
164
165
166
167
  }
  
  bundle-theme () {
      local url="$ANTIGEN_DEFAULT_REPO_URL"
      local name="${1:-robbyrussell}"
d535ba468   Shrikant Sharat   Introduced a new ...
168
      bundle --loc=themes/$name.zsh-theme --btype=theme
e5dfac7ea   Shrikant Sharat   Initial commit. W...
169
  }
1af74ea9e   Shrikant Sharat   Load completions ...
170
  bundle-apply () {
e5dfac7ea   Shrikant Sharat   Initial commit. W...
171
      # Initialize completion.
24fbcce0a   Shrikant Sharat   Add comments to b...
172
      # TODO: Doesn't look like this is really necessary. Need to investigate.
e5dfac7ea   Shrikant Sharat   Initial commit. W...
173
174
      compinit -i
  }
df942673b   Shrikant Sharat   Added bundle-list...
175
176
  bundle-list () {
      # List all currently installed bundles
9dc631003   Shrikant Sharat   Rename bundle rec...
177
      if [[ -z "$_ANTIGEN_BUNDLE_RECORD" ]]; then
df942673b   Shrikant Sharat   Added bundle-list...
178
179
180
          echo "You don't have any bundles." >&2
          return 1
      else
60d0dc571   Shrikant Sharat   Refactor to priva...
181
          -bundle-echo-record | awk '{print $1 " " $2 " " $3}'
df942673b   Shrikant Sharat   Added bundle-list...
182
183
      fi
  }
bc9d20c7a   Shrikant Sharat   Add comments.
184
185
  # Echo the bundle specs as in the record. The first line is not echoed since it
  # is a blank line.
60d0dc571   Shrikant Sharat   Refactor to priva...
186
  -bundle-echo-record () {
9dc631003   Shrikant Sharat   Rename bundle rec...
187
      echo "$_ANTIGEN_BUNDLE_RECORD" | sed -n '1!p'
e5dfac7ea   Shrikant Sharat   Initial commit. W...
188
189
190
  }
  
  -bundle-env-setup () {
3047bfeb7   Shrikant Sharat   Load compinit at ...
191
      # Pre-startup initializations
e5dfac7ea   Shrikant Sharat   Initial commit. W...
192
193
      -set-default ANTIGEN_DEFAULT_REPO_URL \
          https://github.com/robbyrussell/oh-my-zsh.git
911cc8cb5   Shrikant Sharat   Use ADOTDIR as th...
194
      -set-default ADOTDIR $HOME/.antigen
3047bfeb7   Shrikant Sharat   Load compinit at ...
195
196
197
198
199
200
  
      # Load the compinit module
      autoload -U compinit
  
      # Without the following, `compdef` function is not defined.
      compinit -i
e5dfac7ea   Shrikant Sharat   Initial commit. W...
201
202
203
204
205
  }
  
  # Same as `export $1=$2`, but will only happen if the name specified by `$1` is
  # not already set.
  -set-default () {
43bb2cef1   Shrikant Sharat   Variable declarat...
206
207
      local arg_name="$1"
      local arg_value="$2"
e5dfac7ea   Shrikant Sharat   Initial commit. W...
208
209
210
211
      eval "test -z \"\$$arg_name\" && export $arg_name='$arg_value'"
  }
  
  -bundle-env-setup