From 4ceed7622101984151072a22a542e4d96ce84fcf Mon Sep 17 00:00:00 2001 From: crater2150 Date: Mon, 23 Oct 2017 10:28:55 +0200 Subject: [PATCH] Add project manager module --- aliases/functions | 9 ------- modules/project/init | 56 ++++++++++++++++++++++++++++++++++++++++++++ modules/prompt/init | 12 +++++++--- 3 files changed, 65 insertions(+), 12 deletions(-) create mode 100755 modules/project/init diff --git a/aliases/functions b/aliases/functions index 18e5aa4..384b7aa 100644 --- a/aliases/functions +++ b/aliases/functions @@ -215,15 +215,6 @@ cropdetect() { # programming ##############################################################################{{{ -# cd for /code/projects dir with completion -pp(){ - if [ -d $HOME/code/projects/$* ]; then - cd $HOME/code/projects/$* - else - vim $HOME/code/projects/$* - fi -}; - # watch latex file for changes and rebuild latexwatch() { maindoc=$1 diff --git a/modules/project/init b/modules/project/init new file mode 100755 index 0000000..3bc1b88 --- /dev/null +++ b/modules/project/init @@ -0,0 +1,56 @@ +#!/bin/zsh + +typeset -ag ZP_LIST + +local load-project-list() { + ZP_LIST=( $ZDOTDIR/projects/*(N:t) ) +} +load-project-list + +project() { + case "$1" in + reload) + load-project-list + echo "${(j:\n:)ZP_LIST}" + ;; + close) + unset ZPROJECT + ;; + open) + shift + open-project "$@" + ;; + esac +} + +_project_open() { + _arguments "2:project:($ZP_LIST)" + #_alternative "project:project:($ZP_LIST)" +} + +_project() { + _arguments "1:Action:->action" \ + "*: :->args" + case "$state" in + action) + _arguments '1:action:(open close reload)' + ;; + args) + _project_$words[2] + ;; + esac +} +compdef _project project + +local open-project() { + typeset -gA ZPROJECT + ZPROJECT[name]="$1" + source $ZDOTDIR/projects/$1 + pcd +} + +pcd() { + cd ${ZPROJECT[path]} +} + +alias pp=project diff --git a/modules/prompt/init b/modules/prompt/init index ce518b8..5bc78ac 100644 --- a/modules/prompt/init +++ b/modules/prompt/init @@ -116,8 +116,14 @@ function setprompt() { #middle info line - if mod_loaded vcs; then - middleline+=( "${rpscolor}${PR_VBAR} $(vcs_char) ${vcs_info_msg_0_}${reset}" ) + middleline+=( "${rpscolor}${PR_VBAR} ") + + if mod_loaded vcs && [[ -n ${vcs_info_msg_0_} ]]; then + middleline+=( "$(vcs_char) ${vcs_info_msg_0_}${reset}" ) + fi + + if mod_loaded project && [[ -n $ZPROJECT ]]; then + middleline+=( "${pathcolor}❰${ZPROJECT[name]}❱${reset}" ) fi i_width=${(S)middleline//\%\{*\%\}} # search-and-replace color escapes @@ -128,7 +134,7 @@ function setprompt() { lines+=( ${(j::)infoline} ) - [[ -n ${vcs_info_msg_0_} ]] && lines+=( "${middleline}${filler}${rpscolor}${PR_VBAR}" ) + [[ $#middleline > 1 ]] && lines+=( "${middleline}${filler}${rpscolor}${PR_VBAR}" ) lines+=( "${CORNER_LD}${PVPREFIX} %(1j.${rpscolor}%j${reset} .)${usercolor}%#${reset} " ) ### Finally, set the prompt