diff --git a/zsh/functions/add_to_list b/zsh/functions/add_to_list new file mode 100644 index 0000000..801e662 --- /dev/null +++ b/zsh/functions/add_to_list @@ -0,0 +1,4 @@ +# -*- mode: sh; -*- +if [[ "${(P)${1}}" =~ (^|:)"$2"(:|$) ]]; then; else + typeset -g $1="${(P)${1}}:$2" +fi diff --git a/zsh/functions/chpwd_show_todo b/zsh/functions/chpwd_show_todo new file mode 100644 index 0000000..88ee853 --- /dev/null +++ b/zsh/functions/chpwd_show_todo @@ -0,0 +1,7 @@ +# -*- mode: Shell-script -*- + +if [ -e ".toudou" ]; then + toudou +elif [ "$PWD" = "$HOME" ]; then + toudou list -g +fi diff --git a/zsh/functions/chpwd_update_git_vars b/zsh/functions/chpwd_update_git_vars new file mode 100644 index 0000000..0ef846a --- /dev/null +++ b/zsh/functions/chpwd_update_git_vars @@ -0,0 +1,2 @@ +# -*- mode: shell-script -*- +update_current_git_vars diff --git a/zsh/functions/get_cnt b/zsh/functions/get_cnt new file mode 100644 index 0000000..5fc3d4f --- /dev/null +++ b/zsh/functions/get_cnt @@ -0,0 +1,15 @@ +# -*- mode: shell-script -*- + +if [ -n "$1" ]; then + if [ -e "$HOME/.local/share/$1.cnt" ]; then + cnt=$(/bin/cat "$HOME/.local/share/$1.cnt") + fi + + if [ -z "$cnt" ]; then + cnt=0 + fi + + echo $cnt +else + echo "No count name specified" >&2 +fi diff --git a/zsh/functions/insert-sudo b/zsh/functions/insert-sudo new file mode 100644 index 0000000..4fc68e6 --- /dev/null +++ b/zsh/functions/insert-sudo @@ -0,0 +1,5 @@ +# -*- mode: sh; -*- +# Copied and modified from +# http://zshwiki.org/home/code/zle/addsudoorpfexec +BUFFER="sudo $(history -n -1 -1)" +CURSOR=$#BUFFER diff --git a/zsh/functions/line b/zsh/functions/line new file mode 100644 index 0000000..58f7aed --- /dev/null +++ b/zsh/functions/line @@ -0,0 +1,8 @@ +# -*- mode: shell-script; eval: (git-auto-commit-mode 1) -*- + +let start=$(expr $1 + 1) +let width=$(expr $COLUMNS - $2) + +for i in {$start..$width}; do + echo -n \\x2d +done diff --git a/zsh/functions/mailcount b/zsh/functions/mailcount new file mode 100755 index 0000000..afe6736 --- /dev/null +++ b/zsh/functions/mailcount @@ -0,0 +1,7 @@ +#!/bin/zsh + +local _new=`ls "$1"/inbox/new | wc -l` +local _unread=`ls "$1"/inbox/cur | egrep -v "S$" | wc -l` +let _count=$_new+$_unread + +echo -n $_count diff --git a/zsh/functions/precmd_maybe_festival b/zsh/functions/precmd_maybe_festival new file mode 100644 index 0000000..3f8baa3 --- /dev/null +++ b/zsh/functions/precmd_maybe_festival @@ -0,0 +1,15 @@ +cmdstatus=$? + +if [ -n "$__COMMAND_EXECUTING" -a $__COMMAND_EXECUTING -gt 0 \ + -a -n "$__COMMAND_EXEC_TIME" ]; then + __COMMAND_EXECUTING=0 + duration=$(expr $(date +%s) - $__COMMAND_EXEC_TIME) + + if [ $duration -gt 30 ]; then + if [ $cmdstatus -eq 0 ]; then + echo "done" | festival --tts + else + echo "failed" | festival --tts + fi + fi +fi diff --git a/zsh/functions/precmd_update_git_vars b/zsh/functions/precmd_update_git_vars new file mode 100644 index 0000000..172456a --- /dev/null +++ b/zsh/functions/precmd_update_git_vars @@ -0,0 +1,6 @@ +# -*- mode: shell-script -*- + +if [ -n "$__EXECUTED_GIT_COMMAND" ]; then + update_current_git_vars + unset __EXECUTED_GIT_COMMAND +fi diff --git a/zsh/functions/precmd_update_updates b/zsh/functions/precmd_update_updates new file mode 100644 index 0000000..639fd5c --- /dev/null +++ b/zsh/functions/precmd_update_updates @@ -0,0 +1,11 @@ +# -*- mode: shell-script -*- + +if [ -n "$__EXECUTED_PACMAN_COMMAND" ]; then + update_pac_cnt + unset __EXECUTED_PACMAN_COMMAND +fi + +if [ -n "$__EXECUTED_COWER_COMMAND" ]; then + update_aur_cnt + unset __EXECUTED_COWER_COMMAND +fi diff --git a/zsh/functions/preexec_update_vars b/zsh/functions/preexec_update_vars new file mode 100644 index 0000000..f8c1b44 --- /dev/null +++ b/zsh/functions/preexec_update_vars @@ -0,0 +1,16 @@ +# -*- mode: shell-script -*- + +case "$1" in + git*) + __EXECUTED_GIT_COMMAND=1 + ;; + cower*) + __EXECUTED_COWER_COMMAND=1 + ;; + *pacman*) + __EXECUTED_PACMAN_COMMAND=1 + ;; +esac + +__COMMAND_EXEC_TIME=$(date +%s) +__COMMAND_EXECUTING=1 diff --git a/zsh/functions/prompt b/zsh/functions/prompt new file mode 100644 index 0000000..6fe927b --- /dev/null +++ b/zsh/functions/prompt @@ -0,0 +1,15 @@ +# -*- mode: shell-script; eval: (git-auto-commit-mode 1) -*- + +local pac_cnt=$(get_cnt updates) +local aur_cnt=$(get_cnt aur) +local hostname=$(hostname | cut -d . -f 1) + +if [ $pac_cnt -gt 0 -o $aur_cnt -gt 0 ]; then + printf "%s%d%s/%s%d%s:" \ + "%{${fg[cyan]}%}" $pac_cnt "%{${fg[default]}%}" \ + "%{${fg[cyan]}%}" $aur_cnt "%{${fg[default]}%}" +fi + +printf '%s%s%s:%s%s%s%s ' \ + "%{${fg[magenta]}%}" $hostname "%{${fg[default]}%}" \ + "%(?.%{${fg[green]}%}.%{${fg[red]}%})" "%~" "%{${fg[default]}%}" diff --git a/zsh/functions/prompt_git_info b/zsh/functions/prompt_git_info new file mode 100644 index 0000000..76d889a --- /dev/null +++ b/zsh/functions/prompt_git_info @@ -0,0 +1,23 @@ +# -*- mode: shell-script -*- + +if [ -n "$__CURRENT_GIT_BRANCH" ]; then + local s="(" + s+="$__CURRENT_GIT_BRANCH" + case "$__CURRENT_GIT_BRANCH_STATUS" in + ahead) + s+="↑" + ;; + diverged) + s+="↕" + ;; + behind) + s+="↓" + ;; + esac + if [ -n "$__CURRENT_GIT_BRANCH_IS_DIRTY" ]; then + s+="⚡" + fi + s+=")" + + printf " %s%s" "%{${fg[yellow]}%}" $s +fi diff --git a/zsh/functions/rprompt b/zsh/functions/rprompt new file mode 100644 index 0000000..3392379 --- /dev/null +++ b/zsh/functions/rprompt @@ -0,0 +1,4 @@ +# -*- mode: shell-script -*- + +local git_info="$(prompt_git_info)" +printf '%s%s' $git_info "%{${fg[default]}%}" diff --git a/zsh/functions/shorten-dir b/zsh/functions/shorten-dir new file mode 100644 index 0000000..a630971 --- /dev/null +++ b/zsh/functions/shorten-dir @@ -0,0 +1,6 @@ +# -*- mode: sh; -*- +autoload -U regexp-replace + +local curdir=$1 +regexp-replace curdir '(\.?[^./])[^/]+/' '$match/' +echo $curdir diff --git a/zsh/functions/update_current_git_vars b/zsh/functions/update_current_git_vars new file mode 100644 index 0000000..71f37e7 --- /dev/null +++ b/zsh/functions/update_current_git_vars @@ -0,0 +1,30 @@ +# -*- mode: Shell-script -*- +unset __CURRENT_GIT_BRANCH +unset __CURRENT_GIT_BRANCH_STATUS +unset __CURRENT_GIT_BRANCH_IS_DIRTY + +local st="$(git status 2>/dev/null)" +if [[ -n "$st" ]]; then + local -a arr + arr=(${(f)st}) + + if [[ $arr[1] =~ 'Not currently on any branch.' ]]; then + __CURRENT_GIT_BRANCH='no-branch' + else + __CURRENT_GIT_BRANCH="${arr[1][(w)4]}" + fi + + if [[ $arr[2] =~ 'Your branch is' ]]; then + if [[ $arr[2] =~ 'ahead' ]]; then + __CURRENT_GIT_BRANCH_STATUS='ahead' + elif [[ $arr[2] =~ 'devirged' ]]; then + __CURRENT_GIT_BRANCH_STATUS='diverged' + else + __CURRENT_GIT_BRANCH_STATUS='behind' + fi + fi + + if [[ ! $st =~ 'nothing to commit' ]]; then + __CURRENT_GIT_BRANCH_IS_DIRTY='1' + fi +fi diff --git a/zsh/functions/welcome b/zsh/functions/welcome new file mode 100644 index 0000000..bd6aacd --- /dev/null +++ b/zsh/functions/welcome @@ -0,0 +1,10 @@ +# -*- mode: shell-script; eval: (git-auto-commit-mode 1) -*- + +echo " , _ _ _ |" +echo " /#\\ __ _ _ __ ___| |__ | (_)_ __ _ ___ __ |" +echo " /###\\ / _\` | '__/ __| '_ \\| | | '_ \\| | | \\ \\/ / |" +echo " /#####\\ | (_| | | | (__| | | | | | | | | |_| |> < |" +echo " /##,-,##\\ \\__,_|_| \\___|_| |_|_|_|_| |_|\\__,_/_/\\_\\ |" +echo " /##( )##\\ |" +echo " /#.-- --.#\\ A simple, lightweight linux distribution. |" +echo " /\` \`\\ |"