diff --git a/dotfiles b/dotfiles index ecca5ed..628dca4 100755 --- a/dotfiles +++ b/dotfiles @@ -144,12 +144,14 @@ edit_info() { git --git-dir "$dotfiles_dir" checkout --quiet } -readme() { - local readme_file="$(mktemp --suffix .md)" - git --git-dir="$dotfiles_dir" show :README.md > "$readme_file" - ${EDITOR:-vim} "$readme_file" - git --git-dir="$dotfiles_dir" update-index --add --cacheinfo 10064,$(git --git-dir="$dotfiles_dir" hash-object -w "$readme_file"),README.md - rm "$readme_file" +sparse_edit() { + local original_file="${1:-README.md}" sparse_file extension ; shift + extension=$([[ "$original_file" = *.* ]] && echo ".${original_file##*.}" || echo '') + sparse_file="$(mktemp --suffix "$extension")" + git --git-dir="$dotfiles_dir" show :"$original_file" > "$sparse_file" + ${EDITOR:-vim} "$sparse_file" + git --git-dir="$dotfiles_dir" update-index --add --cacheinfo 10064,$(git --git-dir="$dotfiles_dir" hash-object -w "$sparse_file"),"$original_file" + rm "$sparse_file" git --git-dir "$dotfiles_dir" checkout --quiet } @@ -175,8 +177,11 @@ case $dot_cmd in attributes) edit_info attributes .gitattributes "$@" ;; + edit) + sparse_edit "$@" + ;; readme) - $dot_cmd + sparse_edit README.md "$@" ;; *) git --git-dir="$dotfiles_dir" $dot_cmd "$@"