From bde5149c7bacfda8a9ccbcebd154919952e2c1de Mon Sep 17 00:00:00 2001 From: Sebastian Wiesner Date: Fri, 17 May 2013 17:19:42 +0200 Subject: [PATCH 01/15] Load completion for Carton --- modules/emacs/init.zsh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/emacs/init.zsh b/modules/emacs/init.zsh index c24625d1..ff78800d 100644 --- a/modules/emacs/init.zsh +++ b/modules/emacs/init.zsh @@ -12,4 +12,9 @@ if [[ -d "$HOME/.carton" ]]; then alias cau='carton update' alias caI='carton init' alias cae='carton exec' + + local completion="$HOME/.carton/etc/carton_completion.zsh" + if [[ -e "${completion}" ]]; then + source "${completion}" + fi fi From fb5b1be345bf463f90aaa0b14f92ec9c5868523f Mon Sep 17 00:00:00 2001 From: Sorin Ionescu Date: Fri, 17 May 2013 21:29:44 -0400 Subject: [PATCH 02/15] Refactor Emacs module --- modules/emacs/init.zsh | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/modules/emacs/init.zsh b/modules/emacs/init.zsh index ff78800d..cce9e1e9 100644 --- a/modules/emacs/init.zsh +++ b/modules/emacs/init.zsh @@ -4,17 +4,22 @@ # Authors: Sebastian Wiesner # -# Enable Carton -if [[ -d "$HOME/.carton" ]]; then - path=($HOME/.carton/bin $path) +# Return if requirements are not found. +if [[ ! -d "$HOME/.carton" ]]; then + return 1 +fi - alias cai='carton install' - alias cau='carton update' - alias caI='carton init' - alias cae='carton exec' +# Prepend Carton bin directory. +path=($HOME/.carton/bin $path) - local completion="$HOME/.carton/etc/carton_completion.zsh" - if [[ -e "${completion}" ]]; then - source "${completion}" - fi -fi +# Load Carton completion +source "$HOME/.carton/etc/carton_completion.zsh" 2> /dev/null + +# +# Aliases +# + +alias cai='carton install' +alias cau='carton update' +alias caI='carton init' +alias cae='carton exec' From 88408e8bc25518a050d0de0565aadee65c5abc2a Mon Sep 17 00:00:00 2001 From: nasenatmer Date: Tue, 14 May 2013 22:06:24 +0100 Subject: [PATCH 03/15] Add rar command to archive module This addition tries to use the rar command if unrar is not found. Signed-off-by: Sorin Ionescu --- modules/archive/README.md | 2 +- modules/archive/functions/extract | 4 +++- modules/archive/functions/ls-archive | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/modules/archive/README.md b/modules/archive/README.md index 398d0037..37dbf121 100644 --- a/modules/archive/README.md +++ b/modules/archive/README.md @@ -26,7 +26,7 @@ installed: - *.lzma* requires `unlzma`. - *.Z* requires `uncompress`. - *.zip* requires `unzip`. - - *.rar* requires `unrar`. + - *.rar* requires `unrar` or `rar`. - *.7z* requires `7za`. - *.deb* requires `ar`, `tar`. diff --git a/modules/archive/functions/extract b/modules/archive/functions/extract index af7ed25a..70fac4d8 100644 --- a/modules/archive/functions/extract +++ b/modules/archive/functions/extract @@ -53,7 +53,9 @@ while (( $# > 0 )); do (*.lzma) unlzma "$1" ;; (*.Z) uncompress "$1" ;; (*.zip) unzip "$1" -d $extract_dir ;; - (*.rar) unrar e -ad "$1" ;; + (*.rar) unrar &> /dev/null \ + && unrar e -ad "$1" \ + || rar e -ad "$1" ;; (*.7z) 7za x "$1" ;; (*.deb) mkdir -p "$extract_dir/control" diff --git a/modules/archive/functions/ls-archive b/modules/archive/functions/ls-archive index e8727fa1..99ebde6e 100644 --- a/modules/archive/functions/ls-archive +++ b/modules/archive/functions/ls-archive @@ -41,7 +41,9 @@ while (( $# > 0 )); do || lzcat "$1" | tar x${verbose:+v}f - ;; (*.tar) tar t${verbose:+v}f "$1" ;; (*.zip) unzip -l${verbose:+v} "$1" ;; - (*.rar) unrar ${${verbose:+v}:-l} "$1" ;; + (*.rar) unrar &> /dev/null \ + && unrar ${${verbose:+v}:-l} "$1" \ + || rar ${${verbose:+v}:-l} "$1" ;; (*.7z) 7za l "$1" ;; (*) print "$0: cannot list: $1" >&2 From f3ae9dd82c19d41d75a3df7d9700ae2829264587 Mon Sep 17 00:00:00 2001 From: Sorin Ionescu Date: Sat, 22 Dec 2012 10:05:32 -0400 Subject: [PATCH 04/15] Initialize ahead and behind local variables --- modules/git/functions/git-info | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/git/functions/git-info b/modules/git/functions/git-info index 2e52eab3..274b7bf7 100644 --- a/modules/git/functions/git-info +++ b/modules/git/functions/git-info @@ -126,13 +126,13 @@ function git-info { local added=0 local added_format local added_formatted - local ahead + local ahead=0 local ahead_and_behind local ahead_and_behind_cmd local ahead_format local ahead_formatted local ahead_or_behind - local behind + local behind=0 local behind_format local behind_formatted local branch From 5306bab7ce87491100bf3a48c33ffdd2d7404326 Mon Sep 17 00:00:00 2001 From: Sorin Ionescu Date: Sat, 22 Dec 2012 10:09:54 -0400 Subject: [PATCH 05/15] [#221] Do not format undefined zstyles --- modules/git/functions/git-info | 150 ++++++++++++++++++--------------- 1 file changed, 82 insertions(+), 68 deletions(-) diff --git a/modules/git/functions/git-info b/modules/git/functions/git-info index 274b7bf7..4f71fda2 100644 --- a/modules/git/functions/git-info +++ b/modules/git/functions/git-info @@ -206,132 +206,146 @@ function git-info { # Used to abort and turn git-info off on SIGINT. _git_info_executing=true - # Use porcelain status for easy parsing. - status_cmd='git status --porcelain' - - # Gets the remote name. - remote_cmd='git rev-parse --symbolic-full-name --verify HEAD@{upstream}' - - # Gets the commit difference counts between local and remote. - ahead_and_behind_cmd='git rev-list --count --left-right HEAD...@{upstream}' - # Ignore submodule status. zstyle -s ':prezto:module:git:status:ignore' submodules 'ignore_submodules' - if [[ -n "$ignore_submodules" ]]; then - status_cmd+=" --ignore-submodules=${ignore_submodules}" - fi # Format commit. - commit="$(git rev-parse HEAD 2> /dev/null)" - if [[ -n "$commit" ]]; then - zstyle -s ':prezto:module:git:info:commit' format 'commit_format' - zformat -f commit_formatted "$commit_format" "c:$commit" + zstyle -s ':prezto:module:git:info:commit' format 'commit_format' + if [[ -n "$commit_format" ]]; then + commit="$(git rev-parse HEAD 2> /dev/null)" + if [[ -n "$commit" ]]; then + zformat -f commit_formatted "$commit_format" "c:$commit" + fi fi # Format stashed. - if [[ -f "$(git-dir)/refs/stash" ]]; then + zstyle -s ':prezto:module:git:info:stashed' format 'stashed_format' + if [[ -n "$stashed_format" && -f "$(git-dir)/refs/stash" ]]; then stashed="$(git stash list 2> /dev/null | wc -l | awk '{print $1}')" - zstyle -s ':prezto:module:git:info:stashed' format 'stashed_format' - zformat -f stashed_formatted "$stashed_format" "S:$stashed" + if [[ -n "$stashed" ]]; then + zformat -f stashed_formatted "$stashed_format" "S:$stashed" + fi fi # Format action. - action="$(_git-action)" - if [[ -n "$action" ]]; then - zstyle -s ':prezto:module:git:info:action' format 'action_format' - zformat -f action_formatted "$action_format" "s:$action" + zstyle -s ':prezto:module:git:info:action' format 'action_format' + if [[ -n "$action_format" ]]; then + action="$(_git-action)" + if [[ -n "$action" ]]; then + zformat -f action_formatted "$action_format" "s:$action" + fi fi - # Get current status. - while IFS=$'\n' read line; do - # Count added, deleted, modified, renamed, unmerged, untracked, dirty. - # T (type change) is undocumented, see http://git.io/FnpMGw. - # For a table of scenarii, see http://i.imgur.com/2YLu1.png. - [[ "$line" == ([ACDMT][\ MT]|[ACMT]D)\ * ]] && (( added++ )) - [[ "$line" == [\ ACMRT]D\ * ]] && (( deleted++ )) - [[ "$line" == ?[MT]\ * ]] && (( modified++ )) - [[ "$line" == R?\ * ]] && (( renamed++ )) - [[ "$line" == (AA|DD|U?|?U)\ * ]] && (( unmerged++ )) - [[ "$line" == \?\?\ * ]] && (( untracked++ )) - (( dirty++ )) - done < <(${(z)status_cmd} 2> /dev/null) + # Get the branch. + branch="${$(git symbolic-ref HEAD 2> /dev/null)#refs/heads/}" # Format branch. - branch="${$(git symbolic-ref -q HEAD)##refs/heads/}" - if [[ -n "$branch" ]]; then - zstyle -s ':prezto:module:git:info:branch' format 'branch_format' + zstyle -s ':prezto:module:git:info:branch' format 'branch_format' + if [[ -n "$branch" && -n "$branch_format" ]]; then zformat -f branch_formatted "$branch_format" "b:$branch" + fi + + # Format position. + zstyle -s ':prezto:module:git:info:position' format 'position_format' + if [[ -z "$branch" && -n "$position_format" ]]; then + position="$(git describe --contains --all HEAD 2> /dev/null)" + if [[ -n "$position" ]]; then + zformat -f position_formatted "$position_format" "p:$position" + fi + fi - # Format remote. + # Format remote. + zstyle -s ':prezto:module:git:info:remote' format 'remote_format' + if [[ -n "$branch" && -n "$remote_format" ]]; then + # Gets the remote name. + remote_cmd='git rev-parse --symbolic-full-name --verify HEAD@{upstream}' remote="${$(${(z)remote_cmd} 2> /dev/null)##refs/remotes/}" if [[ -n "$remote" ]]; then - zstyle -s ':prezto:module:git:info:remote' format 'remote_format' zformat -f remote_formatted "$remote_format" "R:$remote" + fi + fi - # Get ahead and behind counts. - ahead_and_behind="$(${(z)ahead_and_behind_cmd} 2> /dev/null)" + zstyle -s ':prezto:module:git:info:ahead' format 'ahead_format' + zstyle -s ':prezto:module:git:info:behind' format 'behind_format' + if [[ -n "$branch" && ( -n "$ahead_format" || -n "$behind_format" ) ]]; then + # Gets the commit difference counts between local and remote. + ahead_and_behind_cmd='git rev-list --count --left-right HEAD...@{upstream}' - # Format ahead. + # Get ahead and behind counts. + ahead_and_behind="$(${(z)ahead_and_behind_cmd} 2> /dev/null)" + + # Format ahead. + if [[ -n "$ahead_format" ]]; then ahead="$ahead_and_behind[(w)1]" - if (( $ahead > 0 )); then - zstyle -s ':prezto:module:git:info:ahead' format 'ahead_format' + if (( ahead > 0 )); then zformat -f ahead_formatted "$ahead_format" "A:$ahead" fi + fi - # Format behind. + # Format behind. + if [[ -n "$behind_format" ]]; then behind="$ahead_and_behind[(w)2]" - if (( $behind > 0 )); then - zstyle -s ':prezto:module:git:info:behind' format 'behind_format' + if (( behind > 0 )); then zformat -f behind_formatted "$behind_format" "B:$behind" fi fi - else - # Format position. - position="$(git describe --contains --all HEAD 2> /dev/null)" - if [[ -n "$position" ]]; then - zstyle -s ':prezto:module:git:info:position' format 'position_format' - zformat -f position_formatted "$position_format" "p:$position" - fi fi + # Use porcelain status for easy parsing. + status_cmd="git status --porcelain --ignore-submodules=${ignore_submodules:-none}" + + # Get current status. + while IFS=$'\n' read line; do + # Count added, deleted, modified, renamed, unmerged, untracked, dirty. + # T (type change) is undocumented, see http://git.io/FnpMGw. + # For a table of scenarii, see http://i.imgur.com/2YLu1.png. + [[ "$line" == ([ACDMT][\ MT]|[ACMT]D)\ * ]] && (( added++ )) + [[ "$line" == [\ ACMRT]D\ * ]] && (( deleted++ )) + [[ "$line" == ?[MT]\ * ]] && (( modified++ )) + [[ "$line" == R?\ * ]] && (( renamed++ )) + [[ "$line" == (AA|DD|U?|?U)\ * ]] && (( unmerged++ )) + [[ "$line" == \?\?\ * ]] && (( untracked++ )) + (( dirty++ )) + done < <(${(z)status_cmd} 2> /dev/null) + # Format added. - if (( $added > 0 )); then + if (( added > 0 )); then zstyle -s ':prezto:module:git:info:added' format 'added_format' zformat -f added_formatted "$added_format" "a:$added_format" fi # Format deleted. - if (( $deleted > 0 )); then + if (( deleted > 0 )); then zstyle -s ':prezto:module:git:info:deleted' format 'deleted_format' zformat -f deleted_formatted "$deleted_format" "d:$deleted_format" fi # Format modified. - if (( $modified > 0 )); then + if (( modified > 0 )); then zstyle -s ':prezto:module:git:info:modified' format 'modified_format' zformat -f modified_formatted "$modified_format" "m:$modified" fi # Format renamed. - if (( $renamed > 0 )); then + if (( renamed > 0 )); then zstyle -s ':prezto:module:git:info:renamed' format 'renamed_format' zformat -f renamed_formatted "$renamed_format" "r:$renamed" fi # Format unmerged. - if (( $unmerged > 0 )); then + if (( unmerged > 0 )); then zstyle -s ':prezto:module:git:info:unmerged' format 'unmerged_format' zformat -f unmerged_formatted "$unmerged_format" "U:$unmerged" fi # Format untracked. - if (( $untracked > 0 )); then + if (( untracked > 0 )); then zstyle -s ':prezto:module:git:info:untracked' format 'untracked_format' zformat -f untracked_formatted "$untracked_format" "u:$untracked" fi # Format dirty and clean. - if (( $dirty > 0 )); then + if (( dirty > 0 )); then zstyle -s ':prezto:module:git:info:dirty' format 'dirty_format' zformat -f dirty_formatted "$dirty_format" "D:$dirty" else @@ -342,21 +356,21 @@ function git-info { zstyle -a ':prezto:module:git:info:keys' format 'info_formats' for info_format in ${(k)info_formats}; do zformat -f REPLY "$info_formats[$info_format]" \ + "a:$added_formatted" \ "A:$ahead_formatted" \ "B:$behind_formatted" \ - "D:$dirty_formatted" \ - "R:$remote_formatted" \ - "S:$stashed_formatted" \ - "U:$unmerged_formatted" \ - "a:$added_formatted" \ "b:$branch_formatted" \ "C:$clean_formatted" \ "c:$commit_formatted" \ "d:$deleted_formatted" \ + "D:$dirty_formatted" \ "m:$modified_formatted" \ "p:$position_formatted" \ + "R:$remote_formatted" \ "r:$renamed_formatted" \ "s:$action_formatted" \ + "S:$stashed_formatted" \ + "U:$unmerged_formatted" \ "u:$untracked_formatted" git_info[$info_format]="$REPLY" done From e836957e4f937d59e114553aa579da73b8696f16 Mon Sep 17 00:00:00 2001 From: Sorin Ionescu Date: Sat, 22 Dec 2012 18:48:19 -0400 Subject: [PATCH 06/15] [Fix #221] Add a simple git-info --- modules/git/README.md | 27 +++- modules/git/functions/git-info | 161 ++++++++++++++------ modules/prompt/functions/prompt_sorin_setup | 4 + 3 files changed, 142 insertions(+), 50 deletions(-) diff --git a/modules/git/README.md b/modules/git/README.md index 1370f498..8bb9be42 100644 --- a/modules/git/README.md +++ b/modules/git/README.md @@ -253,19 +253,38 @@ setting a style is as follows. | Name | Format Code | Description | --------- | :---------: | --------------------------------------------------- | action | %s | Special action name -| added | %a | Added files count | ahead | %A | Commits ahead of remote count | behind | %B | Commits behind of remote count | branch | %b | Branch name | commit | %c | Commit hash +| position | %p | Commits from the nearest tag count +| remote | %R | Remote name +| stashed | %S | Stashed states count + +### Concise Contexts + +| Name | Format Code | Description +| --------- | :---------: | --------------------------------------------------- +| clean | %C | Clean state +| dirty | %D | Dirty files count +| indexed | %i | Indexed files count +| unindexed | %I | Unindexed files count +| untracked | %u | Untracked files count + +The following contexts must be enabled with the following zstyle: + + zstyle ':prezto:module:git:info' verbose 'yes' + +### Verbose Contexts + +| Name | Format Code | Description +| --------- | :---------: | --------------------------------------------------- +| added | %a | Added files count | clean | %C | Clean state | deleted | %d | Deleted files count | dirty | %D | Dirty files count | modified | %m | Modified files count -| position | %p | Commits from the nearest tag count -| remote | %R | Remote name | renamed | %r | Renamed files count -| stashed | %S | Stashed states count | unmerged | %U | Unmerged files count | untracked | %u | Untracked files count diff --git a/modules/git/functions/git-info b/modules/git/functions/git-info index 4f71fda2..5e8f9cac 100644 --- a/modules/git/functions/git-info +++ b/modules/git/functions/git-info @@ -151,6 +151,9 @@ function git-info { local dirty_format local dirty_formatted local ignore_submodules + local indexed=0 + local indexed_format + local indexed_formatted local -A info_formats local info_format local line_number=0 @@ -171,6 +174,10 @@ function git-info { local stashed_format local stashed_formatted local status_cmd + local status_mode + local unindexed=0 + local unindexed_format + local unindexed_formatted local unmerged=0 local unmerged_format local unmerged_formatted @@ -291,57 +298,117 @@ function git-info { fi fi - # Use porcelain status for easy parsing. - status_cmd="git status --porcelain --ignore-submodules=${ignore_submodules:-none}" - - # Get current status. - while IFS=$'\n' read line; do - # Count added, deleted, modified, renamed, unmerged, untracked, dirty. - # T (type change) is undocumented, see http://git.io/FnpMGw. - # For a table of scenarii, see http://i.imgur.com/2YLu1.png. - [[ "$line" == ([ACDMT][\ MT]|[ACMT]D)\ * ]] && (( added++ )) - [[ "$line" == [\ ACMRT]D\ * ]] && (( deleted++ )) - [[ "$line" == ?[MT]\ * ]] && (( modified++ )) - [[ "$line" == R?\ * ]] && (( renamed++ )) - [[ "$line" == (AA|DD|U?|?U)\ * ]] && (( unmerged++ )) - [[ "$line" == \?\?\ * ]] && (( untracked++ )) - (( dirty++ )) - done < <(${(z)status_cmd} 2> /dev/null) - - # Format added. - if (( added > 0 )); then - zstyle -s ':prezto:module:git:info:added' format 'added_format' - zformat -f added_formatted "$added_format" "a:$added_format" - fi + # Get status type. + if ! zstyle -t ':prezto:module:git:info' verbose; then + # Format indexed. + zstyle -s ':prezto:module:git:info:indexed' format 'indexed_format' + if [[ -n "$indexed_format" ]]; then + (( + indexed+=$( + git diff-index \ + --no-ext-diff \ + --name-only \ + --cached \ + --ignore-submodules=${ignore_submodules:-none} \ + HEAD \ + 2> /dev/null \ + | wc -l + ) + )) + if (( indexed > 0 )); then + zformat -f indexed_formatted "$indexed_format" "i:$indexed" + fi + fi - # Format deleted. - if (( deleted > 0 )); then - zstyle -s ':prezto:module:git:info:deleted' format 'deleted_format' - zformat -f deleted_formatted "$deleted_format" "d:$deleted_format" - fi + # Format unindexed. + zstyle -s ':prezto:module:git:info:unindexed' format 'unindexed_format' + if [[ -n "$unindexed_format" ]]; then + (( + unindexed+=$( + git diff-files \ + --no-ext-diff \ + --name-only \ + --ignore-submodules=${ignore_submodules:-none} \ + 2> /dev/null \ + | wc -l + ) + )) + if (( unindexed > 0 )); then + zformat -f unindexed_formatted "$unindexed_format" "I:$unindexed" + fi + fi - # Format modified. - if (( modified > 0 )); then - zstyle -s ':prezto:module:git:info:modified' format 'modified_format' - zformat -f modified_formatted "$modified_format" "m:$modified" - fi + # Format untracked. + zstyle -s ':prezto:module:git:info:untracked' format 'untracked_format' + if [[ -n "$untracked_format" ]]; then + (( + untracked+=$( + git ls-files \ + --other \ + --exclude-standard \ + 2> /dev/null \ + | wc -l + ) + )) + if (( untracked > 0 )); then + zformat -f untracked_formatted "$untracked_format" "u:$untracked" + fi + fi - # Format renamed. - if (( renamed > 0 )); then - zstyle -s ':prezto:module:git:info:renamed' format 'renamed_format' - zformat -f renamed_formatted "$renamed_format" "r:$renamed" - fi + (( dirty = indexed + unindexed + untracked )) + else + # Use porcelain status for easy parsing. + status_cmd="git status --porcelain --ignore-submodules=${ignore_submodules:-none}" + + # Get current status. + while IFS=$'\n' read line; do + # Count added, deleted, modified, renamed, unmerged, untracked, dirty. + # T (type change) is undocumented, see http://git.io/FnpMGw. + # For a table of scenarii, see http://i.imgur.com/2YLu1.png. + [[ "$line" == ([ACDMT][\ MT]|[ACMT]D)\ * ]] && (( added++ )) + [[ "$line" == [\ ACMRT]D\ * ]] && (( deleted++ )) + [[ "$line" == ?[MT]\ * ]] && (( modified++ )) + [[ "$line" == R?\ * ]] && (( renamed++ )) + [[ "$line" == (AA|DD|U?|?U)\ * ]] && (( unmerged++ )) + [[ "$line" == \?\?\ * ]] && (( untracked++ )) + (( dirty++ )) + done < <(${(z)status_cmd} 2> /dev/null) + + # Format added. + if (( added > 0 )); then + zstyle -s ':prezto:module:git:info:added' format 'added_format' + zformat -f added_formatted "$added_format" "a:$added_format" + fi - # Format unmerged. - if (( unmerged > 0 )); then - zstyle -s ':prezto:module:git:info:unmerged' format 'unmerged_format' - zformat -f unmerged_formatted "$unmerged_format" "U:$unmerged" - fi + # Format deleted. + if (( deleted > 0 )); then + zstyle -s ':prezto:module:git:info:deleted' format 'deleted_format' + zformat -f deleted_formatted "$deleted_format" "d:$deleted_format" + fi - # Format untracked. - if (( untracked > 0 )); then - zstyle -s ':prezto:module:git:info:untracked' format 'untracked_format' - zformat -f untracked_formatted "$untracked_format" "u:$untracked" + # Format modified. + if (( modified > 0 )); then + zstyle -s ':prezto:module:git:info:modified' format 'modified_format' + zformat -f modified_formatted "$modified_format" "m:$modified" + fi + + # Format renamed. + if (( renamed > 0 )); then + zstyle -s ':prezto:module:git:info:renamed' format 'renamed_format' + zformat -f renamed_formatted "$renamed_format" "r:$renamed" + fi + + # Format unmerged. + if (( unmerged > 0 )); then + zstyle -s ':prezto:module:git:info:unmerged' format 'unmerged_format' + zformat -f unmerged_formatted "$unmerged_format" "U:$unmerged" + fi + + # Format untracked. + if (( untracked > 0 )); then + zstyle -s ':prezto:module:git:info:untracked' format 'untracked_format' + zformat -f untracked_formatted "$untracked_format" "u:$untracked" + fi fi # Format dirty and clean. @@ -364,6 +431,8 @@ function git-info { "c:$commit_formatted" \ "d:$deleted_formatted" \ "D:$dirty_formatted" \ + "i:$indexed_formatted" \ + "I:$unindexed_formatted" \ "m:$modified_formatted" \ "p:$position_formatted" \ "R:$remote_formatted" \ diff --git a/modules/prompt/functions/prompt_sorin_setup b/modules/prompt/functions/prompt_sorin_setup index 796da78f..c3302ad1 100644 --- a/modules/prompt/functions/prompt_sorin_setup +++ b/modules/prompt/functions/prompt_sorin_setup @@ -46,10 +46,14 @@ function prompt_sorin_setup { # Add hook for calling git-info before each command. add-zsh-hook precmd prompt_sorin_precmd + # Set editor-info parameters. zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b' zstyle ':prezto:module:editor:info:keymap:primary' format ' %B%F{red}❯%F{yellow}❯%F{green}❯%f%b' zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format ' %F{red}♺%f' zstyle ':prezto:module:editor:info:keymap:alternate' format ' %B%F{green}❮%F{yellow}❮%F{red}❮%f%b' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' zstyle ':prezto:module:git:info:action' format ':%%B%F{yellow}%s%f%%b' zstyle ':prezto:module:git:info:added' format ' %%B%F{green}✚%f%%b' zstyle ':prezto:module:git:info:ahead' format ' %%B%F{yellow}⬆%f%%b' From d4e78d427a4ce10f308b0d209853f712923cf405 Mon Sep 17 00:00:00 2001 From: Sorin Ionescu Date: Fri, 3 May 2013 11:25:49 -0400 Subject: [PATCH 07/15] Rename alias gRc to gRp --- modules/git/README.md | 2 +- modules/git/alias.zsh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/git/README.md b/modules/git/README.md index 8bb9be42..3fd6f6b7 100644 --- a/modules/git/README.md +++ b/modules/git/README.md @@ -160,7 +160,7 @@ Aliases - `gRx` removes a remote. - `gRm` renames a remote. - `gRu` fetches remotes updates. - - `gRc` deletes all stale remote tracking branches. + - `gRp` prunes all stale remote tracking branches. - `gRs` displays information about a given remote. - `gRb` opens a remote on [GitHub][3] in the default browser. diff --git a/modules/git/alias.zsh b/modules/git/alias.zsh index 173f619d..09bb5a18 100644 --- a/modules/git/alias.zsh +++ b/modules/git/alias.zsh @@ -138,7 +138,7 @@ alias gRa='git remote add' alias gRx='git remote rm' alias gRm='git remote rename' alias gRu='git remote update' -alias gRc='git remote prune' +alias gRp='git remote prune' alias gRs='git remote show' alias gRb='git-hub-browse' From 75c0d49f5678b9d4f570385e522052962b995865 Mon Sep 17 00:00:00 2001 From: Sorin Ionescu Date: Fri, 3 May 2013 12:59:05 -0400 Subject: [PATCH 08/15] Swap aliases gsd and gsL --- modules/git/README.md | 5 ++--- modules/git/alias.zsh | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/modules/git/README.md b/modules/git/README.md index 3fd6f6b7..1fa9a219 100644 --- a/modules/git/README.md +++ b/modules/git/README.md @@ -170,10 +170,9 @@ Aliases - `gsa` applies the changes recorded in a stash to the working directory. - `gsx` drops a stashed state. - `gsX` drops all the stashed states. - - `gsd` lists dropped stashed states. - `gsl` lists stashed states. - - `gsL` displays the changes recorded in the stash as a diff between the - stashed state and its original parent. + - `gsL` lists dropped stashed states. + - `gsd` displays changes between the stash and its original parent. - `gsp` removes and applies a single stashed state from the stash list. - `gsr` recovers a given stashed state. - `gss` stashes the changes of the dirty working directory, including untracked. diff --git a/modules/git/alias.zsh b/modules/git/alias.zsh index 09bb5a18..bf6d3644 100644 --- a/modules/git/alias.zsh +++ b/modules/git/alias.zsh @@ -147,9 +147,9 @@ alias gs='git stash' alias gsa='git stash apply' alias gsx='git stash drop' alias gsX='git-stash-clear-interactive' -alias gsd='git-stash-dropped' alias gsl='git stash list' -alias gsL='git stash show --patch --stat' +alias gsL='git-stash-dropped' +alias gsd='git stash show --patch --stat' alias gsp='git stash pop' alias gsr='git-stash-recover' alias gss='git stash save --include-untracked' From 7845c369510448df047c78c0d89202c4659465c7 Mon Sep 17 00:00:00 2001 From: Sorin Ionescu Date: Fri, 3 May 2013 13:30:29 -0400 Subject: [PATCH 09/15] Clarify Git listing aliases descriptions --- modules/git/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/git/README.md b/modules/git/README.md index 1fa9a219..0dd932f6 100644 --- a/modules/git/README.md +++ b/modules/git/README.md @@ -64,7 +64,7 @@ Aliases commits. - `gcR` removes the *HEAD* commit. - `gcs` displays various types of objects. - - `gcl` displays lost commits. + - `gcl` lists lost commits. ### Conflict @@ -97,8 +97,8 @@ Aliases - `gg` displays lines matching a pattern. - `ggi` displays lines matching a pattern ignoring case. - - `ggl` displays files matching a pattern. - - `ggL` displays files are not matching a pattern. + - `ggl` lists files matching a pattern. + - `ggL` lists files that are not matching a pattern. - `ggv` displays lines not matching a pattern. - `ggw` displays lines matching a pattern at word boundary. @@ -155,7 +155,7 @@ Aliases ### Remote - `gR` manages tracked repositories. - - `gRl` displays remote names and URLs. + - `gRl` lists remote names and their URLs. - `gRa` adds a new remote. - `gRx` removes a remote. - `gRm` renames a remote. From db384b2ac6291c4d446ab47460cee6d917db87ea Mon Sep 17 00:00:00 2001 From: Sorin Ionescu Date: Sun, 5 May 2013 21:58:07 -0400 Subject: [PATCH 10/15] Remove ununsed variable --- modules/git/functions/git-info | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/git/functions/git-info b/modules/git/functions/git-info index 5e8f9cac..d4b87c2f 100644 --- a/modules/git/functions/git-info +++ b/modules/git/functions/git-info @@ -156,7 +156,6 @@ function git-info { local indexed_formatted local -A info_formats local info_format - local line_number=0 local modified=0 local modified_format local modified_formatted From a7623aad6b6603beb72b469a4ee948053014b918 Mon Sep 17 00:00:00 2001 From: Sorin Ionescu Date: Mon, 13 May 2013 14:27:32 -0400 Subject: [PATCH 11/15] [Fix #307] Do not auto-off git-info Instead of turning off git-info when CTRL+C is caught, show instructions on how to turn it off manually. --- modules/git/functions/git-info | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/modules/git/functions/git-info b/modules/git/functions/git-info index d4b87c2f..9911310c 100644 --- a/modules/git/functions/git-info +++ b/modules/git/functions/git-info @@ -89,7 +89,7 @@ function _git-action { return 1 } -# Turns off git-info for the current repository. +# Instructs the user on how to turn off git-info for the current repository. function _git-info-abort { if ! is-true "$_git_info_executing"; then return 1 @@ -99,17 +99,18 @@ function _git-info-abort { Gathering status for certain repositories is time intensive. -By pressing CTRL + C, you have turned off prompt Git status -for this repository. + +To turn off in-prompt Git status for this repository, execute: + + git info off To revert, execute: + git-info on EOF unset _git_info_executing - git config --bool prompt.showinfo false - git-info return 0 } add-zsh-trap INT _git-info-abort @@ -209,7 +210,7 @@ function git-info { return 1 fi - # Used to abort and turn git-info off on SIGINT. + # Used to abort git-info on SIGINT. _git_info_executing=true # Ignore submodule status. From 39b88fe3342ff96a6e29e6f8ee17a15787ad63dd Mon Sep 17 00:00:00 2001 From: Sorin Ionescu Date: Fri, 17 May 2013 21:17:44 -0400 Subject: [PATCH 12/15] Remove the git-info SIGINT message Users should read the Git module README on how to turn git-info on and off. --- modules/git/functions/git-info | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/modules/git/functions/git-info b/modules/git/functions/git-info index 9911310c..1c163962 100644 --- a/modules/git/functions/git-info +++ b/modules/git/functions/git-info @@ -89,32 +89,6 @@ function _git-action { return 1 } -# Instructs the user on how to turn off git-info for the current repository. -function _git-info-abort { - if ! is-true "$_git_info_executing"; then - return 1 - fi - - cat >&2 < Date: Sat, 18 May 2013 16:49:09 -0400 Subject: [PATCH 13/15] [Fix #103] Add documentation for editor --- modules/editor/README.md | 63 ++++++++++++++++++++++++++++++++++++++++ modules/editor/init.zsh | 36 ----------------------- 2 files changed, 63 insertions(+), 36 deletions(-) create mode 100644 modules/editor/README.md diff --git a/modules/editor/README.md b/modules/editor/README.md new file mode 100644 index 00000000..03bc02f2 --- /dev/null +++ b/modules/editor/README.md @@ -0,0 +1,63 @@ +Editor +====== + +Sets key bindings. + +Settings +-------- + +### Key bindings + +To enable key bindings, add the following to *zpreztorc*, and replace 'map' with +'emacs' or 'vi'. + + zstyle ':prezto:module:editor' keymap 'map' + +### Dot Expansion + +To enable the auto conversion of .... to ../.., add the following to +*zpreztorc*. + + zstyle ':prezto:module:editor' dot-expansion 'yes' + +Theming +------- + +To indicate when the editor is in the primary keymap (emacs or viins), add +the following to your `theme_prompt_setup` function. + + zstyle ':prezto:module:editor:info:keymap:primary' format '>>>' + +To indicate when the editor is in the primary keymap (emacs or viins) insert +mode, add the following to your `theme_prompt_setup` function. + + zstyle ':prezto:module:editor:info:keymap:primary:insert' format 'I' + +To indicate when the editor is in the primary keymap (emacs or viins) overwrite +mode, add the following to your `theme_prompt_setup` function. + + zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format 'O' + +To indicate when the editor is in the alternate keymap (vicmd), add the +following to your `theme_prompt_setup` function. + + zstyle ':prezto:module:editor:info:keymap:alternate' format '<<<' + +To indicate when the editor is completing, add the following to your +`theme_prompt_setup` function. + + zstyle ':prezto:module:editor:info:completing' format '...' + +Then add `$editor_info[context]`, where context is *keymap*, *insert*, or +*overwrite*, to `$PROMPT` or `$RPROMPT` and call `editor-info` in the +`prompt_name_preexec` hook function. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][1].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/sorin-ionescu/oh-my-zsh/issues + diff --git a/modules/editor/init.zsh b/modules/editor/init.zsh index b905face..4838ba74 100644 --- a/modules/editor/init.zsh +++ b/modules/editor/init.zsh @@ -4,42 +4,6 @@ # Authors: # Sorin Ionescu # -# Usage: -# To enable key bindings, add the following to zpreztorc, and replace 'map' -# with 'emacs' or 'vi. -# -# zstyle ':prezto:module:editor' keymap 'map' -# -# To enable the auto conversion of .... to ../.., add the following to -# zpreztorc. -# -# zstyle ':prezto:module:editor' dot-expansion 'yes' -# -# To indicate when the editor is in the primary keymap (emacs or viins), add -# the following to your theme prompt setup function. -# -# zstyle ':prezto:module:editor:info:keymap:primary' format '>>>' -# -# To indicate when the editor is in the primary keymap (emacs or viins) insert -# mode, add the following to your theme prompt setup function. -# -# zstyle ':prezto:module:editor:info:keymap:primary:insert' format 'I' -# -# To indicate when the editor is in the primary keymap (emacs or viins) -# overwrite mode, add the following to your theme prompt setup function. -# -# zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format 'O' -# -# To indicate when the editor is in the alternate keymap (vicmd), add the -# following to your theme prompt setup function. -# -# zstyle ':prezto:module:editor:info:keymap:alternate' format '<<<' -# -# To indicate when the editor is completing, add the following to your theme -# prompt setup function. -# -# zstyle ':prezto:module:editor:info:completing' format '...' -# # Return if requirements are not found. if [[ "$TERM" == 'dumb' ]]; then From fcab2a17132f96b2f8f312074841571d0216b69e Mon Sep 17 00:00:00 2001 From: Sorin Ionescu Date: Sat, 18 May 2013 19:27:40 -0400 Subject: [PATCH 14/15] [Fix #425] Rewrite module ssh-agent; rename it to ssh --- modules/ssh-agent/README.md | 36 --------------------- modules/ssh-agent/init.zsh | 62 ------------------------------------- modules/ssh/README.md | 28 +++++++++++++++++ modules/ssh/init.zsh | 48 ++++++++++++++++++++++++++++ runcoms/zpreztorc | 9 ++---- 5 files changed, 79 insertions(+), 104 deletions(-) delete mode 100644 modules/ssh-agent/README.md delete mode 100644 modules/ssh-agent/init.zsh create mode 100644 modules/ssh/README.md create mode 100644 modules/ssh/init.zsh diff --git a/modules/ssh-agent/README.md b/modules/ssh-agent/README.md deleted file mode 100644 index 392a8666..00000000 --- a/modules/ssh-agent/README.md +++ /dev/null @@ -1,36 +0,0 @@ -SSH-Agent -========= - -Provides for an easier use of [ssh-agent][1]. - -Settings --------- - -### Agent Forwarding - -To enable SSH-Agent forwarding, add the following line to *zpreztorc*: - - zstyle ':prezto:module:ssh-agent' forwarding 'yes' - -### Identities - -To load multiple identities, add the following line to *zpreztorc*: - - zstyle ':prezto:module:ssh-agent' identities 'id_rsa' 'id_rsa2' 'id_github' - -Authors -------- - -*The authors of this module should be contacted via the [issue tracker][2].* - - - [Robby Russell](https://github.com/robbyrussell) - - [Theodore Robert Campbell Jr](https://github.com/trcjr) - - [Joseph M. Reagle Jr.](https://github.com/reagle) - - [Florent Thoumie](https://github.com/flz) - - [Jonas Pfenniger](https://github.com/zimbatm) - - [Gareth Owen](https://github.com/gwjo) - - [Sorin Ionescu](https://github.com/sorin-ionescu) - -[1]: http://www.openbsd.org/cgi-bin/man.cgi?query=ssh-agent&sektion=1 -[2]: https://github.com/sorin-ionescu/prezto/issues - diff --git a/modules/ssh-agent/init.zsh b/modules/ssh-agent/init.zsh deleted file mode 100644 index 56215a4f..00000000 --- a/modules/ssh-agent/init.zsh +++ /dev/null @@ -1,62 +0,0 @@ -# -# Provides for an easier use of ssh-agent. -# -# Authors: -# Robby Russell -# Theodore Robert Campbell Jr -# Joseph M. Reagle Jr. -# Florent Thoumie -# Jonas Pfenniger -# gwjo -# Sorin Ionescu -# - -# Return if requirements are not found. -if (( ! $+commands[ssh-agent] )); then - return 1 -fi - -# Load dependencies. -pmodload 'helper' - -_ssh_agent_env="${HOME}/.ssh/environment-${HOST}" -_ssh_agent_forwarding= - -function _ssh-agent-start { - local -a identities - - # Start ssh-agent and setup the environment. - rm -f "${_ssh_agent_env}" - ssh-agent > "${_ssh_agent_env}" - chmod 600 "${_ssh_agent_env}" - source "${_ssh_agent_env}" > /dev/null - - # Load identities. - zstyle -a ':prezto:module:ssh-agent' identities 'identities' - - if (( ${#identities} > 0 )); then - ssh-add "${HOME}/.ssh/${^identities[@]}" - else - ssh-add - fi -} - -# Test if agent-forwarding is enabled. -zstyle -b ':prezto:module:ssh-agent' forwarding '_ssh_agent_forwarding' -if is-true "${_ssh_agent_forwarding}" && [[ -n "$SSH_AUTH_SOCK" ]]; then - # Add a nifty symlink for screen/tmux if agent forwarding. - [[ -L "$SSH_AUTH_SOCK" ]] || ln -sf "$SSH_AUTH_SOCK" /tmp/ssh-agent-$USER-screen -elif [[ -s "${_ssh_agent_env}" ]]; then - # Source SSH settings, if applicable. - source "${_ssh_agent_env}" > /dev/null - ps -ef | grep "${SSH_AGENT_PID}" | grep -q 'ssh-agent$' || { - _ssh-agent-start; - } -else - _ssh-agent-start; -fi - -# Tidy up after ourselves. -unfunction _ssh-agent-start -unset _ssh_agent_{env,forwarding} - diff --git a/modules/ssh/README.md b/modules/ssh/README.md new file mode 100644 index 00000000..e953a601 --- /dev/null +++ b/modules/ssh/README.md @@ -0,0 +1,28 @@ +SSH +=== + +Provides for an easier use of [SSH][1] by setting up [ssh-agent][2]. + +This module is disabled on Mac OS X due to custom Apple SSH support rendering it +unnecessary. + +Settings +-------- + +### Identities + +To load multiple identities, add the following line to *zpreztorc*: + + zstyle ':prezto:module:ssh:load' identities 'id_rsa' 'id_dsa' 'id_github' + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][3].* + + - [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://www.openssh.com +[2]: http://www.openbsd.org/cgi-bin/man.cgi?query=ssh-agent&sektion=1 +[3]: https://github.com/sorin-ionescu/prezto/issues + diff --git a/modules/ssh/init.zsh b/modules/ssh/init.zsh new file mode 100644 index 00000000..447846f5 --- /dev/null +++ b/modules/ssh/init.zsh @@ -0,0 +1,48 @@ +# +# Provides for an easier use of SSH by setting up ssh-agent. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if [[ "$OSTYPE" == darwin* ]] || (( ! $+commands[ssh-agent] )); then + return 1 +fi + +# Set the path to the SSH directory. +_ssh_dir="$HOME/.ssh" + +# Set the path to the environment file if not set by another module. +_ssh_agent_env="${_ssh_agent_env:-$TMPDIR/ssh-agent.env}" + +# Set the path to the persistent authentication socket. +_ssh_agent_sock="$TMPDIR/ssh-agent.sock" + +# Start ssh-agent if not started. +if [[ ! -S "$SSH_AUTH_SOCK" ]]; then + eval "$(ssh-agent | sed '/^echo /d' | tee "$_ssh_agent_env")" +else + # Export environment variables. + source "$_ssh_agent_env" 2> /dev/null +fi + +# Load identities. +if ssh-add -l 2>&1 | grep 'The agent has no identities'; then + zstyle -a ':prezto:module:ssh:load' identities '_ssh_identities' + if (( ${#identities} > 0 )); then + ssh-add "$_ssh_dir/${^_ssh_identities[@]}" + else + ssh-add + fi +fi + +# Create a persistent SSH authentication socket. +if [[ -S "$SSH_AUTH_SOCK" && "$SSH_AUTH_SOCK" != "$_ssh_agent_sock" ]]; then + ln -sf "$SSH_AUTH_SOCK" "$_ssh_agent_sock" + export SSH_AUTH_SOCK="$_ssh_agent_sock" +fi + +# Clean up. +unset _ssh_{dir,identities} _ssh_agent_{env,sock} + diff --git a/runcoms/zpreztorc b/runcoms/zpreztorc index 4fe15fc9..5eca1a0d 100644 --- a/runcoms/zpreztorc +++ b/runcoms/zpreztorc @@ -95,14 +95,11 @@ zstyle ':prezto:module:prompt' theme 'sorin' # zstyle ':prezto:module:screen' auto-start 'yes' # -# SSH-Agent +# SSH # -# Enable ssh-agent forwarding. -# zstyle ':prezto:module:ssh-agent' forwarding 'yes' - -# Set ssh-agent identities to load. -# zstyle ':prezto:module:ssh-agent' identities 'id_rsa' 'id_rsa2' 'id_github' +# Set the SSH identities to load into the agent. +# zstyle ':prezto:module:ssh:load' identities 'id_rsa' 'id_rsa2' 'id_github' # # Syntax Highlighting From 1622abb830aef7c9cb33442e782d78c83bb1b2ed Mon Sep 17 00:00:00 2001 From: Sorin Ionescu Date: Sat, 18 May 2013 19:27:40 -0400 Subject: [PATCH 15/15] Make gpg-agent and ssh-agent work with each other --- modules/gpg/README.md | 11 +++++++++++ modules/gpg/init.zsh | 27 ++++++++++++++++++++------- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/modules/gpg/README.md b/modules/gpg/README.md index 05db9013..b13e33e9 100644 --- a/modules/gpg/README.md +++ b/modules/gpg/README.md @@ -3,6 +3,17 @@ GPG Provides for an easier use of [GPG][1] by setting up [gpg-agent][2]. +### SSH + +To enable OpenSSH Agent protocol emulation, and make `gpg-agent` a drop-in +replacement for `ssh-agent`, add the following line to +*~/.gnupg/gpg-agent.conf*: + + enable-ssh-support + +When OpenSSH Agent protocol emulation is enabled, this module will load the SSH +module for additional processing. + Authors ------- diff --git a/modules/gpg/init.zsh b/modules/gpg/init.zsh index f1759420..2e4c4eab 100644 --- a/modules/gpg/init.zsh +++ b/modules/gpg/init.zsh @@ -10,19 +10,32 @@ if (( ! $+commands[gpg-agent] )); then return 1 fi -# Set the default path to the gpg-agent-info file. -_gpg_agent_info="$HOME/.gpg-agent-info" +# Set the default paths to gpg-agent files. +_gpg_agent_conf="$HOME/.gnupg/gpg-agent.conf" +_gpg_agent_env="$TMPDIR/gpg-agent.env" # Start gpg-agent if not started. -ps -U "$USER" -o ucomm | grep -q gpg-agent \ - || gpg-agent --daemon >! "$_gpg_agent_info" +if ! ps -U "$USER" -o ucomm | grep -q gpg-agent; then + eval "$(gpg-agent --daemon | tee "$_gpg_agent_env")" +else + # Export environment variables. + source "$_gpg_agent_env" 2> /dev/null +fi -# Export environment variables. +# Inform gpg-agent of the current TTY for user prompts. export GPG_TTY="$(tty)" -source "$_gpg_agent_info" + +# Integrate with the SSH module. +if grep 'enable-ssh-support' "$_gpg_agent_conf" &> /dev/null; then + # Override the ssh-agent environment file default path. + _ssh_agent_env="$_gpg_agent_env" + + # Load the SSH module for additional processing. + pmodload 'ssh' +fi # Clean up. -unset _gpg_agent_info +unset _gpg_agent_{conf,env} # Disable GUI prompts inside SSH. if [[ -n "$SSH_CONNECTION" ]]; then