1
0
mirror of https://github.com/Tarrasch/zsh-autoenv.git synced 2024-11-21 23:10:59 +02:00

Improve autoenv-edit

This commit is contained in:
Daniel Hahler 2018-09-14 03:45:17 +02:00
parent e9809c1bd2
commit 279eab90d2
3 changed files with 68 additions and 9 deletions

View File

@ -146,6 +146,8 @@ Default: `0`
zsh-autoenv works automatically once installed. zsh-autoenv works automatically once installed.
### autoenv-edit
You can use ``autoenv-edit`` to edit the nearest/current autoenv files. You can use ``autoenv-edit`` to edit the nearest/current autoenv files.
It will use ``$AUTOENV_EDITOR``, ``$EDITOR``, or ``vim`` for editing. It will use ``$AUTOENV_EDITOR``, ``$EDITOR``, or ``vim`` for editing.

View File

@ -392,19 +392,51 @@ _autoenv_get_file_upwards() {
done done
} }
# Helper function to edit enter/leave files.
autoenv-edit() { autoenv-edit() {
emulate -L zsh emulate -L zsh
local env_file
local -a files
local -A check local -A check
check[enter]=$AUTOENV_FILE_ENTER check[enter]=$AUTOENV_FILE_ENTER
if [[ "$AUTOENV_FILE_ENTER" != "$AUTOENV_FILE_LEAVE" ]]; then if [[ "$AUTOENV_FILE_ENTER" != "$AUTOENV_FILE_LEAVE" ]]; then
check[leave]=$AUTOENV_FILE_LEAVE check[leave]=$AUTOENV_FILE_LEAVE
fi fi
local f t
local -a opts
zmodload -i zsh/zutil
zparseopts -D -a opts c h l
if (( $opts[(I)-h] )); then
echo "Edit or create files (${(j:, :)check}) in DIR."
echo 'DIR defaults to the current directory (looking upward).'
echo "$0 [-h] [-c] [-l] [DIR]"
echo ' -h: this help'
echo ' -c: create new files (uses non-existing files with the editor)'
echo ' -l: list files to be edited'
return
fi
local create=$(( opts[(I)-c] > 0 ))
local use_dir=0 dir
if [[ -n $1 ]]; then
use_dir=1
if [[ "$1" == . ]]; then
dir=
else
dir=${1#/}/
fi
elif (( create )); then
use_dir=1
fi
local f t env_file
local -a files
for t f in ${(kv)check}; do for t f in ${(kv)check}; do
env_file="$f" env_file=${dir}${f}
if ! [[ -f $env_file ]]; then if (( use_dir )); then
if ! (( create )) && ! [[ -f $env_file ]]; then
echo "No $f file found ($t)." >&2
continue
fi
elif ! [[ -f $env_file ]]; then
env_file=$(_autoenv_get_file_upwards . $f) env_file=$(_autoenv_get_file_upwards . $f)
if [[ -z $env_file ]]; then if [[ -z $env_file ]]; then
echo "No $f file found ($t)." >&2 echo "No $f file found ($t)." >&2
@ -417,12 +449,18 @@ autoenv-edit() {
files+=($env_file) files+=($env_file)
done done
if [[ -z "$files" ]]; then if [[ -z "$files" ]]; then
echo "Use -c to create the file(s)." >&2
return 1 return 1
fi fi
if (( opts[(I)-l] > 0 )); then
printf '%s\n' $files
else
echo "Editing $files.." echo "Editing $files.."
local editor local editor
editor="${${AUTOENV_EDITOR:-$EDITOR}:-vim}" editor="${${AUTOENV_EDITOR:-$EDITOR}:-vim}"
eval $editor "$files" eval $editor "$files"
fi
} }
_autoenv_chpwd_handler() { _autoenv_chpwd_handler() {

View File

@ -5,6 +5,7 @@
$ autoenv-edit $ autoenv-edit
No .autoenv.zsh file found (enter). No .autoenv.zsh file found (enter).
No .autoenv_leave.zsh file found (leave). No .autoenv_leave.zsh file found (leave).
Use -c to create the file(s).
[1] [1]
$ touch .autoenv.zsh $ touch .autoenv.zsh
@ -66,3 +67,21 @@ Note with AUTOENV_LOOK_UPWARDS=0
$ autoenv-edit $ autoenv-edit
Note: found ../.autoenv.zsh, but AUTOENV_LOOK_UPWARDS is disabled. Note: found ../.autoenv.zsh, but AUTOENV_LOOK_UPWARDS is disabled.
Editing ../.autoenv.zsh .autoenv_leave.zsh.. Editing ../.autoenv.zsh .autoenv_leave.zsh..
autoenv-edit -c edits non-existing files.
$ EDITOR=true
$ AUTOENV_FILE_ENTER=enter-file AUTOENV_FILE_LEAVE=leave-file autoenv-edit -c
Editing enter-file leave-file..
$ AUTOENV_FILE_ENTER=enter-file AUTOENV_FILE_LEAVE=leave-file autoenv-edit -c .
Editing enter-file leave-file..
$ AUTOENV_FILE_ENTER=enter-file AUTOENV_FILE_LEAVE=leave-file autoenv-edit -c ..
Editing ../enter-file ../leave-file..
autoenv-edit -l lists files.
$ AUTOENV_LOOK_UPWARDS=1 autoenv-edit -l
../.autoenv.zsh
.autoenv_leave.zsh